- 1、本文档共19页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
操作系统上机报告
姓名:
学号:
院系:计算机科学与技术
班级:
(一)
课程设计题目:
多级队列调度算法:设RQ分别为RQ1和RQ2,RQ1采用轮转法,时间q=7。RQ1RQ2,RQ2采用短进程优先调度算法。
测试数据如下:
进程
P1
P2
P3
P4
P5
P6
P7
P8
P9
P10
运行时间
16
11
14
13
15
21
18
10
7
14
已等待时间
6
5
4
3
2
1
2
3
4
5
程序功能及设计思路:
程序功能:模拟CPU在处理程序时的进程调度,使用循环轮转法和短进程优先调度的算法来完成一组请求。
设计思路:实验所需数据较少,因此直接写入运行所需数据,前五项按照已等待时间排序成一个循环队列(已等待时间长的放在队伍的靠前的地方),后五项按照需要运行的时间排成一个队列(运行时间短的放在队伍靠前的地方)。然后按照实现的描述来进行数据的处理。最后输出每一个进程运行所需要的时间。
数据结构及算法设计:
数据结构:
①结构体:
typedef struct tag_pcb
{
char name[8];
int need;
int turn;
struct tag_pcb *next;
} PCB;
②队列;
③循环队列。
算法设计:
①循环轮转法:
轮转法将CPU时间划分成若干个短的时间片段(通常小于100ms),将这些时间片段轮流分配给各个就绪进程使用。如果时间片结束时,进程还没有运行完,则CPU将被剥夺并分配给另一个就绪进程使用;如果进程在时间片段结束前阻塞结束,则CPU理解发生切换。
//RQ1采用轮转法
p=RQ1;
int flag=0;
while(p!=NULL)
{
while(p!=NULLp-need0)
{
q=p;
while(q-next!=NULL)
q=q-next;
if(p-needpiece_time)
{
clock+=piece_time;
p-need-=piece_time;
if(s!=NULL)
s-next=p-next;
q-next=p;
p=p-next;
q-next-next=NULL;
}
else
{
flag++;
clock+=p-need;
p-need=0;
p-turn+=clock;
if(flag==1)
RQ1=p;
s=p;
p=p-next;
}
}
while(p!=NULLp-need==0)
p=p-next;
}
②短进程优先调度:
每个进程按进程执行时间长短被赋予一个优先级,进程越短优先级越高,进程越长优先级越低,优先级最高的就绪进程率先被运行。为了防止高优先级的进程无休止的运行下去,调度程序可以在每一个时钟中断适当降低当前进程的优先级。如果这时运行进程优先级低于次高优先级进程,则将进行进程切换。
//RQ2采用短进程优先调度算法
for(i=0;i5;i++)
{
q=RQ2;
p=(PCB*)malloc(sizeof(PCB));
p-need=max;
p-next=NULL;
while(q!=NULL)
{
if(q-need!=0q-needp-need)
p=q;
q=q-next;
}
clock+=p-need;
p-turn+=clock;
p-need=0;
}
程序运行情况:
实习心得:
循环算法和短进程优先调度算法是一种操作系统的基础模拟,实验原理以及实现过程都不复杂,可以较容易的通过上机实现。通过这次上机,自己的编程能力和解决实际问题能力有所提高,对CPU调度分配有了进一步的认识。
(二)
课程设计题目:
银行家算法
请求序列如下:
进程P2请求资源(0,3,4)
进程P4请求资源(1,0,1)
进程P1请求资源(2,0,1)
进程P3请求资源(0,0,2)
程序功能及设计思路:
程序功能:使用银行家算法在动态分配资源的时候来避免死锁。银行家算法要求进入系统的进程必须说明它对各类资源类型的实例的最大需求量。这一数量不能超过系统各类资源的总数。
设计思路:直接写入Avaliable、Alloc和Need数据,运行程序时按照提示输入请求的进程号和三类请求的数量,然后程序作出判断是否非法请求,是否阻塞,然后进行试探性分配,若满足安全性状态,则确定分配,否则取消试探性分配。
数据结构及算法设计:
数据结构:
①可利用资源量Available
②最大需求矩阵
文档评论(0)