- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
操作系统进度调换课程设计报告
操作系统进度调换课程设计报告
操作系统进度调换课程设计报告
设计时间: 2012-1-1 至 2012-1-08
姓名: 学号:
组员:
专业年级:
一 . 设计目的:
经过课程设计 , 加深对操作系统各资源管理模块的理解 , 掌握操作系统的基根源理及功能 , 拥有初步解析实质操作系统、设计、构造和开发现代操作系统的基本能力。
二 . 设计内容:
.题目:进度调换算法的设计设计要求:
①设计进度控制块 PCB表构造,分别适用于优先数调换算法和循环轮转调换算法。②建立进度就绪队列。对两种不同样算法编制入链子程序。③编制两种进度调换算法: 1)优先数调换; 2)循环轮转调换
开发环境: VC++6.0
设计技术参数 :
①本程序用两种算法对五个进度进行调换,每个进度可有三个状态,并假设初始状态为就绪状态。
②为了便于办理,程序中的某进度运行时间以时间片为单位计算。各进度的优先数或轮转时间数以及进度需运行的时间片数的初始值均由用户给定。
③ 在 优 先 数 算 法 中 , 优 先 数 的 值 为 50 与 运 行 时 间 的 差 值 , 即 P_TIME-process-needtime 。进度每执行一次,优先数减 3,CPU时间片数加 1,进度还需要的时间片数减 1。在轮转算法中,采用固准时间片(即:每执行一次进度,该进度的执
行时间片数为已执行了
2 个单位),这时, CPU时间片数加
2,进度还需要的时间片数减
2,
并排列到就绪队列的尾上。
④对于遇到优先数一致的情况,采用 FIFO 策略解决。
三.设计过程
1、
个人负责实现的功能:
2、
/ 函数功能:优先级法调换将进度插入到就绪队列算法
3、
4、
void FirstInsert(PCB *q)
5、
{
6、
PCB *p,*s,*r; /*p,*r
用来控制就绪队列转动, S 指向插入的队列 */
7、
int b; /*b
作为插入控制标志的 */
8、
s=q;
9、
p=READY;
10、
r=p;
11、
b=1;
12、
if(s-PRIO=READY-PRIO)
13、
{
14、
s-next=READY;
15、
READY=s;
16、
}
17、
else
18、
{
19、
while((p!=NULL)b)
20、
{
21、
if(p-PRIO=s-PRIO)
22、
{
23、
r=p;
24、
p=p-next;
25、
}
26、
else
27、
{
28、
b=0;
29、
}
30、
}
31、
s-next=p;
32、
r-next=s;
33、
}
34、
}
35、
// 函数功能:时间片轮转算法调换将进度插入到就绪队列算法
36、
37、
void SecondInsert(PCB *q)
38、
{
39、 tail-next=q;
40、
tail=q;
41、 q-next=NULL;
42、
}
设计思路
第一设计分成两个主要部分:
1、优先级法调换将进度插入到就绪队列算法
:
*p,*r
用来控制就绪队列转动, *S 指向插入的队列,再比较 p 和 s 的进度的优先度大小,
若是大于等于则直接加到首部。否则和第二个再比较,
p 指向下一个进度, r 指向 p 的上一
个进度,若是 p==NULL,则将新进度插到队尾。否则
s 的 next 指向 p,r 的 next 指向 s。
2 时间片轮转算法调换将进度插入到就绪队列算法 :
直接将要插进的进度插进就绪队尾即可,
也就是将尾部的进度的 next 指向新插进队列。
tail 指向新插进度的地址。
算法和流程图
Main 函数流程图:
开始
输入 P 或 R 到参数
algo
P
R 是 P 还
是 R
pcreate_task
创办任务,代
表优先数算法
priority(char
algo) ,执行优
先数算法
rcreate_task
创办任务,代
表轮转算法
roundrun(char
algo) ,执行轮
转算法
停止
优先数算法流程图:
开始
Y
进 程 运 行 完
毕?
N
运行数加 1; 需要时间减 1;优先数减 3;
Y
可否运行达成?
needtime==0?
N
就绪队列不空, 并且,
N
就绪行排队首优先数
大于运行的进度
Y
run-state=W;
insert1(run);
run=NULL;
将进度就绪队
列中第一个放
进运行队列
打印运行情况
返回
run-next=finish;
finish=run;
run-state=F;
run=NULL;
将进度就绪队
列中第一个放
进运行队列
循环轮转调换算法流程图:
开始
Y
进 程 运 行 完
文档评论(0)