• 大小: 906KB
    文件类型: .rar
    金币: 1
    下载: 0 次
    发布日期: 2021-06-05
  • 语言: 其他
  • 标签:

资源简介

第二题[提示] (1) 假定系统有五个进程,每一个进程用一个进程控制块PCB来代表。进程控制块的格式为: 进程名 指针 要求运行时间 已运行时间 状态 其中,进程名----作为进程的标识,假设五个进程的进程名分别是Q1,Q2,Q3,Q4,Q5。 指针----进程按顺序排成循环队列,用指针指出下一个进程的进程控制块首地址,最后一个进程中的指针指出第一个进程的进程控制块首地址。 要求运行时间----假设进程需要运行的单位时间数。 已运行时间----假设进程已经运行的单位时间数,初始值为“0”。 状态----有两种状态,“就绪”状态和“结束”状态,初始状态都为“就绪”,用“R”表示,当一个进程运行结束后,它的状态变为“结束”,用“E”表示。 (2) 每次运行你所设计的处理器调度程序之前,为每个进程任意确定它的“要求运行时间”。 把五个进程按顺序排成循环队列,用指针指出队列连接情况。另用一标志单元记录轮到运行的进程。 (3) 处理器调度总是选择标志单元指示的进程运行。由于本实验是模拟处理器调度的功能,所以,对被选中的进程并不实际启动运行,而是执行: 已运行时间+1 来模拟进程的一次运行,表示进程已经运行过一个单位的时间。 请注意:在实际的系统中,当一个进程被选中运行时,必须置上该进程可以运行的时间片值,以及恢复进程的现场,让它占有处理器运行,直到出现等待事件或运行满一个时间片。在这里省去了这些工作,仅用“已运行时间+1”来表示进程已经运行满一个时间片。 (4) 进程运行一次后,应把该进程的进程控制块中的指针值送到标志单元,以指示下一个轮到运行的进程。同时,应判断该进程的要求运行时间与已运行时间,若该进程要求运行时间≠已运行时间,则表示它尚未执行结束,应待到下一轮时再运行。若该进程的要求运行时间=已运行时间,则表示它已经执行结束,应把它的状态修改为“结束”(E)且退出队列。此时,应把该进程的进程控制块中的指针值送到前面一个进程的指针位置。 (5) 若“就绪”状态的进程队列不为空,则重复上面(4)和(5)的步骤,直到所有进程都成为“结束”状态。 (6) 在所设计的称序中应有显示或打印语句,能显示或打印每次被选中进程的进程名以及运行一次后进称对列的变化。 (7) 为五个进程任意确定一组“要求运行时间”,启动所设计的处理器调度程序,显示或打印逐次被选中进程的进程名以及进程控制块的动态变化过程。

资源截图

代码片段和文件信息

 #include 
