已阅读5页,还剩7页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
操作系统综合性实验报告院系:计算机与信息技术学院专业:网络工程学号:0708324050 姓名:王东阳 计算机与信息技术学院综合性实验报告专业:网络工程 年级/班级:07级 网络1班 20092010学年第一学期课程名称计算机操作系统指导教师李双群本组成员学号姓名学号:0708324050 姓名:王东阳实验地点计算机学院215机房实验时间2009.12.42009.12.112009.12.18项目名称进程调度实验实验类型综合性一、 实验目的通过模拟实现请求页式存储管理的几种基本页面置换算法,了解虚拟存储技术的特点,掌握虚拟存储请求页式存储管理中几种基本页面置换算法的基本思想和实现过程,并比较它们的效率。二、 实验仪器或设备学院提供机房,每人一台微型计算机。三、 总体设计(设计原理、设计方案及流程等)总的设计思想:1、 优先级进程调度算法采用动态优先级进程调度算法,其基本思想是每次调度总是把处理机分配给优先级最高的进程,同时在运行过程中进程的优先级随着执行或等待的时间而降低或增加。在该实验中每个进程用一个进程控制块( PCB)表示。进程控制块包含如下信息:进程名、优先数、需要运行时间、已用CPU时间、进程状态、队列指针。进程的优先级及需要的运行时间事先人为地指定。 每个进程的状态可以是就绪(ready)、运行(execute)、或完成(Finish)三种状态之一。 就绪进程获得 CPU后都只能运行一个时间片。用已占用CPU时间加1来表示。 就绪队列中的进程在等待过程中,优先级不变。如果运行一个时间片后,进程的优先级减3,然后把它插入就绪队列等待CPU。 每进行一次调度程序都打印一次运行进程、就绪队列中各个进程的 PCB,以便进行检查。 重复以上过程,直到所要进程都完成为止。动态优先级调度算法的流程图如下:2、 时间片轮转调度算法采用简单时间片轮转调度算法,其基本思想是:所有就绪进程按 FCFS排成一个队列,总是把处理机分配给队首的进程,各进程占用CPU的时间片相同。如果运行进程用完它的时间片后还未完成,就把它送回到就绪队列的末尾,把处理机重新分配给队首的进程。直至所有的进程运行完毕。简单时间片轮转调度算法的流程图如下:3、 根据上述设计思想分别编写函数实现优先级调度算法和时间片轮转调度算法;在主函数中调用上述两个函数,用户可以选择执行两者之一或退出。环境语言:Linux下的GNU 编译环境四、 实验步骤(包括主要步骤、代码分析等)河南师范大学计算机与信息技术学院实验分3次完成第1次:完成程序的主框架设计,进行上机调试,验证其正确性;(2学时)第2次:对程序进行详细设计,用程序代码完成主框架中的每一条语句,上机进行调试,验证其正确性;根据调试结果对实验进行进一步的修改完善,再次上机调试。(2学时)第3次:进行整体调试,运行程序,对运行结果进行分析,完成实验报告。(2学时)附录 实验源代码如下:#include #include #define P_NUM 5#define P_TIME 50enum stateready,execute,block,finish;struct pcbbchar name4;int priority; /数越大优先级越高int cputime; /已占用CPU的时间int needtime; /执行时间int count;enum state process;struct pcbb *next;typedef struct pcbb pcb;void display_menu()printf(CHOOSE THE ALGORITHM:n);printf(1 PRIORITYn);printf(2 ROUNDROBINn);printf(3 EXITn);pcb* get_process()pcb *q;pcb *p; /头指针pcb *t; /尾指针int i = 0;printf(input name and timen);while (i name);scanf(%d,&q-needtime);q-cputime = 0;q-priority = P_TIME - q-needtime;q-process = ready;q-next = NULL;if(i=0)p = q;t = q;elset-next = q;t = q;i+;return p;void free_process(pcb *p)pcb *q;while(p!= NULL)q = p;p = p-next;free(q);void display(pcb *p)printf(name cputime needtimepriority staten);while(p)printf(%s,p-name);printf( );printf(%d,p-cputime);printf( );printf(%d,p-needtime);printf( );printf(%d,p-priority);printf( );switch(p-process)case ready:printf(readyn);break;case execute:printf(executen); break;case block:printf(blockn); break;case finish:printf(finishn); break;p = p-next;int process_finish(pcb *q)int b1 = 1;while(b1&q)b1 = b1&q-needtime=0;q = q-next;return b1;void cpuexe(pcb *q)pcb *t = q;int tp = 0;while(q) /让t指向优先级最高的进程if (q-process!=finish)q-process = ready;if(q-needtime=0)q-process = finish;if(tppriority&q-process!=finish)tp = q-priority;t = q;q = q-next;if(t-needtime!=0)t-priority -=3; /每执行一次优先级降低三个单位t-needtime -;t-process = execute;t-cputime+;void priority_cal()pcb *p;p = get_process();int cpu = 0;while(!process_finish(p) /就绪队列中还有进程cpu+;printf(cputime:%dn,cpu);cpuexe(p); /选择优先级最高的进程执行一个时间单位display(p); /每调度一次就显示次sleep(2);free_process(p); /释放所有进程printf(All processes have finishedn);pcb *get_process_round()pcb *q;pcb *p; /头指针pcb *t; /尾指针int i = 0;printf(input name and timen);while (iname);scanf(%d,&q-needtime);q-cputime = 0;q-count = 0;q-process = ready;q-next = NULL;if(i=0)p = q;t = q;elset-next = q;t = q;i+;return p;void cpu_round(pcb *q)if(q-needtime=1) q-cputime+; else q-cputime +=2;q-needtime -=2;if(q-needtimeneedtime = 0;q-count+;q-process = execute;pcb *get_next(pcb *k,pcb *head)pcb *t;t = k;dot =t-next;while ( t & t-process = finish);if(t = NULL)t = head;/k是刚刚被执行的节点,如果t-next=k,所明就绪队列除了k和t以外都已结束,按照时间片轮转算法,该t执行while(t-next!=k & t-process = finish)t = t-next;return t;void set_state(pcb *p)while(p)if(p-needtime = 0)p-process = finish;if(p-process = execute)p-process = ready;p = p-next;void display_round(pcb *p)printf(name cputime needtimecount staten);while(p)printf(%s,p-name);printf( );printf(%d,p-cputime);printf( );printf(%d,p-needtime);printf( );printf(%d,p-count);printf( );switch(p-process)case ready:printf(readyn);break;case execute:printf(executen); break;case block:printf(blockn); break;case finish:printf(finishn); break;p = p-next;void round_cal()pcb *p;pcb *r;p = get_process_round();int cpu = 0;r=p;while(!process_finish(p) /就绪队列中还有进程if(r-needtime=1)cpu+=1;elsecpu+=2; /时间片长度是2cpu_round(r);r = get_next(r,p); /获得下一个需要执行的进程printf(cputime:%dn,cpu);display_round(p); /每调度一次就显示次set_state(p);sleep(2);free_process(p); /释放所有进程main()display_menu();int k;scanf(%d,&k);switch(k)case 1:priority_cal();break;case 2:round_cal();break;case 3:break;default:printf(YOU HAVE NOT CHOOSE ANY ALGORITHM!n);五、 结果分析与总结运行结果如下所示优先级调度算法:CHOOSE THE ALGORITHM:1 PRIORITY2 ROUNDROBIN3 EXIT1input name and timea 2b 3c 3d 4e 5cputime:1name cputime needtime priority statea 1 1 45 executeb 0 3 47 readyc 0 3 47 readyd 0 4 46 readye 0 5 45 readycputime:2name cputime needtime priority statea 1 1 45 readyb 1 2 44 executec 0 3 47 readyd 0 4 46 readye 0 5 45 readycputime:3name cputime needtime priority statea 1 1 45 readyb 1 2 44 readyc 1 2 44 executed 0 4 46 readye 0 5 45 readycputime:4name cputime needtime priority statea 1 1 45 readyb 1 2 44 readyc 1 2 44 readyd 1 3 43 executee 0 5 45 readycputime:5name cputime needtime priority statea 2 0 42 executeb 1 2 44 readyc 1 2 44 readyd 1 3 43 readye 0 5 45 readycputime:6name cputime needtime priority statea 2 0 42 finishb 1 2 44 readyc 1 2 44 readyd 1 3 43 readye 1 4 42 executecputime:7name cputime needtime priority statea 2 0 42 finishb 2 1 41 executec 1 2 44 readyd 1 3 43 readye 1 4 42 readycputime:8name cputime needtime priority statea 2 0 42 finishb 2 1 41 readyc 2 1 41 executed 1 3 43 readye 1 4 42 readycputime:9name cputime needtime priority statea 2 0 42 finishb 2 1 41 readyc 2 1 41 readyd 2 2 40 executee 1 4 42 readycputime:10name cputime needtime priority statea 2 0 42 finishb 2 1 41 readyc 2 1 41 readyd 2 2 40 readye 2 3 39 executecputime:11name cputime needtime priority statea 2 0 42 finishb 3 0 38 executec 2 1 41 readyd 2 2 40 readye 2 3 39 readycputime:12name cputime needtime priority statea 2 0 42 finishb 3 0 38 finishc 3 0 38 executed 2 2 40 readye 2 3 39 readycputime:13name cputime needtime priority statea 2 0 42 finishb 3 0 38 finishc 3 0 38 finishd 3 1 37 executee 2 3 39 readycputime:14name cputime needtime priority statea 2 0 42 finishb 3 0 38 finishc 3 0 38 finishd 3 1 37 readye 3 2 36 executecputime:15name cputime needtime priority statea 2 0 42 finishb 3 0 38 finishc 3 0 38 finishd 4 0 34 executee 3 2 36 readycputime:16name cputime needtime priority statea 2 0 42 finishb 3 0 38 finishc 3 0 38 finishd 4 0 34 finishe 4 1 33 executecputime:17name cputime needtime priority statea 2 0 42 finishb 3 0 38 finishc 3 0 38 finishd 4 0 34 finishe 5 0 30 executeAll processes have finishedPress any key to continue时间片轮转调度算法:CHOOSE THE ALGORITHM:1 PRIORITY2 ROUNDROBIN3 EXIT2input name and timea 3b 2c 1d 2e 3cputime:2name cputime needtime count statea 2 1 1 executeb 0 2 0 readyc 0 1 0 readyd 0 2 0 readye 0 3 0 readycputime:4name cputime needtime count statea 2 1 1 readyb 2 0 1 executec 0 1 0 readyd 0 2 0 readye 0 3 0 readycputime:5name cputime needtime count statea 2 1 1 readyb 2 0 1 finishc 1 0 1 executed 0 2 0 readye 0 3 0 readycputime:7name cputime needtime count statea 2 1 1 readyb 2 0 1 finishc 1 0 1 finishd 2 0
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 会计基础考试题库及答案(带答案解析)
- 安全双控培训试题及答案
- 建筑施工质量监理师技术水平考核试题及答案解析
- 当代科学技术试题及答案
- 德州学院战略管理期末考试试卷(3卷)
- 执业医师资格口腔执业医师第六次综合测试卷含答案
- 护士应知应会考试试题及答案
- 招聘病案统计试题及答案
- 数字化零售模式创新与消费趋势考试试题及答案
- 2025 年大学劳动与社会保障(社会保障学)试题及答案
- 【MOOC】心理学与生活-南京大学 中国大学慕课MOOC答案
- 比熊犬的饲养要点
- 传统教师批改作文的弊端和学生互评作文的可行性分析,作文教学论文
- YY/T 0310-2015X射线计算机体层摄影设备通用技术条件
- GA/T 148-2019法医学病理检材的提取、固定、取材及保存规范
- 《智慧机场发展研究(论文)》
- DB4401-T 102.1-2020 建设用地土壤污染防治+第1部分:污染状况调查技术规范-(高清现行)
- 低压电力电缆招标技术规格书
- 小学道德与法治人教六年级上册第四单元法律保护我们健康成长-《专门法律来保护》教学设计
- 中国债券市场投资手册(2022)
- 光无源器件介绍
评论
0/150
提交评论