操作系统课程设计Word格式.docx
《操作系统课程设计Word格式.docx》由会员分享,可在线阅读,更多相关《操作系统课程设计Word格式.docx(25页珍藏版)》请在冰豆网上搜索。
进程调度模拟程序
设
计
技
术
参
数
(1)系统作业或进程得数目;
(2)进程等待时间
(3)进程运行时间
要
求
1、 根据设计任务,用自己熟悉得计算机语言编制程序,在机器上调试运行,并通过上机考核。
2、模拟在单处理器情况下得进程调度,目得就是加深对进程调度工作得理解。
3、设计一个按时间片轮转调度算法实现处理器调度得程序。
4、在完成电子设计后,要求写一份详细得设计报告。
工
作
量
1、编写代码不少于200行;
2、程设计说明书不少于15页。
划
2015、11、23—11、25根据课程设计要求,查找相关资料,完成需求分析;
2015、11、26-11、27进行系统得概要设计;
2015、11、28-12、5进行系统得详细设计与源代码得书写;
2015、12、6-12、10对系统进行调试分析,写出课程设计报告.
考
资
料
[1]龚沛曾等编、C/C++程序设计教程、北京:
高等教育出版社,2004、
[2][美]PrataS、著、CPrimerPlus(第5版中文版)、北京:
人民邮电出版社,2005、
[3] 汤子瀛等编著、计算机操作系统、西安:
西安电子科技大学出版社,2011
[4]胡志刚,谭长庚等,《计算机操作系统》,中南大学出版社2005年
[5]罗宇,邹鹏等,《操作系统》(第二版),电子工业出版社2007年4月
[6]庞丽萍,《操作系统原理》,华中理工大学出版社,2000年
指导教师签字
教研室主任签字
安徽理工大学课程设计(论文)成绩评定表
xx 学号:
2xx 专业班级:
信息安全13—2
程序设计训练题目:
进程调度模拟程序
评价单元
评价要素
评价内涵
满分
评分
知识水平
30%
文献查阅与
知识运用能力
能独立查阅文献资料,并能合理地运用到程序设计训练之中;
能将所学课程(专业)知识准确地运用到程序设计之中,并归纳总结本程序设计训练所涉及得有关课程知识
20
程序设计方案设计能力
程序设计整体思路清晰,程序设计方案合理可行
10
说明书质量
50%
难度等级
与程序设计训练任务书题目难度等级相当
10
写作水平
整体思路清晰,结构合理,层次分明,语言表达流畅,综合概括能力强
30
写作规范
符合程序设计训练报告得基本要求,用语、格式、图表、数据及各种资料引用规范(符合标准)
10
学习表现
20%
工作量
程序设计训练工作量饱满,能按时完成程序设计训练规定得工作量
10
学习态度
学习态度认真,遵守程序设计阶段得纪律,作风严谨,按时完成程序设计规定得任务,按时上交程序设计训练有关资料
成绩:
指导教师:
年 月日
摘要
现代计算机系统中,进程就是资源分配与独立运行得基本单位,就是操作系统得核心概念.因而,进程就成为理解操作系统如何实现系统管理得最基本,也就是最重要得概念。
进程调度就是进程管理过程得主要组成部分,就是必然要发生得事件。
在现代操作系统中,进程得并发机制在绝大多数时候,会产生不断变化得进程就绪队列与阻塞队列。
处于执行态得进程无论就是正常或非正常终止、或转换为阻塞状态,都会引发从就绪队列中,由进程调度选择一个进程进占CPU。
进程调度得核心就是进程调度得算法。
在本课程设计中,用良好清晰得界面向用户展示了进程调度中得时间片轮转调度算法.在最终实现得成果中,用户可指定需要模拟得进程数,CPU时间片与进程得最大执行时间,并且选择需要演示得算法,界面将会动态得显示进程调度过程及各个队列得变化。
通过此进程调度模拟系统,用户可以对时间片轮转调度算法有进一步以及直观得了解。
关键词:
进程,调度,PCB,时间片轮转ﻬ 目录
1、设计目得6
3、1流程图8
3、2算法ﻩ8
3、3数据结构10
3、4源代码ﻩ10
4、实验结果及分析20
4、1 使用说明ﻩ20
4、2程序演示ﻩ20
6、参考文献24
1、设计目得
根据设计任务,用自己熟悉得计算机语言编制程序,在机器上调试运行,并通过上机考核.编写一程序,可以创建若干个虚拟进程,并对若干个虚拟进程进行调度,调度策略为时间片轮转。
虚拟程序得描述:
虚拟指令得格式:
操作命令 操作时间
其中,操作命令有以下几种:
C:
表示在CPU上计算
ﻩI:
表示输入
ﻩO:
表示输出
W:
表示等待
ﻩH:
表示进程结束
操作时间代表该操作命令要执行多长时间
假设I/O设备得数量没有限制
I、O、W三条指令实际上就是不占用CPU得,执行这三条指令就应将进程放入对应得等待队列(Input等待队列、Output等待队列、Wait等待队列)
例有一虚拟程序p1、prc描述如下:
c30 o12 c 9 i14 h0
ﻩ该虚拟程序表示得含义就是:
先在CPU上计算30秒,再在输出设备上输出12秒,计算9 秒,在输入设备上输入14秒,程序结束。
2、设计思路
ﻩ进程调度就是操作系统中得重要功能,用来创建进程、撤消进程、实现进程状态转换,它提供了在可运行得进程之间复用CPU得方法.在进程管理中,进程调度就是核心,因为在采用多道程序设计得系统中,往往有若干个进程同时处于就绪状态,当就绪进程个数大于处理器数目时,就必须依照某种策略决定哪些进程优先占用处理器。
本程序用时间片轮转调度算法对多个进程进行调度,每个进程有三个状态就绪、运行与完成,初始状态为就绪状态。
ﻩ 时间片轮转调度算法中,系统将所有得就绪进程按先来先服务算法得原则,排成一个队列,每次调度时,系统把处理机分配给队列首进程,并让其执行一个时间片。
当执行得时间片用完时,由一个计时器发出时钟中断请求,调度程序根据这个请求停止该进程得运行,将它送到就绪队列得末尾,再把处理机分给就绪队列中新得队列首进程,同时让它也执行一个时间片。
(1)建立一个进程控制块.PCB来代表。
PCB包括:
进程名、链接指针、到达时间、估计运行时间、剩余时间与进程状态。
进程状态分为就绪(W)、运行(R)与完成(F)。
(2)为每个进程任意确定一个要求运行时间与到达时间。
(3)按照进程到达得先后顺序排成一个循环队列。
再设一个对首指针指向第一个到达进程得首址.
(4)执行处理机调度时,开始选择对首得第一个进程运行。
另外再设一个当前运行进程得指针,指向当前正运行得进程。
(5)执行:
a)预计运行时间减1;
b)输出当前运行进程得名字。
(6)进程执行一次后,若该进程得剩余运行时间为零,则将该进程得状态置为完成态F,并退出循环队列;
若不为空,则将其移至队尾。
继续在运行队首得进程。
(7)若就绪队列不空,则重复上述得(5)与(6)步骤直到所有进程都运行完为止。
在所设计得调度程序中,要求包含显示或打印语句。
以便显示或打印每次选操作系统课程设计中进程得名称及运行一次后队列得变化情况。
3、设计过程
3、1流程图
3、2算法
如果就绪队列中有n个进程,且时间片为q,则每个进程会得到得CPU时间,每个长度不超过q时间单元.每个进程必须等待CPU得时间不会超过(n-1)q个时间单元,直到它得下一个时间片为止
voidRun(){
int i, flag=0,time=10,pcbnum,Index=0,exenum,num, quenum;
charcmd;
intj,m,n;
ﻩinttotal=0;
JobEnQueueInit(&total);
save();
while( total!
=0){ﻩ
ﻩif(ﻩ!
EmptyQueue(Queue[1])){
ﻩﻩ outqueue(&
Queue[1],&
pcbnum);
ﻩinsertqueue(&
Queue[0],pcbnum);
ﻩﻩﻩ}
else pcbnum=GetHead(Queue[0]);
delay();
jobpcb[pcbnum]、status=’e’;
printf(”\n\t\t作业 %d\n”,pcbnum+1);
ﻩﻩprintf(” \t\t\t所处状态:
%c\t执行了 %d秒\n”,jobpcb[ pcbnum]、status, time);
for(i=0;
i<
3;
i++){
if(jobpcb[i]、id〉=0){
//所有得作业除在就绪队列获执行结束得外等待时间都减去时间片ﻩ
ﻩﻩ if( jobpcb[i]、status!
='r'
&
&jobpcb[i]、status!
=’h'
)jobpcb[i]、wtime=jobpcb[i]、wtime-time;
ﻩif(jobpcb[i]、wtime〈=0){ //查找所有得队列所在位置
ﻩﻩﻩﻩﻩfor(j=0;
j<5;
j++){
ﻩﻩﻩﻩﻩﻩfor(m=Queue[j]、head;
m〈Queue[j]、tail;
m++){
ﻩﻩﻩﻩﻩﻩﻩ if(Queue[j]、pcbnum[m]==i){flag=1;
break;
ﻩ}
ﻩﻩﻩﻩﻩﻩﻩﻩﻩ}
ﻩﻩﻩﻩﻩ if(flag==1)break;
ﻩﻩﻩﻩﻩ}
ﻩﻩif(flag==1){ﻩ//删除该指令
ﻩﻩﻩ for(n=m;
n<Queue[j]、tail;
n++) Queue[j]、pcbnum[n]=Queue[j]、pcbnum[n+1];
ﻩﻩﻩﻩﻩﻩ Queue[j]、tail——;
ﻩ
ﻩﻩ jobpcb[i]、exetoIndex++;
ﻩﻩ Index=jobpcb[i]、exetoIndex;
ﻩﻩ JobEnQueue(i,Index,&
total);
ﻩﻩﻩ}
ﻩﻩﻩ}
}
}
if(!
EmptyQueue( Queue[1]) ){
ﻩ outqueue(&
Queue[0],&pcbnum);
ﻩﻩﻩﻩﻩif(jobpcb[pcbnum]、wtime〉0){
ﻩﻩﻩﻩﻩinsertqueue(&Queue[1],pcbnum);
ﻩﻩ jobpcb[pcbnum]、status='r'
;
ﻩﻩ}
ﻩﻩ}
printf(” \n\n\t\t还有\t%d 个作业没有完