操作系统处理机调度实验C语言版(按优先权排序)

上传人:人*** 文档编号:498912093 上传时间:2023-03-14 格式:DOCX 页数:13 大小:282.66KB
返回 下载 相关 举报
操作系统处理机调度实验C语言版(按优先权排序)_第1页
第1页 / 共13页
操作系统处理机调度实验C语言版(按优先权排序)_第2页
第2页 / 共13页
操作系统处理机调度实验C语言版(按优先权排序)_第3页
第3页 / 共13页
操作系统处理机调度实验C语言版(按优先权排序)_第4页
第4页 / 共13页
操作系统处理机调度实验C语言版(按优先权排序)_第5页
第5页 / 共13页
点击查看更多>>
资源描述

《操作系统处理机调度实验C语言版(按优先权排序)》由会员分享,可在线阅读,更多相关《操作系统处理机调度实验C语言版(按优先权排序)(13页珍藏版)》请在金锄头文库上搜索。

1、中南大学实验名称:处理机调度课程名称:计算机操作系统学生姓名盛希玲学 号0903060215学 院信息科学与工程学院专业班级电子信息工程0602完成时间2008年10月12日目录一 实验内容 2二 实验目的 2三 实验题目 2四 基本思想 2五 算法分析 2六 流程图 3七 算法描述 4八 运行输出结果 9实验内容选择一个调度算法,实现处理机调度。二 实验目的多道系统中,当就绪进程数大于处理机数时,须按照某种策略决定哪些进程 优先占用处理机。本实验模拟实现处理机调度,以加深了解处理机调度的工作。三 实验题目设计一个按优先权调度和时间片轮转算法实现处理机调度的程序。四 基本思想先选择时间片的个数

2、和每个时间片需要的时间,正在运行的进程每运行一秒 其优先权数目加一,即其优先权减小。每个时间片运行结束后,选择进入时间片 进程优先权数目最小的进程,开始下一个时间片的运行。如果有进程运行结束, 则离开,再在就绪队列中选择优先权数目最小的进程进入。在运行期间,如果有 新的进程来到,按优先权大小放入就绪队列中。五 算法分析定义一个结构体,此包含了 PCB 的信息:struct PCBchar PID5;/*进程名*/int needtime;/*要求运行的时间*/int cputime;/*已运行时间*/int priority;/*优先权(越小越高)*/int starttime;/*进入就绪队

3、列的时间*/int overtime;/*运行完成的时间*/int state;/*状态:1 就绪 2运行 3完成*/struct PCB *next;子函数 struct PCB *create(int num,int n) 用来建立一个按优先级大小排列的就 绪进程链表和一个按时间先后循序排列的将进入就绪进程的链表。main()函数中用一 while循环输出进入时间片的进程状态。六 流程图struct PCBchar PID5; int needtime; int cputime; int priority; int starttime; int overtime; int state;七

4、算法描述#define NULL 0#define LEN sizeof(struct PCB) #includestdio.h#includestdlib.h/*进程名*/*要求运行的时间*/*已运行时间*/* 优先权 ( 越小越高 )*/* 进入就绪队列的时间 */*运行完成的时间*/*状态:1 就绪2 运行3 完成*/struct PCB *next;struct PCB *create(int num,int n)/*创建进程,并将进程按优先级顺序插入队列中*/ struct PCB *head,*p,*p1,*p2;int i;head=NULL;/*头指针指零*/for(i=1;i

5、PID); printf( 要求运行的时间 :); scanf(%d,&p-needtime); p-cputime=0; printf( 优先权 :); scanf(%d,&p-priority); if(n=1) p-starttime=0; else printf( 进入就绪队列时间 :); scanf(%d,&p-starttime); p-overtime=-1;为-1*/* 开辟一个空间 */* 输入进程名 */* 输入要运行的时间 */*占用处理机的时间赋为零*/* 输入优先权 */*进入就绪队列的时间赋为零 */*输入进入就绪队列的时间 */* 运行没有结束所以运行完成的时间赋

