进程调度模拟实验 设计说明书文档格式.docx
- 文档编号:21637405
- 上传时间:2023-01-31
- 格式:DOCX
- 页数:16
- 大小:83.09KB
进程调度模拟实验 设计说明书文档格式.docx
《进程调度模拟实验 设计说明书文档格式.docx》由会员分享,可在线阅读,更多相关《进程调度模拟实验 设计说明书文档格式.docx(16页珍藏版)》请在冰豆网上搜索。
2.算法中用到的主要数据结构(采用类c语言定义)3
3相关的各模块模块的伪码算法3
4.测试分析7
5.测试结果7
设计总结9
参考文献10
致谢11
附件Ⅰ部分源程序代码12
前言
给每一个进程确定一个优先数,处理器调度每次选择就绪进程中优先数最大者,让它占有处理器运行称优先数调度。
动态优先数调度,在创建一个进程时,根据进程类型和资源使用情况确定一个优先数,而当进程耗尽时间片或重新被调度时,再次计算并调整所有进程的优先数。
基本原则是:
(1)根据进程占有CPU时间的多少来决定,当一个进程占有的时间越长,那么在它被阻塞以后再次获得调度的优先数就越低,反之,进程获得调度的可能性越大。
(2)根据进程等待CPU时间来决定,一个进程在队列中等待CPU的时间越长,那么在它再次获得调度时的优先数就越高,反之,进程获得调度的可能性越小。
摘要
用C语言模拟实现动态优先数的进程调度算法。
并通过UNIX/LINUX提供的vi编辑器来编译C程序,学会利用gcc、gdb编译、调试C程序。
动态优先权是基于某种原则,使进程的优先数随时间而改变。
最高优先数调度就是优先权越高的进程就会越先运行。
关键词:
最高优先数,进程调度,进程控制块
正文
1.设计思想
实现进程调度的模拟实验,题目要求用最高优先数调度算法来编译,首先应该确定优先数的方法,在实际编程时,用到进程运行时间+优先级=50来确定优先级的大小。
在运行时要求输入进程数还有进程的运行时间。
基本编程思想:
创建PCB表创建就绪队列对头指针演示进程调度创建各个进程优先级算法调度主函数模块
2算法用到的主要数据结构(采用类c语言定义)
typedefstructnode/*创建PCB*/
{charname[10];
/*进程标识*/
intprio;
/*进程优先数*/
intcputime;
/*进程占用CPU时间*/
intneedtime;
/*进程完成所需时间*/
intcount;
/*计数器*/
charstate;
/*进程的状态*/
structnode*next;
/*链指针*/
}PCB;
PCB*finish,*ready,*tail,*run;
intN;
3各模块的伪码算法
(1)创建PCB表:
#include"
stdio.h"
stdlib.h"
string.h"
(2)创建就绪队列对头指针:
firstin()/*创建就绪队列对头指针*/
{
run=ready;
run->
state='
R'
;
ready=ready->
next;
}
(3)演示进程调度:
voidprt(charalgo)/*演示进程调度*/
PCB*p;
printf("
NAMECPUTIMENEEDTIMEPRIORITYSTATUS\n"
);
if(run!
=NULL)
%-10s%-10d%-10d%-10d%c\n"
run->
name,
cputime,run->
needtime,run->
prio,run->
state);
p=ready;
while(p!
{printf("
p->
p->
cputime,p->
needtime,p->
prio,p->
p=p->
}
p=finish;
getchar();
insert(PCB*q)
PCB*p1,*s,*r;
intb;
s=q;
p1=ready;
r=p1;
b=1;
while((p1!
=NULL)&
&
b)
if(p1->
prio>
=s->
prio)
{
p1=p1->
else
b=0;
if(r!
=p1)
r->
next=s;
s->
next=p1;
ready=s;
(4)创建各个进程:
voidcreate(charalg)/*创建各个进程*/
inti,time;
charna[10];
ready=NULL;
finish=NULL;
run=NULL;
for(i=1;
i<
=N;
i++)
p=(PCB*)malloc(sizeof(PCB));
EnterNAMEofprocess:
\n"
scanf("
%s"
na);
EnterTIMEofprocess(lessthan50):
%d"
&
time);
strcpy(p->
name,na);
cputime=0;
needtime=time;
w'
prio=50-time;
/*假设优先级与耗时之和为50*/
if(ready!
insert(p);
next=ready;
ready=p;
//clrscr();
DISPLAYOFTHEPROGRESS:
************************************************\n"
prt(alg);
(5)优先级算法调度:
priority(charalg)/*优先级算法调度*/
while(run!
=NULL&
run->
=0)
cputime=run->
cputime+1;
needtime=run->
needtime-1;
prio=run->
prio-3;
if(run->
needtime==0)
next=finish;
finish=run;
F'
firstin();
if((ready!
(run->
prio<
ready->
prio))
W'
insert(run);
(6)主函数模块:
main()
{charalgo;
//clrscr();
loop:
EnterTHETOTALNUMBERofPCB(lessthan10isbetter):
N);
if(N>
10)
{printf("
it'
stoobig,andselectasmallnumber.\n"
gotoloop;
create(algo);
priority(algo);
4.测试分析.
测试过程中所遇到的问题及解决方法:
由于在写代码过程中各个人的粗心大意,使部分出现了错误而无法运行,一时进入了困惑之中。
比如在创建各个进程时将p=(PCB*)malloc(sizeof(PCB));
写成了p=malloc(sizeof(PCB));
而出现了错误。
后来,我查了许多资料,也请教了同学,在同学的帮助下,使各个问题一一击破,最终使程序成功编译而达到了预期的结果。
5测试结果
1.编译并源代码:
2.输入进程总数、个进程运行所需CPU时间:
3.结果:
设计总结
由于对摸拟程序的核心数据结构---基于“链表结构的带头结点的队列”的一些其本运算法在初期考虑时欠妥,导致后期耗费大量时间在调试上,这是非常不值得的。
应继续加强在动手写程序前把难点及核心算法想清,想准的能力.
发现了C语言在应用中的一些比较容易忽略,却极易导致程序出错的地方。
如在C中可以有清屏clrscr(),在LINUX环境下必须有所改进。
通过这个实验,加强了我对操作系统中进程调度原理的理解,同时在稍大程序的的整体的编制能力上再一次得到加强.
参考文献
1.汤子瀛、哲凤屏.《计算机操作系统》,西安电子科技大学学出版社.
2.王清、李光明.《计算机操作系统》,冶金工业出版社.
3.孙钟秀等,《操作系统教程》,高等教育出版社
4.曾明,《Linux操作系统应用教程》,陕西科学技术出版社.
5.张丽芬、刘利雄,《操作系统实验教程》,清华大学出版社.
6.孟静,
《操作系统教程——原理和实例分析》,高等教育出版社
7.周长林,《计算机操作系统教程》,高等教育出版社
8.张尧学,《计算机操作系统教程》,清华大学出版社
9.任满杰,《操作系统原理实用教程》,电子工业出版社
致谢
两周的操作系统课设很快就结束了,通过这个实验,加强了我对操作系统中进程调度原理的理解,同时在稍大程序的的整体的编制能力上再一次得到的加强.
在这两周我学到了好多的东西,熟悉了在LINUX环境下编译程序运行程序,我要感谢帮助过我的老师和同学。
首先感谢我的指导老师刘嘉老师,她在我的课程设计过程中提出了指导性的方案和架构,并指引我阅读相关的资料和书籍,使我在不熟悉的领域中仍能迅速掌握新的技术。
感谢我的操作系统老师刘嘉老师和C语言老师王连相老师在以往的基础课学习中为我打下良好的基础,这是我这次课程设计能够顺利完成的前提。
我的同学在设计完成后对程序的测试,没有他们,也许就难以发现一些潜在的错误,在此一并表示感谢。
附件Ⅰ部分源程序代码
/*链指针*/
}
p=malloc(sizeof(PCB));
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 进程调度模拟实验 设计说明书 进程 调度 模拟 实验 设计 说明书