计算机操作系统实验---进程调度

计算机操作系统实验---进程调度

ID:42210246

大小:321.59 KB

页数:11页

时间:2019-09-10

计算机操作系统实验---进程调度_第1页
计算机操作系统实验---进程调度_第2页
计算机操作系统实验---进程调度_第3页
计算机操作系统实验---进程调度_第4页
计算机操作系统实验---进程调度_第5页
资源描述:

《计算机操作系统实验---进程调度》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库

1、操作系统实验报告■■进程调度计科02-8王长青05年4月170计算机操作系统实验——进程调度一.实验目的进程调度是处理机管理的核心内容。通过本实验可以加深理解有关进程控制块、进程队列的概念,并体会和了解优先数调度算法的具体实施办法。二.程序功能本程序使用VC++编译调试,用于实现进程优先数调度的模拟。主要包含三个模块:1、主界面:用于显示进程调度的过程。2、数据录入模块:用于获取进程的初始值,其中有三种获取方式,手动输入方式、随即生成方式和从文件中读去数据的方式。当用户在主窗口屮点击“开始”菜单项时即可打开数据录入对•话框

2、,用户通过这三种方式之一均可完成数据的录入。3、进程控制模块:主要实现创建新的进程,就绪队列的管理,完成队列的管理,进程的调度。三.实验原理(1)本程序采用优先数调度算法对进程进行调度,每个进程可有三个状态,即:就绪状态,运行状态,完成状态。并假设初始状态为就绪状态。这三种状态的转换情况如右图:(2)为了便于处理,程序中的某进程运行时间以时间片为单位计算。各进程的优先数以及进程需运行的时间片数的初始值均由用户给定(通过数据录入模块完成)。(3)程序通过设置一个定时器來实现时间片的轮转,时间片的大小是1秒,在定时器消息的响应

3、函数中从用户录入的数据屮读取一个创建进程,将其加入到就绪队列中,然后进行调度和执行。在调度函数中,对于遇到优先数-致的情况,采用FIFO策略解决。(4)在优先数算法中,进程每执行一次,优先数减3,进程还需要运行的时间数减1。四.详细设计(1)设计进程控制块PCB结构:structPCB{intpid;//进程号intpri;//进程优先数inttime;//进程所需运行时间intstatus;//进程状态0就绪,1执行,T完成};(2)将进程的各种操作封装在类CProMoni中,该类的定义如下:classCProMonip

4、ublic:CProMoni0;virtual^CProMoni();voidTnsertRQ(PCB*p);voidlnsertFQ(PCB*p);voidProSchedule();voidProRun();voidDisplay(CDC*pDC);boolGetFinishFlagO;boolOpenLogFileO;voidCloseLogFileO;boolWriteLogToFile():private:PCB*m_pRunning;CPtrListmreadyList;CPtrListm_finishList

5、;boolm_finish;CStringmLogFi1eName;CStdioFilemLogFi1e;public:intm_clock;〃将p所指的进程插入到就绪队列屮〃将P所指的进程插入到完成队列小//进程调度函数//运行函数//以表格形式输出运行过程〃打开H志文件〃关闭FI志文件//向H志文件中写入数据//指向当前运行的进程〃就绪队列〃完成队列//完成标志//L1志文件名//L1志文件//吋钟序列};(3)主要成员函数的实现:voidCProMoni::TnsertRQ(PCB*p){〃将P插入到就绪队列中POS

6、ITIONpre,pos=m_readyList.GetHeadPositionO;PCB*q;while(pos!=NULL)!pre二pos;q=(PCB*)m_readyList.GetNext(pos);if(q->pripri){m_readyList・InsertBefore(pre,p);return;iif(pos==NULL)!mreadyList.AddTail(p);i}voidCProMoni::ProSchedule0{//进程调度PCB*p;if(m_pRunning=NlILL){if

7、(mreadyList.TsEmpty())!mfinish二true;return;1else!p=(PCB*)mreadyList・RcmoveHead();m_pRunning二p;m_pRunning->status=l;else!if(!m_readyList.IsEmpty()){p=(PCB*)mreadyList.GetHead();//m_readyList将头节点与当前PCB的权值比较if(p->pri>m_pRunning->pri){PCB*q=m_pRunning;mpRunning=(PCB*)

8、mreadyList.RemoveHead();mpRurming->status=l;q->status=0;InsertRQ(q);}]}}voidCProMoni::ProRun(){//运行进程if(!m_finish)!if(m_pRunning=NULL){AfxMessageBox("当前

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。