操作系统课程设计进程调度的模拟实现

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

课程设计

题目进程调度算法模拟编程

学生姓名学号

专业计算机科学与技术班级

指导教师

完成日期2012年12月18日

进程调度的模拟实现

摘要:进程管理是操作系统中的重要功能,用来创建进程、撤消进程、实现进程状态转换,它提供了在可运行的进程之间复用CPU的方法。在进程管理中,进程调度是核心,因为在采用多道程序设计的系统中,往往有若干个进程同时处于就绪状态,当就绪进程个数大于处理器数目时,就必须依照某种策略决定哪些进程优先占用处理器。本文通过两种算法模拟实现了进程之间的调度。

关键词:进程创建,先来先服务,优先级调度。

一.前言

在操作系统中,调度的实质是一种资源分配,调度算法即指:根据系统的资源分配策略所规定的资源分配算法。对于不同的系统和系统目标,通常采用不同的调度算法,如在批处理系统中,为照顾为数众多的短作业,采用短作业有限调度算法;在分时系统中,为保证系统具有合理的响应时间,采用轮转法进行调度。采用算法时,则要考虑多方面因素,以便达到最佳效果。做好这个课程设计,有利于加深对操作系统进程调度知识的理解。

二. 系统总体框架设计

本程序采用两种算法(最高优先级数优先的调度算法和先来先服务算法)对多个进程进行调度,每个进程有三个状态,初始状态为就

绪状态。最高优先级数优先的调度算法中,程序的某进程运行时间以时间片为单位计算。各进程的优先数或轮转时间数以及进程需运行的时间片数的初始值均由用户给定。在优先级数优先的调度算法中,优先级数的值设计为100与运行时间的差值,即Pro_time-process->needtime。进程每执行一次,优先数减3,CPU 时间片数加1,进程还需要的时间片数减1。对于遇到优先数一致的情况,采用先来先服务策略解决。

程序设计组成框图

数据项作用

pro_name 进程名称

time_submit 进程创建时刻

pro_id 进程号,当进程有相同名称时,用来区分进程

time_start 进程启动时刻

time_exe 进程要求运行时间

time_end 进程结束的时刻

pro_priority 进程优先级

图1-2 进程控制块

CpuModel类成员作用

Cpurun() Cpu模拟运行函数

CreatePcb() 进程创建函数

ShowPcb() 进程显示函数

PriModel() 实现优先级调度算法

FcfsModel() 实现先来先服务算法

pcbnum 进程数量

freetime Cpu空闲时间

allturn 总周转时间

allaver 总带权周转时间

PcbList[] 进程就绪队列的实现

图1-3CpuModel类

程序流程图

1.可强占优先调度算法实现过程流程图:

开始

创建进程及属性

先来先服务算法 优先数调度算法

显示进程执行状态

结束

2先来先服务调度算法实现过程流图

三.数据结构设计

1.设计创建进程的结构类型定义和结构变量说明struct ProcessPcb,定义PCB相关变量:

ProcessPcb(){next=NULL;}

char pro_name[20]; //进程的名字

int time_submit ; //提交时间,从时间为1开始计时

int time_exe ; //进程所需的运行时间

int pro_id ; //进程ID(系统生成)

int pro_priority ; //进程优先级

int time_start ; //开始执行的时间

int time_end ; //结束的时间

int time_wait ; //等待的时间

int pro_state ; //进程的状态 (就绪,执行,完成)

int time_left ; //还需多少时间单位,初始化为所需的执行时间int time_turn ; //周转时间

double time_aver ; //带权周转时间

2.创建PCB类class CpuModel,定义程序中使用的各函数:

CpuModel{

CpuModel(){pcbnum=0;}

void cpurun(); //cpu模拟运行函数

bool GetPcb(); //进程输入函数

void ShowPcb(); //将输入的进程展示出来

void PriModel(); //可强占的优先进程调度模式

void FcfsModel(); //先到先服务调度模式

ProcessPcb PcbList[100]; //按提交时间排的未就绪进程队列()

}

四.测试结果及分析

1.开始运行,显示:

2.输入进程数,各进程属性:

关于提交时间执行时间等,将检测输入是否数字,不是数字即退出程序。

3.显示已创建的各进程及其属性:

此处的优先级数,是用100减去执行时间。对于优先级数相同,则默认FIFO。

4.测试可强占的优先进程调度:

一次调度完成,将计算此次运行中CPU的利用率。

5.先到先服务调度算法运行情况:

6.选择5,回车,退出程序。

五.设计心得

在学完操作系统课程之后,一直对进程调度这一块不是很理解,借着做课程设计的机会,我就选择了进程调度模拟编程这个题目,打算在做课程设计的过程中好好的再学习一下这块的知识。

我在做课程设计的过程中,遇到了许多的问题,通过请教同学,上网查资料等途径一一解决。通过这次操作系统的课程设计,我研究了进程调度的相关知识,加深

相关文档
最新文档