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

加入VIP,免费下载
 

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

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

下载须知

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

版权提示 | 免责声明

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

操作系统实验报告进程调度法的实现.docx

1、操作系统实验报告进程调度法的实现 操作系统实验报告进程调度算法的实现 1.实验目的 进程是操作系统最重要的概念之一,本实验通过对进程调度模拟程序的运行,学习运用时间片轮转法进行进程调度,加深对进程的基本调度状态以及进程调度算法的理解。2.算法思想 进程调度算法:采用多级反馈队列调度算法。其基本思想是:当一个新进程进入内在后,首先将它放入第一个队列的末尾,按FCFS原则排队等待高度。当轮到该进程执行时,如能在该时间片内完成,便可准备撤离系统;如果它在一个时间片结束时尚为完成,调度程序便将该进程转入第二队列的末尾,再同样地按FCFS原则等待调度执行,以此类推。4.算法 。5.程序代码 程序的主要代

2、码如下:#include#include#include#include#includeconst int MAXCOMMANDLEN =50;/ PROCESS/class Process friend class CPU; /友元类protected: static int init_ID; /静态初始ID int ID; /进程ID char runTextMAXCOMMANDLEN; /进程指令数组 int IP; /进程指令指针,保存进程指令执行到的具体位置 bool ISuseSource; /进程是否使用资源(是或者否) bool ISblocked; /进程是否被阻塞(是或者否

3、) int unitTime; /进程被cpu执行单位时间, 默认 1 int blockTime; /进程被阻塞时间 public: static void RandID(); /静态随机生成进程ID的函数 Process(); /进程类的构造函数 int getID(); /得到进程ID int getIP(); /获取进程指令指针IP void setIP(int); /设置IP void Runed(); /进程被执行 int getUnittime(); /得到进程的单位执行时间 int getBlcoktime(); /得到进程被阻塞的时间 void setBlocktime(in

4、t); /设置进程被阻塞的时间 void setUnittime(int); /设置进程的单位执行时间 char getResult(int); /得到进程被执行的结果 char* getRuntext(); /得到进程执行的指令 void setBlockstate(bool); /设置进程阻塞状态 bool getBlockstate(); /得到进程阻塞状态 bool getISusesource(); /得到资源的使用状态 void setISusesource(bool); /设置资源的使用状态;int Process:init_ID; /初始化静态变量void Process:Ra

5、ndID() /随机产生一个进程ID srand(unsigned)time(NULL); /调用srand随机生成函数 init_ID=rand(); Process:Process() /进程的构造函数 ID=init_ID+; /进程ID的初值为静态初始ID的值 int commandLen; /命令行长度 IP=0; cout ; cinrunText; /输入命令 if( (commandLen=strlen(runText) ) MAXCOMMANDLEN ) exit(0); /输入长度超出最大长度时退出,特殊情况处理 runTextcommandLen=#; /初始指令结束标志

6、 # runTextcommandLen+1=0; /字符串结束标志 ISuseSource=false; /设置资源的使用状态为未使用 ISblocked=false; /进程的初始状态-未被阻塞 unitTime=1; /进程被执行的单位时间为1 blockTime=0; /阻塞时间为0void Process:Runed() /进程被CPU执行 cout0) /时间充足继续运行输出资源信息并使时间减一 cout( Source :ID); time-; if(timesetISusesource(false); /资源的使用状态为未使用 int ip=pro-getIP(); /得到进程

7、的IP pro-setIP(+ip); /设置到下一个ip Source:setState(true); /设置资源的使用状态为正在使用 coutendlThe process getID() relase the source!endl; pro=NULL; /输出资源被释放 指针值赋值为空值 / CPU/typedef struct Block /阻塞队列结构 Process *p_BlockProcess; /被阻塞的进程队列 int index; /被阻塞的进程在就绪队列中的位置 Block;class CPUprotected: Process *p_Process; /进程队列 P

8、rocess *pp_Process; /进程就绪队列 Block *blockQueue ; /进程阻塞队列 Source *p_Source; /资源指针 int numOfprocess; /进程数量 int numOfblock; /被阻塞的进程数 int PC; /程序计数器 int allTime; /cpu运行的总时间 public : CPU(int); /cpu构造函数 void Run(); /cpu运行进程 bool _IC(Process&); /虚拟IC,进行进程指令翻译 void useSource(Process&); /进程申请资源 void blockProc

9、ess(Process&); /阻塞进程 void releaseBlockPro(); /释放阻塞进程 int getAlltime(); /得到进程运行的总时间 void displayPro(); /显示进程的基本信息,id,指令,运行时间等 void blockTimeADD(); /阻塞时间加1 ;CPU:CPU(int num) p_Source=new Source(379857);/创建一个id号为379857的资源 numOfprocess=num; /进程数 numOfblock=0; /阻塞数 allTime=0; /cpu运行的总时间初始化为0 p_Process=ne

