操作系统课程设计进程调度的模拟实现Word格式.docx
- 文档编号:12971420
- 上传时间:2022-10-01
- 格式:DOCX
- 页数:20
- 大小:209.51KB
操作系统课程设计进程调度的模拟实现Word格式.docx
《操作系统课程设计进程调度的模拟实现Word格式.docx》由会员分享,可在线阅读,更多相关《操作系统课程设计进程调度的模拟实现Word格式.docx(20页珍藏版)》请在冰豆网上搜索。
在优先级数优先的调度算法中,优先级数的值设计为100与运行时间的差值,即Pro_time-process->
needtime。
进程每执行一次,优先数减3,CPU时间片数加1,进程还需要的时间片数减1。
对于遇到优先数一致的情况,采用先来先服务策略解决。
程序设计组成框图
数据项
pro_nametime_submitpro_idtime_starttime_exetime_end
pro_priority
作用
进程名称
进程创建时刻
进程号,当进程有相同名称时,用来区分进程进程启动时刻
进程要求运行时间进程结束的时刻进程优先级
图1-2进程控制块
CpuModel类成员
Cpurun()CreatePcb()ShowPcb()PriModel()FcfsModel()pcbnumfreetimeallturnallaver
PcbList[]
Cpu模拟运行函数
进程创建函数进程显示函数
实现优先级调度算法实现先来先服务算法进程数量
Cpu空闲时间总周转时间
总带权周转时间
进程就绪队列的实现
图1-3CpuModel类
程序流程图
开始
创建进程及属性
先来先服务算
法
优先数调度算
显示进程执行
状态
结束
1.可强占优先调度算法实现过程流程图:
2先来先服务调度算法实现过程流图
三.数据结构设计
1.设计创建进程的结构类型定义和结构变量说明 structProcessPcb,定义PCB相关变量:
ProcessPcb(){next=NULL;
}
charpro_name[20];
//进程的名字
inttime_submit;
//提交时间,从时间为1开始计时
inttime_exe;
//进程所需的运行时间intpro_id;
//进程ID(系统生成)intpro_priority;
//进程优先级
inttime_start;
//开始执行的时间inttime_end;
//结束的时间
inttime_wait;
// 等待的时间
intpro_state;
//进程的状态(就绪,执行,完成)
inttime_left;
//还需多少时间单位,初始化为所需的执行时间inttime_turn;
//周转时间
doubletime_aver;
//带权周转时间
2.创建PCB类classCpuModel,定义程序中使用的各函数:
CpuModel{
CpuModel(){pcbnum=0;
voidcpurun();
//cpu 模拟运行函数
boolGetPcb();
//进程输入函数
voidShowPcb();
//将输入的进程展示出来voidPriModel();
//可强占的优先进程调度模式voidFcfsModel();
//先到先服务调度模式
ProcessPcbPcbList[100];
//按提交时间排的未就绪进程队列()
四.测试结果及分析
1.开始运行,显示:
2.输入进程数,各进程属性:
关于提交时间执行时间等,将检测输入是否数字,不是数字即退出程序。
3.显示已创建的各进程及其属性:
此处的优先级数,是用100减去执行时间。
对于优先级数相同,则默认FIFO。
4.测试可强占的优先进程调度:
一次调度完成,将计算此次运行中CPU的利用率。
5.先到先服务调度算法运行情况:
6.选择5,回车,退出程序。
五.设计心得
在学完操作系统课程之后,一直对进程调度这一块不是很理解,借着做课程设计的机会,我就选择了进程调度模拟编程这个题目,打算在做课程设计的过程中好好的再学习一下这块的知识。
我在做课程设计的过程中,遇到了许多的问题,通过请教同学,上网查资料等途径一一解决。
通过这次操作系统的课程设计,我研究了进程调度的相关知识,加深
了对进程调度的理解。
课程设计和平时的实验课比较起来有很大的差距,实验课只是将这一章的一部分内容练习操作一遍,而课程设计需要的是他们综合起来的东西,这要更难一些。
总体来说我认为操作系统这门学科在计算机科学当中是非常重要的,这次操作系统的课程设计收获颇丰,复习了许多东西,也从新学会了许多东西,我想这也许就是课程设计的最终目的吧。
参考文献
[1]刘振安、刘燕君著.《C++程序设计课程设计》.北京:
机械工业出版社,2004
[2][美]AbrahamSilberschatz,PeterBaerGalvin,GregGagne著.郑扣根译.操作系统概念
(第六版).北京:
高等教育出版社,2004
[3]陈向群,向勇等.Windows操作系统原理(第二版).北京:
机械工业出版社,2004.
[4]费翔林,李敏,叶保留等.Linux操作系统实验教程.北京:
高等教育出版社,2009
附录:
#include<
iostream.h>
#include<
queue>
string>
windows.h>
malloc.h>
usingnamespacestd;
//进程的状态
#defineUNREADY0//未就绪#defineREADY1//就绪#defineEXECUTE2//执行#defineEND3//完成
//进程的PCB结构类型定义和结构变量说明
structProcessPcb
{
ProcessPcb()
next=NULL;
charpro_name[20];
// 进程的名字
inttime_submit;
// 提交时间,从时间的1开始计时
inttime_exe;
// 进程所需的运行时间
intpro_id;
// 进程ID(系统生成)
intpro_priority;
// 进程优先级
inttime_start;
// 开始执行的时间
inttime_end;
// 结束的时间
inttime_wait;
intpro_state;
// 进程的状态(就绪,执行,完成)
//还需多少时间单位,初始化为所需的执行时
间
inttime_turn;
//周转时间
//带权周转时间
ProcessPcb*next;
};
//封装CPU调度与分配程序模块。
进程类
classCpuModel
public:
CpuModel()
pcbnum=0;
voidcpurun();
//cpu模拟运行函数
boolCreatePcb();
//将输入的进程展示出来
voidPriModel();
private:
// 按提交时间排的未就绪进程队列
intpcbnum;
//进程数量intfreetime;
//cpu空闲时间intallturn;
//总周转时间
floatallaver;
//总带权周转时间
#include<
algorithm>
//cpu模拟运行函数
voidCpuModel:
:
cpurun()
intchoose=0;
while
(1)
{
cout<
<
"
***主菜单***"
endl;
cout<
"
cout<
***1:
创建进程***"
***2:
显示已创建的进程***"
***3:
可强占的优先进程调度***"
***4:
先到先服务调度***"
***5:
退出系统***"
\n***请选择:
"
;
cin>
>
choose;
endl;
switch(choose)
{
case1:
CreatePcb();
//创建进程break;
case2:
ShowPcb();
//显示已创建的进程break;
case3:
PriModel();
//可强占的优先进程方式
break;
case4:
FcfsModel();
//先到先服务调度方式
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 操作系统 课程设计 进程 调度 模拟 实现