当前位置:文档之家› 进程控制和调度实验报告

进程控制和调度实验报告

//定义状态量
int Min(PCB *head)//挑选出队列中的拥有最小alltime值的块,返回块号,用于sjf算法
{
PCB *p;//q用来记录这个块的地址
int min,id;//记录最小值和块号
p=head->next;
if(p)
{
min=p->Alltime;
id=p->ID;
while(p->next)









创建和显示进程状态算法:PCB *CreatPCB(int n)
FCFS调度算法
功能:根据进程到达的顺序进行调度,先到达的进程先执行。在就绪队列中排的越靠前越先执行
算法:void FCFS(PCB *head,PCB *over)
SJ调度算法
功能:从就绪队列中选出剩余执行时间最短的就绪进程进行执行。执行结束后继续从就绪队列中选出剩余执行时间最短的。直到所有进程都被执行完。
p=p->next;
}
else
{
p=p->next;
}
}
}
return id;
}
PCB *CreatPCB(int n)
{
int i;
PCB *p,*q;
head=(PCB*)malloc(sizeof(PCB));
head->next=NULL;
p=head;
for(i=1;i<=n;i++)
{
q=(PCB*)malloc(sizeof(PCB));
q->ID=i;
q->CPUtime=0;
q->Alltime=rand()%200;
q->Pri
q->Arrivetime=0;
p->next=q;
p=q;
q->next=NULL;
}
head->next->Priority=0;
return head;
{
PCB *p;//q用来记录这个块的地址
int max,id;//记录最大和块号
p=head->next;
if(p)
{
max=p->Priority;
id=p->ID;
while(p->next)
{
if(max<=p->next->Priority)
{
max=p->next->Priority;
id=p->next->ID;
缺点:程序仍然存在很多地方可以改进。比如输出界面,可以做的更漂亮。部分地方可以采用其他的方法。


#include<stdio.h>
#include<stdlib.h>
#define Ready 0
#define Running 1
#define Block 3
#define Over 4
typedef struct PCBNode
算法:void RR(PCB *head,PCB *over,int t,int k)//时间片轮转法









先来先服务算法(FCFS调度法):
短作业(进程)优先调度算法(SJ调度算法):
最高优先权优先调度算法(优先调度算法):
时间片轮转算法(RR调度算法):


优点:程序中的数组采用了动态开辟的方法,有效地减少了对于空间的占用。提高了空间的利用率。输出的界面比较的简洁,直接给出了分配资源的顺序。资源请求算法则直接给出了请求后造成的情况,比较的明了。
课程名称
操作系统
班级
1120542
实验日期
2013-12-04
姓名
聂建建
学号
06
实验成绩
实验名称
进程控制和调度
实验
目的
以及
要求
用高级语言编写和调试进程调度的模拟程序,以加深对进程调度算法的理解。




Microsoft Visual Studio




1、自定义进程相关的数据结构;
2、利用MFC类库中的栈(queue),链表(list),向量(vector)等模板模拟进程控制块队列、进程控制块优先级队列、统计信息链表及其指令集合;
3、利用MSDN和MFC API编程实现常见的进程控制和调度策略(先来先服务算法(FCFS调度法)、短作业(进程)优先调度算法(SJ调度算法)、最高优先权优先调度算法(优先调度算法)、时间片轮转算法(RR调度算法));
4、测试以上进程调度策略的周转时间、带权周转时间、平均周转时间和平均带权周转时间,并定性评价它们的性能。
算法:void SJF(PCB *head,PCB *over)//sjf算法
优先调度算法(Prio):
功能:从就绪队列中选出优先级别最高的进程进行执行。重复进行。直到所有的所有的进程执行完毕。
算法:void Prio(PCB *head,PCB *over)
RR调度算法:
功能:根据时间片的大小,对每个进程依次执行。时间片用完之后进程进入阻塞的状态,重新得到时间片后接着执行。直到完成。
printf("%d ",p->CPUtime);
printf("%d ",p->Alltime);
printf("%d ",p->Priority);
printf("%d \n",p->state);
p=p->next;
}
}//显示PCB块
void FCFS(PCB *head,PCB *over)
}//创建pcb块
void Display(PCB *head)
{
PCB *p;
p=head->next;
printf("ID Arrivetime CPUtime(已占用) Alltime Priority state \n");
while(p)
{
printf("%d ",p->ID);
printf("%d ",p->Arrivetime);
{
if(min>p->next->Alltime)
{
min=p->next->Alltime;
id=p->next->ID;
p=p->next;
}
else
{
p=p->next;
}
}
}
return id;
}
int Max(PCB *head)//挑选出队列中的拥有最大优先级的块,返回块号,用于prio算法
{
PCB *p,*q;
int j=0;
int n=0,s=0;
double m;
{
int ID;
int Priority;
int CPUtime;
int Alltime;
int Arrivetime;
int state;
int counter;
struct PCBNode *next;
}PCB;//定义数据结构
PCB *run;
PCB *ready;
PCB *over;
PCB *head;
相关主题