#include 
#include 
#include 
using namespace std;
class List; 
class PCB//定义进程PCB
{
public:
friend class List;
private:
PCB (char p[]int t){strcpy(pnamep);runnedtime=0;requesttime=t;status=‘R‘;next=NULL;}
char pname[2];
int runnedtime;
int requesttime;
char status;
PCB* next;
};
class List//链表类
{
public:
List(char p[]=“Q1“int t=0){list=new PCB(pt);pc=list;time=0;}
int print();
int append(char p[]int t);
//void insert(char p[]int t);
void run();
//void link();
//int length();
private:
PCB *list;
PCB *end();
PCB *pc;
int time;
};
/*int List::length()
{
int cnt=0;
PCB *pt=list;
for(;pt->next!=list;pt->nextcnt++)
;
return cnt;
}*/
/*void List::link()
{
if(list!=NULL)
(end())->next=list;
}*/
/*void List::insert(char p[]int t)
{
PCB *pt=new PCB(pt);
pt->next=list;
list=pt;
}*/
int List::append(char p[]int t)//添加结点
{
PCB *pt=new PCB(pt);
if(list==NULL)
      list=pt;
else
{
    (end())->next=pt;
}
return 1;
}
PCB *List::end()
{
PCB *prv*pt;
for(prv=pt=list;pt;prv=ptpt=pt->next)
;
return prv;
}
int List :: print()//显示打印函数
{
time++;
if(list==0)
return 0;
PCB *pt=list;
cout<<“\t\t进程名 已运行时间 要求运行时间  状态“<while(pt)
{
cout<<“ “;
cout<<“\t\t“<pname[0]<pname[1]<<“         “;
cout<runnedtime<<“          “;
cout<requesttime<<“          “;
cout<status<<“      “; 
cout<pt=pt->next;
}
getch();
return 1;
}
void List:: run()//模拟调度的实现过程
{
    for(;pc;)
{
PCB *pt=list;
cout<<“\t\t==================================“< cout<<“\t\t==================================“< cout<<“\t\t请选择#退出,选择*继续“< char u;
cin>>u;
if(u==‘#‘)
{
break;
}
if(u==‘*‘)
;
cout<<“\t\t  CPU运行时间:“< cout<<“\t\t  正在运行的进程为:“<pname< pc->runnedtime+=1;
     if(pc->runnedtime==pc->requesttime)
{
pc->status=‘E‘;
cout<<“\t\t==================================“< cout<<“\t\t  进程--“<pname<<“运行时间已满,置状态为“E”,退出队列!“<
if(pc==list)
{
list=list->next;
pc=pc->next;
}
        else
{
for(;pt->next!=pc;pt=pt->next)
;
        if(pc->next!=NULL)
{
           pt->next=pc->next;
           pc=pc->next;    
}
else
{
        pt->next=NULL;
pc=list;
}
}
}
     else 
{
if(pc->next!=NULL)
          pc=pc->next;
        else
 pc=list;
}
     print(); 

}
void main()//MAIN()函数
{
int S;
cout<cout<cout<<“\t\t**************************************“<cout<<“\t\t====模拟时间片轮转法实现处理器调度====“<cout<<“\t\t输入进程个数:“;
cin>>S;
char name[10];
int n;
cout<<“\t\t请输入第1个进程的名字:“;
cin>>name;
cout<<“\t\t请输入要运行的时间:“;
cin>>n;
List list(namen);
for(int i=2;i<=S;i++)
{
cout<<“\t\t请输入第“<cin>>name;
cout<<“\t\t请输入要运行的时间:“;
cin>>n;
list.append(namen);
}
cout<<“\t\t  初始化各进程状态如下:“<list.pr

 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----

     文件     108544  2008-12-11 21:37  操作系统原理实验题.doc

     文件       3181  2008-12-11 11:49  shijianp.cpp

     文件     557123  2008-12-11 21:41  shijianp\Debug\shijianp.exe

     文件     802520  2008-12-11 21:41  shijianp\Debug\shijianp.ilk

     文件     269516  2008-12-11 21:41  shijianp\Debug\shijianp.obj

    I.A....   2001556  2008-12-11 21:41  shijianp\Debug\shijianp.pch

     文件    1115136  2008-12-11 21:41  shijianp\Debug\shijianp.pdb

     文件      74752  2008-12-11 21:41  shijianp\Debug\vc60.idb

     文件     110592  2008-12-11 21:41  shijianp\Debug\vc60.pdb

     目录          0  2008-12-11 21:41  shijianp\Debug

     文件       3181  2008-12-11 11:49  shijianp\shijianp.cpp

     文件       3425  2008-12-11 21:41  shijianp\shijianp.dsp

     文件        522  2008-12-11 21:42  shijianp\shijianp.dsw

     文件      33792  2008-12-11 21:42  shijianp\shijianp.ncb

     文件      48640  2008-12-11 21:42  shijianp\shijianp.opt

     文件       1279  2008-12-11 21:41  shijianp\shijianp.plg

     目录          0  2008-12-11 21:42  shijianp

----------- ---------  ---------- -----  ----

              5133759                    17


评论

共有 条评论