西安交通大学自动化系操作系统进程调度实验_第1页
西安交通大学自动化系操作系统进程调度实验_第2页
西安交通大学自动化系操作系统进程调度实验_第3页
西安交通大学自动化系操作系统进程调度实验_第4页
西安交通大学自动化系操作系统进程调度实验_第5页
已阅读5页,还剩19页未读 继续免费阅读

下载本文档

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

文档简介

1、西安交通大学电子信息与工程学院自动化科学与技术系操作系统实验报告实验名称:操作系统实验实验者姓名:XXX实验者学号:21105040XX所在班级:自动化1X报告完成日期:2014年11月18日操作系统实验报告、实验的意义和目的操作系统质量的好坏,直接影响整个计算机系统的性能和用户对计算机的使 用。一个精心设计的操作系统能极大地扩充计算机系统的功能,充分发挥系统中 各种设备的使用效率,提高系统工作的可靠性。由于操作系统涉及计算机系统中 各种软硬件资源的管理,内容比较繁琐,具有很强的实践性。要学好这门课程, 必须把理论与实践紧密结合,才能取得较好的学习效果。培养学生的系统程序设计能力,是操作系统课

2、程的一个非常重要的环节。通 过操作系统上机实验,可以培养学生程序设计的方法和技巧,提高学生编制清晰、 合理、可读性好的系统程序的能力,加深对操作系统课程的理解。使学生更好地 掌握操作系统的基本概念、基本原理、及基本功能,具有分析实际操作系统、设 计、构造和开发现代操作系统的基本能力。二、实验运行环境及上机前的准备实验运行环境:C语言编程环境上机前的准备工作包括:按实验要求事先编好程序;准备好需要输入的中间数据;估计可能出现的问题; 预计可能得到的运行结果。三、实验内容进程调度实验目的要求用VC编写和调试一个进程调度程序,以加深对进程的概念及进程调度算法的理解。内容设计一个有N个进程并行的进程调

3、度程序。其中:1)进程调度算法:采用最高优先数优先的调度算法(即把处理机分配给优 先数最高的进程)和先来先服务算法。2)每个进程有一个进程控制块(PCB)表示。进程控制块可以包含如下信 息:进程名、优先数、到达时间、需要运行时间、已用CPU时间、进程 状态等等。3)进程的优先数及需要的运行时间可以事先人为地指定(也可以由随机数 产生)。进程的到达时间为进程输入的时间。4)进程的运行时间以时间片为单位进行计算。5)每个进程的状态可以是就绪 W(Wait)、运行R(Run)、或完成F(Finish) 三种状态之一。6)就绪进程获得CPU后都只能运行一个时间片。用已占用CPU时间加1 来表示。7)如