10、w ProcessnumOfprocess;/进程队列申请空间pp_Process=new Process*numOfprocess;/进程就绪队列申请空间 blockQueue=new BlocknumOfprocess; /阻塞队列申请空间 for(int i=0;ip_BlockProcess=NULL; /阻塞队列的阻塞进程赋值为空 blockQueue-index=-1; /阻塞队列的索引值置为1 int CPU:getAlltime() /得到进程运行的总时间 return allTime;void CPU:displayPro() /显示进程的基本信息for(int i=0;in

11、umOfprocess;i+)/循环输出被执行的进程的信息 couttProcess ID : p_Processi.getID()endl; cout text of runned :p_Processi.getRuntext()endl; void CPU:Run() /cpu运行进程 int numPro=numOfprocess; /记录未被运行的进程个数 do for(int num=0;num numOfprocess;num+) if(!pp_Processnum) /就绪队列不空继续执行 continue; for(int t=0;tp_Processnum.getUnitti

12、me();t+) PC=p_Processnum.getIP();/得到进程Ip if(_IC(p_Processnum)/判断进程的状态TURE进入 if(t=0) /时间为0运行完输出进程信息 coutthe process p_Processnum.getID()runned(); / if( p_Source-getState() & numOfblock0 ) releaseBlockPro();/如果进程运行过,现在但未运行,说明为阻塞。释放阻塞进程,调用它 else if(!p_Processnum.getBlockstate()/该进程不在阻塞状态 numPro-; /未被运行

13、的进程个数减一 pp_Processnum=NULL; /进程就绪队列该位置赋为空值 continue; break; /跳出循环 allTime+; /运行总时间+ if(numOfblock0) /如果阻塞个数0 blockTimeADD(); /阻塞时间加1 /end for t. if( p_Processnum.getUnittime() /该进程的执行单位时间非0 p_Processnum.setUnittime(1); /设置该进程执行的单位时间为1 cout=1 & resultRunned getState()/资源未被使用则使用资源 useSource(p); coutTh

14、e process p.getID() take up the source!endl; else /资源已被使用则阻塞进程 blockProcess(p); coutThe process p.getID() is blocked !endl; return false; else /$后跟的不是数字,则语法错误 coutThe process p.getID() runned fail ! It has been stopped! endl; return false; return true;void CPU:blockTimeADD() /阻塞时间加1 for(int i=0;iget

15、Blcoktime();/循环得到阻塞队列中每个进程的阻塞时间 blockQueuei.p_BlockProcess-setBlocktime(+BT); /每个时间+1 void CPU:useSource(Process& p) /进程申请资源 p.setISusesource(true); /运行的资源的状态设置 p_Source-setState(false); /资源状态设置为不可用 p_Source-setProID(p.getID(); /设置进程ID p_Source-setTime(p.getResult(PC)-0); /设置资源使用时间 p_Source-setPro(&

16、p); /设置使用资源的进程void CPU:blockProcess(Process& p) /阻塞进程 int tempIndex=numOfprocess-( Process:init_ID-p.getID() );/阻塞进程的设置 blockQueuenumOfblock.p_BlockProcess=&p;/将进程p加入到阻塞队列尾部 blockQueuenumOfblock.index=tempIndex; /设置新加进程阻塞队列所在位置的索引值 numOfblock+; /阻塞进程个数+1 int ip=p.getIP(); p.setIP(-ip); /设置进程的ip p.se

17、tBlockstate(true); /设置进程的组设状态为真 p.setBlocktime(1); /设置进程的块阻塞时间为1 p.setUnittime(0); /设置进程的单位执行时间为0 pp_ProcesstempIndex=NULL; /进程就绪队列tempIndex处赋为空值void CPU:releaseBlockPro() /释放阻塞队列的第一个进程,阻塞时间最长 pp_ProcessblockQueue0.index=blockQueue0.p_BlockProcess;/将阻塞进程的第一个进程赋值给就续队列的相应位置 blockQueue0.index=-1; /将阻塞队

18、列的起始位置的索引值置为-1 blockQueue0.p_BlockProcess-setBlockstate(false);/将阻塞队列的起始位置的进程阻塞状态设置为未阻塞(false) blockQueue0.p_BlockProcess-setUnittime(blockQueue0.p_BlockProcess-getBlcoktime();/得到阻塞队列首位置的进程的阻塞时间 blockQueue0.p_BlockProcess-setBlockstate(0);/ blockQueue0.p_BlockProcess=NULL; / 阻塞队列的0位置指针赋值为空 numOfblock-; /阻塞进程个数减一 for(int i=0;inumOfblock;i+) /阻塞队列中的其他进程向前移动一个位置 blockQueuei=blockQueuei+1; / The main progress/

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1