- 1、本文档共48页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
实用标准文案
精彩文档
《计算机操作系统》
课
程
设
计
报
告
学号:1367003270
班级:软技4班
姓名:张靖伟
目 录
1 实验:进程调度算法——时间片轮转算法
2 实验:银行家算法
3 实验:分区分配算法——BF和FF
4 实验:页面置换算法——FIFO和LRU
5 实验:磁盘调度算法——SCAN和SSTF
1实验:进程调度算法——时间片轮转算法
1.实验设计说明
用时间片轮转算法模拟单处理机调度。
建立一个进程控制块PCB来代表。PCB包括:进程名、到达时间、运行时间和进程后的状态。
进程状态分为就绪(R)和删除(C)。
为每个进程任意确定一个要求运行时间和到达时间。
按照进程到达的先后顺序排成一个队列。再设一个指针指向队首和队尾。
执行处理机调度时,开始选择对首的第一个进程运行。
执行: a)输出当前运行进程的名字;
b)运行时间减去时间片的大小。
进程执行一次后,若该进程的剩余运行时间为零,则删除队首,并将该进程的状态置为C;若不为空,则将向后找位置插入。继续在运行队首的进程。
若进程队列不空,则重复上述的(5)和(6)步骤直到所有进程都运行完为止。
2.实验代码
/*****************时间片轮转调度算法*******************/
#include stdio.h
#include stdlib.h
#include string.h
#define N 10
int time=0;
bool spe=false;
typedef struct pcb /*进程控制块定义*/
{
char pname[N]; /*进程名*/
int runtime; /*服务时间*/
int arrivetime; /*到达时间*/
char state; /*进程状态*/
struct pcb*next;/*连接指针*/
}PCB;
typedef struct back_team/*后备队列定义*/
{
PCB*first,*tail;
}BACK_TEAM;
typedef struct pre_team/*就绪队列定义*/
{
PCB*first,*tail;
}PRE_TEAM;
PCB*creat()/*创建PCB*/
{
char s[N];
printf(请输入进程名:\n);
scanf(%s,s);
printf(请输入进程服务时间(/秒):\n);
int t;
scanf(%d,t);
PCB*p=(PCB*)malloc(sizeof(PCB));
strcpy(p-pname,s);
p-runtime=t;
printf(请输入进程到达时间(/秒):\n);
scanf(%d,t);
p-arrivetime=t;
p-state=R;
p-next=NULL;
getchar();
return p;
}
PCB*copy(PCB*p)/*复制一个进程*/
{
if(!p)
return NULL;
PCB*s=(PCB*)malloc(sizeof(PCB));
strcpy(s-pname,p-pname);
s-next=NULL;
s-arrivetime=p-arrivetime;
s-runtime=p-runtime;
s-state=p-state;
return s;
}
PCB*getnext(PCB*p,BACK_TEAM*head)/*得到队列中下一个进程*/
{
PCB*s=head-first;
if(!p)
return NULL;
while(strcmp(s-pname,p-pname))
s=s-next;
return s-next;
}
void del(BACK_TEAM*head,PRE_TEAM*S)/*释放申请的空间*/
{
PCB*p=head-first-next;
while(p)
{
free(head-first);
head-first=p;
p=p-next;
}
head-first=head-tail=NULL;
free(head);
free(S);
}
BACK_TEAM*creatbt(BACK_TEAM*head)/*创建后备队列*/
{
PCB*p=creat();
if(!head-first)
head-first=p;
else
head-tail-next=p;
head-tail=p;
return head;
}
bool recognize(PRE_TEAM*s1)/*判断运行是否结束*/
{
if(!s1
文档评论(0)