6、p-state=1;/* 状态赋为就绪状态 */p1=head;/*p1 指针指向头指针 */if(head=NULL)/*如果头指针为零将头指针指向新建立的进程 */head=p;head-next=NULL;else/*头指针不为零的情况 */if(n=1) while(p1!=NULL&p-priorityp1-priority) /* 查找插入点 */ p2=p1;p1=p1-next;else while(p1!=NULL&p-starttimep1-starttime) /* 查找插入点 */ p2=p1;p1=p1-next;if(head=p1)/* 优先权的值最小作为表头 *

7、/p-next=head;p2=head=p;else/* 否则的话插入 */p2-next=p;p-next=p1;return(head);void main()char now5;int cho,num,num1,timepiece,time,i,j,k,flag,choo,clock=0;struct PCB *head,*head1,*over,*later,*l,*l1,*l2,*p,*p0,*p1,*p2,*q,*q1,*q2,*q3;over=NULL;printf( 初始化进程 .n);printf( 输入总的就绪进程数 :);scanf(%d,&num);head=crea

8、te(num,1);/*建立就绪进程的链表 */printf( 输入将会就绪的进程数 :);scanf(%d,&num1);/*建立将会进入就绪进程的链表 */later=create(num1,2);printf(cpu 是否开始运行 :1 是 2 不是 -);scanf(%d,&cho);if(cho=1)/* 处理机开始进行调度 */printf( 现在的时间是: );scanf(%s,now);printf( 显示所有就绪的进程 :n);p2=head;pri ntf(进程名t要求运行时间t已运行时间t优先权t状态(1就绪2运 行3结束)n);while(p2!=NULL)printf

9、(%st%dtt%dtt%dt%dn,p2-PID,p2-needtime,p2-cputime ,p2-priority,p2-state);p2=p2-next;pri nt f(请输入时间片总数:);scanf(%d,&timepiece);pri nt f(请输入时间片的时间:);scanf(%d,&time);pri nt f(运行正式开始!n );head1=head;printf(tt进程名t要求运行时间t已运行时间t优先权t状态n“); for(i=1;inext;else break;p-next=NULL;while(head1!=NULL)/*就绪进程头指针不为零就循环*

10、/head1-state=2;/*状态:1 就绪 2 运行 3 完成*/for(j=1;jstarttime)/*如果将进入就绪队列的进程时间到达加入就绪队列*/l=later;l1=head;later=later-next;if(head=NULL)head=l;head-next=NULL;elsewhile(l1!=NULL&l1-prioritypriority)l2=l1;l1=l1-next;if(l1=head)l-next=head;head=l;elsel2-next=l;l-next=l1;flag=0;printf(n%3d 秒 时间片第 %d 秒 ,clock,j);

11、q=head1;if(head1-needtimehead1-cputime) /* 以运行时间和优先权都加 1*/ head1-cputime+;head1-priority+;while(q)/* 运行队列不为零输出其信息 */if(q=head1)printf(%st%dtt%dtt%dt%dn,q-PID,q-needtime,q-cputime,q-pr iority,q-state);elseprintf(tt %st%dtt%dtt%dt%dn,q-PID,q-needtime,q-cputim e,q-priority,q-state);q=q-next; if(head1-n

12、eedtime=head1-cputime)/*运行完成将其放入 over 为头指针的链表中*/ head1-state=3; head1-overtime=clock;if(over=NULL) over=head1;head1=head1-next;over-next=NULL; elseif(over!=NULL&head1!=NULL)p1=head1-next;p0=over;over=head1;over-next=p0;head1=p1;flag=1;if(flag=1) break;if(flag=1)/* 有进程结束的情况 */if(head!=NULL) /* 就绪队列不为零将优先权最高的放入运行链表中 */q1=head;head=head-next;q2=head1;while(q2!=NULL&q2-prioritypriority) q3=q2;q2=q2-next;if(q2=head1)q1-next=head1;head1=q1;elseq3-next=q1;q1-next=q2;else/* 无进程结束的情况 , 寻找优先权最高的运行 */head1-state=1;q1=head1;head1=head1-

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 机械/制造/汽车 > 电气技术

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号