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

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

ID:8875188

大小:111.00 KB

页数:9页

时间:2018-04-10

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

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

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

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

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

4、oni();voidInsertRQ(PCB*p);//将p所指的进程插入到就绪队列中voidInsertFQ(PCB*p);//将p所指的进程插入到完成队列中voidProSchedule();//进程调度函数voidProRun();//运行函数voidDisplay(CDC*pDC);//以表格形式输出运行过程boolGetFinishFlag();boolOpenLogFile();//打开日志文件voidCloseLogFile();//关闭日志文件boolWriteLogToFile();//向日志文件中写入数据private:PC

5、B*m_pRunning;//指向当前运行的进程CPtrListm_readyList;//就绪队列CPtrListm_finishList;//完成队列boolm_finish;//完成标志CStringm_LogFileName;//日志文件名CStdioFilem_LogFile;//日志文件public:intm_clock;//时钟序列};(3)主要成员函数的实现:voidCProMoni::InsertRQ(PCB*p){//将p插入到就绪队列中POSITIONpre,pos=m_readyList.GetHeadPosition(

6、);8PCB*q;while(pos!=NULL){pre=pos;q=(PCB*)m_readyList.GetNext(pos);if(q->pripri){m_readyList.InsertBefore(pre,p);return;}}if(pos==NULL){m_readyList.AddTail(p);}}voidCProMoni::ProSchedule(){//进程调度PCB*p;if(m_pRunning==NULL){if(m_readyList.IsEmpty()){m_finish=true;return;}e

7、lse{p=(PCB*)m_readyList.RemoveHead();m_pRunning=p;8m_pRunning->status=1;}}else{if(!m_readyList.IsEmpty()){p=(PCB*)m_readyList.GetHead();//m_readyList将头节点与当前PCB的权值比较if(p->pri>m_pRunning->pri){PCB*q=m_pRunning;m_pRunning=(PCB*)m_readyList.RemoveHead();m_pRunning->status=1;q->s

8、tatus=0;InsertRQ(q);}}}}voidCProMoni::ProRun(){//运行进程if(!m_finish){if(m_pRu

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

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

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