ImageVerifierCode 换一换
格式:DOCX , 页数:15 ,大小:73.40KB ,
资源ID:17936547      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bingdoc.com/d-17936547.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(操作系统实验一进程调度模拟算法.docx)为本站会员(b****2)主动上传,冰点文库仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰点文库(发送邮件至service@bingdoc.com或直接QQ联系客服),我们立即给予删除!

操作系统实验一进程调度模拟算法.docx

1、操作系统实验一进程调度模拟算法课程名称 操作系统 计算机科学与技术 分院 信10012 班 组 学号 实验者姓名 实验日期 2013 年 4 月 11 日评分 教师签名 实验一 进程调度模拟算法一、 实验目的通过进程调度实验,了解了优先数算法和时间片轮转算法的具体实施办法,体会了优先数算法和时间片轮转算法进程调度的过程,掌握了有关进程控制快、进程队列等概念,提高了编程技巧和对算法的理解和掌握。二、 实验要求进程调度是处理机管理的核心内容,本实验要求用高级语言编写模拟进程调度程序,以便加深理解有关进程控制快、进程队列等概念。三、 实验过程1 准备 分别用两种调度算法对伍个进程进行调度。每个进程可

2、有三种状态;执行状态(RUN)、就绪状态(READY,包括等待状态)和完成状态(FINISH),并假定初始状态为就绪状态。 进程控制块结构如下: NAME进程标示符 PRIO/ROUND进程优先数/进程每次轮转的时间片数(设为常数2) CPUTIME进程累计占用CPU的时间片数 NEEDTIME进程到完成还需要的时间片数 STATE进程状态 NEXT链指针 进程的就绪态和等待态均为链表结构,共有四个指针如下: RUN当前运行进程指针 READY就需队列头指针 TAIL 就需队列尾指针 FINISH 完成队列头指针 运行和显示 程序开始运行后,首先提示:请用户选择算法,输入进程名和相应的NEED

3、TIME值。 每次显示结果均为如下5个字段: name cputime needtime priority state 注: 1在state字段中,R代表执行态,W代表就绪(等待)态,F代表完成态。2应先显示R态的,再显示W态的,再显示F态的。 3在W态中,以优先数高低或轮转顺序排队;在F态中,以完成先后顺序排队。 2.主要流程和源代码实验一源代码#include #include #include #includetypedef struct node char name10; int prio; int round; int cputime; int needtime; int count

4、; char state; struct node *next; PCB;PCB *finish,*ready,*tail,*run;int N;void firstin(void); void print1(char a); void print2(char chose,PCB *p); void print(char chose); void insert_prio(PCB *q); void prior_init(char chose); void priority(char chose); void insert_rr(PCB *q); void roundrun_init(char

5、chose); void roundrun(char chose); void main()/主函数 char chose= ; while(chose!=q)&(chose!=Q) fflush(stdin); printf(选择进程优先级算法请输入P,选择循环轮转算法请输入R,退出请输入Qn); printf(请输入你的选择:); scanf(%c,&chose); if(chose!=q)&(chose!=Q) system(cls); if(chose=P)|(chose=p) prior_init(chose); priority(chose); system(cls); else

6、if(chose=r)|(chose=R) roundrun_init(chose); roundrun(chose); system(cls); printf(谢谢使用!n);void firstin(void) if(ready!=NULL) run=ready; ready=ready-next; run-state=R; run-next=NULL; else run=NULL; void print1(char a) if(toupper(a)=P)printf(name cputime needtime priority state n);elseprintf(name cputi

7、me needtime count round state n); void print2(char chose,PCB *p) if(toupper(chose)=P) printf(%st%dt%dt%dt%cn,p-name,p-cputime,p-needtime,p-prio,p-state); elseprintf(%st%dt%dt%dt%dt%cn,p-name,p-cputime,p-needtime,p-count,p-round,p-state);void print(char chose) PCB *p;print1(chose);if(run!=NULL)print2

8、(chose,run);p=ready;while(p!=NULL) print2(chose,p); p=p-next;p=finish;while(p!=NULL)print2(chose,p);p=p-next;void insert_prio(PCB *q)PCB *p,*s,*r; s=q;p=ready;r=p;if(s-prioready-prio)/ s-next=ready;ready=s; else while(p) if(p-prio=s-prio) r=p; p=p-next; else break; s-next=p;r-next=s;void prior_init(

9、char chose) PCB *p; int i,time; char na10; ready=NULL; finish=NULL; run=NULL; printf(输入进程 的个数 N:n); scanf(%d,&N);for(i=0;iname,na);p-cputime=0;p-needtime=time;p-state=W;p-prio=50-time; if(ready=NULL) ready=p; ready-next=NULL;else insert_prio(p);printf(当前就绪队列的进程的信息n);print(chose);printf(%d个进程已按优先级从高到

10、低进到就绪队列中n,N); printf(按回车键开始模拟优先级算法.n); fflush(stdin); getchar();firstin();void priority(char chose) int i=1;while(run!=NULL) run-cputime+=1; run-needtime-=1; run-prio-=1;if(run-needtime=0) run-next=finish; finish=run; run-state=F; run-prio=0; run=NULL; firstin(); else if(ready!=NULL)&(run-prioprio)

11、run-state=W; insert_prio(run); run=NULL; firstin(); print(chose);getchar();void insert_rr(PCB *q) tail-next=q; tail=q; q-next=NULL;void roundrun_init(char chose)PCB *p;int i,time;char na10;ready=NULL;finish=NULL;run=NULL; printf(tt循环轮转算法模拟全过程nn); printf(输入进程 的个数 N:n); scanf(%d,&N);for(i=0;iname,na);

12、p-cputime=0;p-needtime=time;p-count=0;p-state=W;p-round=2;if(ready!=NULL)insert_rr(p);else p-next=ready; ready=p; tail=p;printf(当前就绪队列的进程的信息n);print(chose); printf(%d个进程已按FIFO进到就绪队列中n,N); printf(按回车键开始模循环轮转算法.n); fflush(stdin); getchar();run=ready;ready=ready-next;run-state=R; void roundrun(char cho

13、se) int i=1;while(run!=NULL)run-cputime+=1;run-needtime-=1;run-count+=1;if(run-needtime=0) run-next=finish; finish=run; run-state=F; run-prio=0; run=NULL; if(ready!=NULL) firstin(); else if(run-count=run-round) run-count=0; if(ready!=NULL) run-state=W; insert_rr(run); firstin(); print(chose);getchar

14、();四、 实验结果五、 实验总结通过本次试验,可以更加清楚的了解时间片轮转的原理。主要是利用时间片的轮转使得每个进程都可以得到一部分时间的执行段。这样可以保证计算机能过在较短的时间内对用户的要求尽量做到都能满足到。了解完原理,就是动手实践的时候。在网上下载几个代码,进行调试,运行、查看结果。最终选择一个比较简单易懂的代码进行实验。看懂代码和结果后,这次实验也算是成功的一大半了。做完实验,首先想到的是这个方法的思想。以及他和其它调度算法的区别,比如先来先服务和短作业(进程)优先调度算法。以及它的优势和劣势。优点是能够在给定的时间内响应所有用户的要求,缺点是时间片大小的确定是一件非常麻烦的事情,如果使用不当的话,可能会造成一些麻烦。比如,过长的话,进程在一个时间片内都执行完,响应时间比较长。过短的话,用户的一次请求需要多个时间片才能处理完,上下文切换次数增加,响应时间一样会比较长。总之这次实验还是让我收获很大,让我在书本上的知识能够运用到实际当中。这种学以致用的感觉才是最好的。

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2