4、果运行一个时间片后,进程的已占用CPU时间已达到所需要的运行时 间,则撤消该进程;如果运行一个时间片后进程的已占用CPU时间还未达所需要的运行时间,也就是进程还需要继续运行,此时应将进程的优 先数减1 (即降低一级),然后把它插入就绪队列等待CPU。8)每进行一次调度程序都打印一次运行进程、就绪队列、以及各个进程的 PCB,以便进行检查。9)重复以上过程,直到所要进程都完成为止。调度算法的流程图如下:四、编程实现1.主要变量定义struct pcb (进程控制块PCB,注:进程序列以进程控制块为基本单位char name10;char state;进程名进程状态int super;int nt

5、ime;int rtime;进程优先级进程所需运行时间进程已运行时间struct pcb* link;定义指向PCB控制块的指针,用于创建进程序列*ready=NULL,*p; 定义两个PCB结构的全局变量ready和p,ready初始值为空typedef struct pcb PCB;用PCB来中明进程控制块变量2.主要模块Void InitialInterface()初始化界面Void menu()算法选择的主菜单Void Scheduling(int flag)调度算法的程序入口Void input(int flag)进程控制块输入函数Void sort(int flag)进程序列的排序

6、函数Int space()计算进程等待序列中进程控制块的个数Void running(int flag)进程运行函数Void check(int flag)进程序列的查看函数Void display(PCB * pr,int flag) 显示进程控制块的信息Void destroy()进程撤销函数3.代码#include #include #include #define getpch(type) (type*)malloc(sizeof(type) struct pcb (char name10;char state;int super;int ntime;int rtime;struct

7、pcb* link;*ready=NULL,*p;typedef struct pcb PCB;/初始界面void InitialInterface()* A C* / I I J Jpnntf(ntt* *ttn);printf(ttt操作系统进程调度实验n);* A C*/ I I A A*i* Aprinti(tt*t tn);printf(nnnttt电信学院 nn);printf(ttt班级:自动化 1Xnn);printf(ttt姓名:XXnn);printf(ttt 学号:21105040XXnn);printf(ttt 完成时间:2014 年 11 月 17 号nnnn);pr

8、intf(ttt请输入任意键进入演示过程);getch();void sort(int flag)进程排序函数,flag=1表示对优先级进程的等待序列进行排序,flag=0表示对FCFS进程 的等待序列进彳丁排序 (PCB *first, *second;if(flag=1)/flag=1,对优先级进程的等待序列进行排序(int insert=0;/insert用来判断新近进程是否插入队尾,仅在优先级进程的排序中使用 if(ready=NULL)|(p-super)(ready-super)(p-link=ready;ready=p;else(first=ready;second=first-

9、link;while(second!=NULL)(if(p-super)(second-super)(p-link=second;first-link=p;second=NULL;insert=1;/insert=1,表示新近的进程在序列中间插入else(first=first-link;second=second-link;if(insert=0) first-link=p;/insert=0,表示序列已经检索到队尾,新近进程插入序列尾部else/flag=0,对 FCFS进程的等待序列进行排序(first=ready;if(ready=NULL) ready=p;elsewhile(fir

10、st-link!=NULL) (first=first-link;first-link=p; void input(int flag)初始化时进程序列输入函数,flag=1表示优先级进程序列的输 入,flag=0表示FCFS进程序列的输入 ( int i,N; system(cls);printf(nntt*tt n);if(flag=1)printf(tttt最高优先数优先算法n);elseprintf(tttt先来先服务算法n);printf(tt*ttn);printf(n请输入进程数:);scanf(%d,&N);/优先级进程序列输入if(flag=1)for(i=0;iname);p

11、rintf(n输入进程优先数:); scanf(%d,&p-s uper);printf(n输入进程运行时间:);scanf(%d,&p-ntime);printf(n);p-rtime=0;p-state=w;p-link=NULL;sort(1);/FCFS进程序列输入for(i=0;iname);printf(n输入进程运行时间:);scanf(%d,&p-ntime);printf(n);p-rtime=0;p-state=w;p-link=NULL;sort(0);int space()/计算进程等待序列中的进程个数,从ready开始算起(int l=0; PCB* pr=ready

12、;while(pr!=NULL)(l+;pr=pr-link;return(l);void display(PCB * pr,int flag)进程信息显示,flag=1 表示优先级进程的显示,flag=0表示FCFS进程的显示 (if(flag=1)printf(npnametstatetsupertndtimetruntimen);else printf(npnametstatetndtimetruntimen);printf(|%st,pr-name);printf(|%ct,pr-state);if(flag=1)printf(|%dt,pr-s uper);printf(|%dt,p

13、r-ntime);printf(|%dt,pr-rtime);printf(n);void destroy()/ 释放进程(printf(n进程%s此次运行之后已完成,将退出进程序 歹 U.n,p-name);free(p);void check(int flag)进程查看函数,flag=1表示优先级进程查看,flag=0表示FCFS进程查看 (PCB* pr;printf(n *当前正在运行的进程是:s,p-name);if(flag=1)display(p,1);else display(p,0);pr=ready;printf(n *当前就绪队列状态为:n);if(flag=1)/查看优

14、先级进程序列while(pr!=NULL)(display(pr,1);pr=pr-link;else查看FCFS进程序列while(pr!=NULL)(display(pr,0);pr=pr-link;void running(int flag)进程运行函数,flag=1表示优先级进程的运行,flag=0表示FCFS进程的运行(p-rtime)+;if(p-rtime=p-ntime)destroy();/进程已运行时间等于所需运行时间时将被释放,自动从进程序列中消失else(if(flag=1)/优先级进程运行时的规则:运行时间加一,优先级减一,同时进入等待状态,进入等待序列重新排序(p-

15、super)-;p-state=w;sort(1);else/FCFS进程运行时的规则:运行时间加一,直接进入等待状态并插入队尾(p-state=w;sort(0);void Scheduling(int flag)调度算法,flag=1表示优先级算法,flag=0表示FCFS算法(int len,h=0;char ch;system(cls);if(flag=1)input(1);else input(0);len=space();while(len!=0)&(ready!=NULL)(ch=getchar();h+;printf(n The execute number:%d n,h);p

16、=ready;ready=p-link;p-link=NULL;p-state=R;if(flag=1)/flag=1,优先级进程的查看和运行(check(1);running(1);else/flag=0, FCFS进程的查看和运行(check(0);running(0);printf(n 按回车键继续.);printf(nn进程已经完成.n);ch=getchar();/* 模玦结束*/界面主菜单void menu()(int m;system(cls);printf(nntt*tt n);printf(tttt 进程调度实验n);printf(tt*ttn);printf(nnnttt1

17、.最高优先数优先算法.”);printf(nttt2.先来先服务算法.”);printf(nttt 0.退出程序.”);printf(-nntttt请按键选择进程调度方法:);scanf(%d”,&m);注意:主菜单中只能输入整型数switch(m) (case 1:Scheduling(l);system(cls);menu();break;case 2:Scheduling(0);system(cls);menu();break;case 0:system(cls);break;default:system(cls);menu();/主main()函数/初始化界面/主菜单界面void ma

18、in()(InitialInterface();menu();五、使用说明初始化界面(在此省略)调度算法选择界面进程调度实/储先算法眈退吕程序.请授键证译适程诂.营方法最高优先数优先算法*tfc Jt hfc H 喋 * 妖 *t 时 N fc 喋 喋 fc 凭 j4 最高伏先数优先算法清输入进程数4.输入3个进程控制块a,b,c进程a的优先数为3,运行时间为2 进程b的优先数为2,运行时间为2 进程c的优先数为5,运行时间为2请输入进程数t进程号No.叫输入讲程名海输入进程优先数为输入讲程运行时间没M-Nd.I:毓人注程名北输入讶程优先教输入讲程运行时间噫-并程-Nd . 2:渝入注程名2输

19、人护程优井刮姑输入讲程运行日寸间没输入完所有进程信息后按回车键,进程开始运行,控制窗口显示正 在运行进程的信息和进程等待序列中进程的信息,直至所有进程运行 结束The execute numtier*当前iE在记行的-井程是托prame statesuperndt imeruntimeFlciE151210i当前就绪协刎状态声二prame tatesuper*ndt imeruntimepa;wi320pvria.niesta.tesupen*ndt: imerun trineFib; w121210按回车键继续The execute niLmbei*:2*S前正在运行的咄:程是七pnane

20、state superndtimeruntine!c!K!43211i当前就绪队列状态加pn amestatesupeindt imerun trineI 1iiu131210pnane state superndtimeruntine!b!u!232!Q进程 此次运行之后程完成,将退出进程序列-萤回车键继歧The ex:Ecu1:e nuitbei*: 1*当前正在匹行的世程是;a gpimamestatesuperndtinerunt imeFSa!R:3:2!8*当前就绝队列状态为=Dnamestatesuuerndtineruntimepbf!2!2!0按回车健吉蜷Tlie execu

21、te mimbeF-4f*当前正在E行的送程是:JbDimamestatesupepndtinerunt ime!b!R!2!2!0i当前就靖队列状态为:qnie execute nLimbeF:5*# 前正在诺行的许程是:apname state supep ndlzine punt: imepa!R1212!1*当前就绪队列状态力:pnamestatesunerndtinerunt ime!b!w!i!2!i进程Cal此次运行之后己完成,将退出进程序列核匹车键继续Tlie execute number:6I *当前正在诺行的许程是:kpnamestalze2upendiiine punt:

22、 ime:b:R:i:2I当前就缱队列状态为;进程LJbJ此次运行匚后已完成,将退二进程序列按回车键继缘进程已经完成一先来先服务算法进程调度实验1遗高,尤先勘优先Wfe- 八劣夹先攫雾算法 四.退成呈肯.请按槌北择讶程凋度万法:2输入2个进程控制块a和b,进程a的运行时间为2进程b的运行时间为2:青输清进程数以进程号No . t):渝入讲程名:a输入讲程运行时间没进程号No.l:输入讲程名土输入进程运行时间:M输入完所有进程信息后按回车键,进程开始运行,控制窗口显示 正在运行进程的信息和进程等待序列中进程的信息,直至所有进程运 行结束The execute number: 1*当前正在运行的讲程是Hpricinkcstaticn dt; linerunt iinc何;H!2;S*当前就;绪队列状态天,pnanestatendtimeruntineFibiu:2:0按回车键睡续The execute number:2x s x当前工在运行的逮程是土pnanestatendtimeruntiner:b:R:2i&xsx当前就;绪队列状态为;pnanestatendtimeruntine!aE!2!1技叵车链批续The exit:Gu1;i

温馨提示

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

评论

0/150

提交评论