1408091036_林轶锽_处理器管理_优先数调度算法实验_第1页
1408091036_林轶锽_处理器管理_优先数调度算法实验_第2页
1408091036_林轶锽_处理器管理_优先数调度算法实验_第3页
已阅读5页,还剩6页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、师大学计算机信息工程学院学生实验报告专业 _计算机科学与技术正大班 林轶锽 学号 _1408091036 日期 _ 2016.06.15课程名称操作系统实验室名称X-4313实验名称处理器管理 - 优先数调度算法指导教师旭升成绩1、 实验目的进程调度 :在多道程序或者多任务系统中, 同时处于就绪态的进程有若干个。 在单处理器系统中, 处于运行态的进 程最多只有一个,也就是说能运行的进程数远小于就绪态进程个数,所以必须进行进程调度,按照一定的调度算法, 即依照某种原则或策略从就绪态队列中选中进程占用处理器。 本实验要求学生设计一个优先数调度算法来模拟实现处 理器调度过程。2、 实验原理和容 实验

2、容:1、进程的优先数由用户自己指定, 并且优先数值越小, 优先级越高, 调度时,总是选择优先级高的进程占用 CPU; 估计运行时间可由设计者任意指定一个时间值;2、根据需要,设计一个队首指针指向 5 个进程( 进程名为 A,B,C,D,E) 组成的就绪队列中的第一个进程, 再设一个 当前指针指向当前正在运行的进程。3、进程调度时,采用静态优先调度。4、用非抢占式方式分配处理器。5、要求所设计的程序必须有输出语句,用于输出进程调度和运行一次后进程的变化。比如:每次被选中的进程 名,就绪队列中进程的排队情况,进程控制块的动态变化。实验步骤:1. 建立进程控制块:输入进程相应信息(进程名,进程状态,

3、估计运行时间和进程的优先数) 。2. 创建进程链表,并按照优先数进行排序输出。3. 按照优先数高者优先占用 CPU的原则,进行进程调度,输出当前正在执行的进程控制块信息及在就绪队列中 的进程信息。3、 程序及运行结果(或实验数据记录及分析)4、具体实现代码 : #include #include typedef struct node char p_name20; / int p_priority; / int p_needTime; / int p_runTime; / char p_state; / struct node* next; / PCB; typedef PCB* list;

4、void HighPriority(); void RoundRobin(); void Information(); / char Choice(); / list SortList(PCB* HL); int main() Information(); char choice = Choice(); switch(choice) case 1: default:进程名进程的优先数 估计运行的时间 进程运行时间 进程的状态指针进入演示程序 演示最高优先数优先算法system(cls); HighPriority(); break; break;system(pause); return 0;

5、 void Information() printf( 按回车键进入演示程序 ); getchar(); system(cls);char Choice() printf(nn);printf( 1. 演示最高优先数优先算法。 ); printf( 按 1 继续 :);char ch = getchar(); return ch;system(cls); void HighPriority()int i = 0;int cases = 0;list processes, pt,p,psorted;list ap = NULL; /ap 指向 pt 的前一个节点/pt 作为临时节点来创建链表,使

6、用 for 语句,限制进程数为 5 个 processes = pt = (list)malloc(sizeof(PCB);for (; i != 5; +i) p = (list)malloc(sizeof(PCB); printf(进程号 No.%d: n, i);printf(输入进程名: );scanf(%s, p-p_name);printf(输入进程优先数: );scanf(%d, &p-p_priority);printf(输入进程运行时间: );scanf(%d, &p-p needTime);p-p_runTime = 0; p-p_state = W; p-next = N

7、ULL; pt-next = p; pt = p;printf(nn);getchar(); / 接受回车/processes 作为头结点来存储链表processes = processes-next;psorted = processes;while (1)+cases;pt = processes;/ 对链表按照优先数排序/psorted 用来存放排序后的链表 psorted = SortList(psorted);printf(The execute number: %dnn, cases); printf(* 当前正在运行的进程是: %sn, psorted-p_name); psor

8、ted-p_state = R;printf(qname state super ndtime runtimen); printf(%st%ct%dt%dt%dtnn, psorted-p_name, psorted-p_state, psorted-p_priority, psorted-p_needTime, psorted-p_runTime);pt-p_state = W; psorted-p_runTime+; psorted-p_priority-;printf(* 当前就绪状态的队列为: nn);/pt 指向已经排序的队列pt-p_priority,pt = psorted-ne

9、xt; while (pt != NULL) printf(qname state super ndtime runtimen); printf(%st%ct%dt%dt%dtnn, pt-p_name, pt-p_state, pt-p_needTime, pt-p_runTime);pt = pt-next; /pt 指向已经排序的链表,判断链表是否有已用时间啊等于需要时间的 pt = psorted; while (pt != NULL)if (pt-p_needTime = pt-p_runTime) if (ap = NULL) pt = psorted-next; psorted = pt; else ap-next = pt-next; ap = pt; pt = pt-next; if (psorted-next = NULL) break;getchar(); list SortList(list HL)list SL,r,t,cp,ap;SL = (list)malloc(sizeof(PCB);SL = NULL;r = HL;while (r != NULL)t = r-next;cp = SL;ap = NULL;while (c

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论