计算机操作系统处理机调度实验报告Word文件下载.docx
- 文档编号:18807225
- 上传时间:2023-01-01
- 格式:DOCX
- 页数:14
- 大小:163.83KB
计算机操作系统处理机调度实验报告Word文件下载.docx
《计算机操作系统处理机调度实验报告Word文件下载.docx》由会员分享,可在线阅读,更多相关《计算机操作系统处理机调度实验报告Word文件下载.docx(14页珍藏版)》请在冰豆网上搜索。
如果有进程运行结束,则离开,再在就绪队列中选择优先权数目最小的进程进入。
在运行期间,如果有新的进程来到,按优先权大小放入就绪队列中。
五算法分析
定义一个结构体,此包含了PCB的信息:
structPCB
{
charPID[5];
/*进程名*/
intneedtime;
/*要求运行的时间*/
intcputime;
/*已运行时间*/
intpriority;
/*优先权(越小越高)*/
intstarttime;
/*进入就绪队列的时间*/
intovertime;
/*运行完成的时间*/
intstate;
/*状态:
1就绪2运行3完成*/
structPCB*next;
};
子函数structPCB*create(intnum,intn)用来建立一个按优先级大小排列的就绪进程链表和一个按时间先后循序排列的将进入就绪进程的链表。
main()函数中用一while循环输出进入时间片的进程状态。
六流程图
七算法描述
#defineNULL0
#defineLENsizeof(structPCB)
#include"
stdio.h"
stdlib.h"
structPCB
/*优先权(越小越高)*/
structPCB*create(intnum,intn)
/*创建进程,并将进程按优先级顺序插入队列中*/
structPCB*head,*p,*p1,*p2;
inti;
head=NULL;
/*头指针指零*/
for(i=1;
i<
=num;
i++)/*循环建立所有进程*/
{
printf("
请输入第%d个进程的信息\n"
i);
p=(structPCB*)malloc(LEN);
/*开辟一个空间*/
进程名:
"
);
/*输入进程名*/
scanf("
%s"
p->
PID);
要求运行的时间:
/*输入要运行的时间*/
%d"
&
p->
needtime);
p->
cputime=0;
/*占用处理机的时间赋为零*/
优先权:
/*输入优先权*/
priority);
if(n==1)
starttime=0;
/*进入就绪队列的时间赋为零*/
else
进入就绪队列时间:
/*输入进入就绪队列的时间*/
starttime);
}
overtime=-1;
/*运行没有结束所以运行完成的时间赋为-1*/
state=1;
/*状态赋为就绪状态*/
p1=head;
/*p1指针指向头指针*/
if(head==NULL)/*如果头指针为零将头指针指向新建立的进程*/
{head=p;
head->
next=NULL;
}
else/*头指针不为零的情况*/
if(n==1)
while(p1!
=NULL&
&
priority>
p1->
priority)/*查找插入点*/
{p2=p1;
p1=p1->
next;
}
starttime>
starttime)/*查找插入点*/
if(head==p1)/*优先权的值最小作为表头*/
{p->
next=head;
p2=head=p;
else/*否则的话插入*/
{p2->
next=p;
next=p1;
return(head);
voidmain()
charnow[5];
intcho,num,num1,timepiece,time,i,j,k,flag,choo,clock=0;
structPCB*head,*head1,*over,*later,*l,*l1,*l2,*p,*p0,*p1,*p2,*q,*q1,*q2,*q3;
over=NULL;
初始化进程...\n"
输入总的就绪进程数:
num);
head=create(num,1);
/*建立就绪进程的链表*/
输入将会就绪的进程数:
num1);
/*建立将会进入就绪进程的链表*/
later=create(num1,2);
cpu是否开始运行:
1是2不是--"
cho);
if(cho==1)/*处理机开始进行调度*/
现在的时间是:
now);
显示所有就绪的进程:
\n"
p2=head;
进程名\t要求运行时间\t已运行时间\t优先权\t状态(1就绪2运行3结束)\n"
while(p2!
=NULL)
printf("
%s\t%d\t\t%d\t\t%d\t%d\n"
p2->
PID,p2->
needtime,p2->
cputime,p2->
priority,p2->
state);
p2=p2->
请输入时间片总数:
timepiece);
请输入时间片的时间:
time);
运行正式开始!
head1=head;
\t\t进程名\t要求运行时间\t已运行时间\t优先权\t状态\n"
=timepiece;
i++)/*将进入时间片运行的进程用头指针head1指示,并改变就绪进程头指针head的指向*/
if(head!
=NULL)
p=head;
head=head->
elsebreak;
while(head1!
=NULL)/*就绪进程头指针不为零就循环*/
{
head1->
state=2;
1就绪2运行3完成*/
for(j=1;
j<
=time;
j++)/*每个时间片所需时间的循环*/
clock++;
/*定时器每秒加1*/
if(later!
clock==later->
starttime)
/*如果将进入就绪队列的进程时间到达加入就绪队列*/
{l=later;
l1=head;
later=later->
if(head==NULL)
{head=l;
while(l1!
l1->
priority<
=l->
priority)
{l2=l1;
l1=l1->
if(l1==head)
l->
head=l;
l2->
next=l;
next=l1;
flag=0;
\n%3d秒时间片第%d秒"
clock,j);
q=head1;
if(head1->
needtime>
head1->
cputime)/*以运行时间和优先权都加1*/
cputime++;
priority++;
while(q)/*运行队列不为零输出其信息*/
{if(q==head1)
q->
PID,q->
needtime,q->
cputime,q->
priority,q->
\t\t%s\t%d\t\t%d\t\t%d\t%d\n"
q=q->
needtime==head1->
cputime)
/*运行完成将其放入over为头指针的链表中*/
{
state=3;
overtime=clock;
if(over==NULL)
{over=head1;
head1=head1->
over->
else
if(over!
head1!
p1=head1->
p0=over;
over=head1;
over->
next=p0;
head1=p1;
flag=1;
if(flag==1)break;
if(flag==1)/*有进程结束的情况*/
=NULL)/*就绪队列不为零将优先权最高的放入运行链表中*/
{q1=head;
q2=head1;
while(q2!
q2->
=q1->
{q3=q2;
q2=q2->
if(q2==head1)
q1->
next=head1;
head1=q1;
q3->
next=q1;
next=q2;
else/*无进程结束的情况,寻找优先权最高的运行*/
q1=head1;
head1=head1->
{q1->
head1=q1;
{q3->
q1->
cpu结束运行!
是否输出所有结束的进程:
1是2不是--"
scanf("
choo);
if(choo==1)/*输出所有完成运行的进程*/
开始时间:
%s\n"
进程名\t要求运行时间\t进入就绪队列的时间\t运行完成的时间\n"
while(over!
%s\t%d\t\t%d\t\t\t%d\n"
over->
PID,over->
needtime,over->
starttime,over->
overtime);
over=over->
八运行输出结果
初始化进程如右图
显示现在的时间和所有就绪的进程
输入时间片的总数和每个时间片的时间
运行时显示的信息
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 计算机 操作系统 处理机 调度 实验 报告