1408091036_林轶锽_处理器管理_优先数调度算法实验

上传人:pu****.1 文档编号:503621873 上传时间:2023-10-07 格式:DOCX 页数:11 大小:101.69KB
返回 下载 相关 举报
1408091036_林轶锽_处理器管理_优先数调度算法实验_第1页
第1页 / 共11页
1408091036_林轶锽_处理器管理_优先数调度算法实验_第2页
第2页 / 共11页
1408091036_林轶锽_处理器管理_优先数调度算法实验_第3页
第3页 / 共11页
1408091036_林轶锽_处理器管理_优先数调度算法实验_第4页
第4页 / 共11页
1408091036_林轶锽_处理器管理_优先数调度算法实验_第5页
第5页 / 共11页
点击查看更多>>
资源描述

《1408091036_林轶锽_处理器管理_优先数调度算法实验》由会员分享,可在线阅读,更多相关《1408091036_林轶锽_处理器管理_优先数调度算法实验(11页珍藏版)》请在金锄头文库上搜索。

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

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

3、出。 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;void HighPriorit

4、y();void RoundRobin();void Information(); /进入演示程序char Choice(); /演示最高优先数优先算法list SortList(PCB* HL);int main() Information(); char choice = Choice(); switch(choice) case 1: system(cls); HighPriority(); break; default: break; system(pause); return 0;void Information() printf( 按回车键进入演示程序); getchar(); s

5、ystem(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作为临时节点来创立链表,使用for语句,限制进程数为5个 processes = pt = (list)malloc(sizeof(PCB

6、); 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 = NULL; pt-next = p; pt = p; printf(nn); getchar(); /承受回车/pr

7、ocesses作为头结点来存储链表 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); psorted-p_state = R; printf(qname state super ndtime run

8、timen); 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 = psorted-next; while (pt != NULL) printf(qname state super ndtime runtimen

9、); printf(%st%ct%dt%dt%dtnn, pt-p_name, pt-p_state, pt-p_priority, 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-

10、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 (cp != NULL) if (r-p_priority cp-p_priority) break; else ap = cp; cp = cp-next; if (ap = NULL) r-next = SL; SL = r; else r-next = cp; ap-next = r; r = t; return SL; /

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

当前位置:首页 > 建筑/环境 > 施工组织

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