《2022年操作系统原理高优先权调度算法》由会员分享,可在线阅读,更多相关《2022年操作系统原理高优先权调度算法(15页珍藏版)》请在金锄头文库上搜索。
1、操作系统原理课 程 设 计 报 告 书题目:高优先权调度算法学号:学生姓名:专业:指导教师:5 月 30 日名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 1 页,共 15 页 - - - - - - - - - 目录1 功能描述 . 12 系统设计 . 12.1 总体设计 . 12.2 详细设计 . 12.3 程序运行流程图 . 13 系统实现 . 23.1 程序代码 . 34 系统测试与分析 . 74.1 程序运行开始界面见图2 和图 3 . 74.2 高优先权程序正常运行 .
2、8教师评分表 . 13名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 2 页,共 15 页 - - - - - - - - - 1 1 功能描述先权是指在创建进程时所赋予的优先权,是可以随进程的推进或随其等待时间的增加而改变的, 以便获得更好的调度性能。高优先权优先调度算法可以使紧迫型作业进入系统后能得到优先处理。此算法常被用于批处理系统,作为作业调度算法,也作为多种操作系统中的进程调度算法,还可用于实时系统。该算法用于作业调度时,系统将从后备队列中选择若干个优先权最高的作业装入内存
3、。当用于进程调度时,该算法是把处理机分配给就绪队列中优先权最高的进程。2 系统设计2.1 总体设计验内容利用C 语言来实现对N 个进程采用动态优先权优先算法的进程调度。优先数改变的原则:进程每运行一个时间片,优先数减1。2.2 详细设计1.在运行界面里输入进程名称,进程优先级和进程时间;2.每运行一个时间单位,作业的优先权级数减一;3.在运行出的用户界面中显示初始作业名,作业状态,优先权级数,需要服务的时间,已经运行的时间;4.每次调度前后显示作业队列;2.3 程序运行流程图程序运行流程图见流程图1 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - -
4、- - - - - 名师精心整理 - - - - - - - 第 3 页,共 15 页 - - - - - - - - - 2 3 系统实现用 c+编写的高优先权调度算法算法。是输入进程名、优先数、运行时间从就绪队列中选择优先级高的进程运行优先数减一、运行时间加一需要时间是否等于运行时间进程运行完成结束开始按 1 回车否否是流程图 1 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 4 页,共 15 页 - - - - - - - - - 3 3.1 程序代码程序源代码如下:#inc
5、lude #include struct PCB char p_name20; int p_priority; int p_needTime; int p_runTime; char p_state; struct PCB* next; ; void HighPriority(); void RoundRobin(); void Information(); char Choice(); struct PCB* SortList(PCB* HL); int main() Information(); char choice = Choice(); switch(choice) case 1:
6、system(cls); HighPriority(); break; default: break; system(pause); return 0; void Information() 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 5 页,共 15 页 - - - - - - - - - 4 printf( 按回车键进入演示程序); getchar(); system(cls); char Choice() printf(nn); printf( 1.演示最高优先数优先算法。
7、); printf( 按 1 继续 :); char ch = getchar(); return ch; system(cls); void HighPriority() struct PCB *processes, *pt; /pt 作为临时节点来创建链表,使用for 语句,限制进程数为5 个processes = pt = (struct PCB*)malloc(sizeof(struct PCB); for (int i = 0; i != 5; +i) struct PCB *p = (struct PCB*)malloc(sizeof(struct PCB); printf( 进程
8、号 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(); /接受回车/processes作为头结点来存储链表processes = processes-next; int cases =
9、 0; struct PCB *psorted = processes; while (1) 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 6 页,共 15 页 - - - - - - - - - 5 +cases; pt = processes; /对链表按照优先数排序/psorted 用来存放排序后的链表psorted = SortList(psorted); printf(The execute number: %dnn, cases); printf(* 当前正在运行的进程
10、是:%sn, psorted-p_name); psorted-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 指向已经排序的
11、队列pt = psorted-next; while (pt != NULL) printf(qname state super ndtime runtimen); 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; struct PCB *ap; ap = NULL; /ap指向 pt 的前一个节点while (pt != NULL) i
12、f (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) 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 7 页,共 15 页 - - - - - - - - - 6 break; getchar(); struct PCB* SortLi
13、st(PCB* HL) struct PCB* SL; SL = (struct PCB*)malloc(sizeof(struct PCB); SL = NULL; struct PCB* r = HL; while (r != NULL) struct PCB* t = r-next; struct PCB* cp = SL; struct PCB* ap = NULL; while (cp != NULL) if (r-p_priority cp-p_priority) break; else ap = cp; cp = cp-next; if (ap = NULL) r-next =
14、SL; SL = r; else r-next = cp; ap-next = r; r = t; return SL; 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 8 页,共 15 页 - - - - - - - - - 7 4 系统测试与分析经过测试运行正常,可以达到预期的输出结果。4.1 程序运行开始界面见图2 和图 3 图 2 图 3 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - -
15、 - - - - 第 9 页,共 15 页 - - - - - - - - - 8 4.2 高优先权程序正常运行输入进程名输入5 个进程名、优先数、运行时间,然后程序自动从就绪队列中选择优先级高的进程运行优先执行,一直到所有进程全部运行完毕。具体的见图4图 12。图 4 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 10 页,共 15 页 - - - - - - - - - 9 图 5 图 6 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - -
16、 - - - - - - 名师精心整理 - - - - - - - 第 11 页,共 15 页 - - - - - - - - - 10 图 7 图 8 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 12 页,共 15 页 - - - - - - - - - 11 图 9 图 10 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 13 页,共 15 页 - - - - -
17、 - - - - 12 图 12 图 11 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 14 页,共 15 页 - - - - - - - - - 13 教师评分表评分细则分数理解功能及基本原理程度。 (20 分)报告文字、图、表格式规范、整齐程度。 (15分)报告内容完整、逻辑性程度。 (15 分)程序代码是否有注释、是否有语法错误。 (10分)程序运行是否正常。(20 分)程序运行界面是否美观。 (15 分)是否有创新思考、做法等。 (5 分)其他说明:总分:成绩:指导老师签名:日期:名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 15 页,共 15 页 - - - - - - - - -