操作系统-处理机调度算法的实现
操作系统实验报告
处理机调度算法的实现
姓 名: 陈民厅
学 号: 09070009
班 级: 09计算机1
操作系统实验报告
一、实验名称及要求
1、实验名称:
处理机调度算法的实现
2、实验要求:
了解操作系统处理机调度概念的基本概念,处理机调度程序的功能,常用的处理机调度算法。C或C++编程
方法
快递客服问题件处理详细方法山木方法pdf计算方法pdf华与华方法下载八字理论方法下载
与语句格式,提前初步编好试验程序。
3、实验方式:
通过实验室的微机上机,实际调试程序。
4、实验环境:
Windows操作系统环境下的个人微机
,或,,,程序
设计
领导形象设计圆作业设计ao工艺污水处理厂设计附属工程施工组织设计清扫机器人结构设计
语言
二、实验内容
,(设定系统中有五个进程,每一个进程用一个进程控制块
表
关于同志近三年现实表现材料材料类招标技术评分表图表与交易pdf视力表打印pdf用图表说话 pdf
示。
,(输入每个进程的“优先数”和“要求运行时间”。
,(为了调度方便,将五个进程按给定的优先数从大到小连成就绪队列。用一单元指出队列进程,用指针指出队列的链接情况。
,(处理机调度总是选队首进程运行。采用动态优先数算法,进程每运行一次优先数就减“,”,同时将运行时间减“,”。
,(若要求运行时间为零,则将其状态置为“结束”,且对出队列。
,(运行所设计进程,显示或打印逐次被选中进程的进程名以及进程控制块的动态变化过程。
1
操作系统实验报告
三、实验程序
#include
#include #include #define getpch(type) (type*)malloc(sizeof(type))
#define NULL 0
struct pcb /* 定义进程控制块PCB */ {
char name[20];
char state;
int super;
int ntime;
int rtime;
struct pcb* link; } *ready=NULL,*p;
typedef struct pcb PCB;
void sort() /* 建立对进程进行优先级排列函数*/ {
PCB *first, *second;
int insert=0;
if((ready==NULL)||((p->super)>(ready->super))) /*优先级最大者,插入队首*/
{
p->link=ready;
ready=p;
}
else /* 进程比较优先级,插入适当的位置中*/
{
first=ready;
second=first->link;
while(second!=NULL)
{
if((p->super)>(second->super)) /*若插入进程比当前进程优先数大,*/
{ /*插入到当前进程前面*/
2
操作系统实验报告
p->link=second;
first->link=p;
second=NULL;
insert=1;
}
else /* 插入进程优先数最低,则插入到队尾*/
{
first=first->link;
second=second->link;
}
}
if(insert==0) first->link=p;
}
}
void input() /* 建立进程控制块函数*/ {
int i,num;
printf("\n 请输入进程数: ");
scanf("%d",&num);
for(i=1;i<=num;i++)
{
printf("\n 进程号:No.%d\n",i);
p=getpch(PCB);
printf("\n 请输入进程名:");
scanf("%s",p->name);
printf("\n 请输入进程的优先数:");
scanf("%d",&p->super);
printf("\n 请输入进程的运行时间:");
scanf("%d",&p->ntime);
printf("\n");
p->rtime=0;p->state='W';
p->link=NULL;
sort(); /* 调用sort函数*/
}
3
操作系统实验报告
}
int space()
{
int l=0;
PCB* pr=ready;
while(pr!=NULL)
{
l++;
>link; pr=pr-
}
return(l);
}
void disp(PCB * pr) /*建立进程显示函数,用于显示当前进程*/ {
printf("\n 进程名\t 进程状态\t 优先数\t 需要运行时间\t 已经运行时间\n");
printf("|%s\t",pr->name);
printf("|%c\t",pr->state);
printf("|%d\t",pr->super);
printf("|%d\t\t",pr->ntime);
printf("|%d\t",pr->rtime);
printf("\n");
}
void check() /* 建立进程查看函数 */
{
PCB* pr;
printf("\n **** 当前正在运行的进程是:\n"); /*显示当前运行进程*/
disp(p);
pr=ready;
printf("\n **** 当前就绪队列状态为:\n"); /*显示就绪队列状态*/
while(pr!=NULL)
4
操作系统实验报告
{
disp(pr);
pr=pr->link;
}
}
void destroy() /*建立进程撤消函数(进程运行结束,撤消进程)*/
{
printf("\n 进程 [%s] 已完成.\n",p->name);
free(p);
}
void running() /* 建立进程就绪函数(进程运行时间到,置就绪状态*/
{
(p->rtime)++;
if(p->rtime==p->ntime)
destroy(); /* 调用destroy函数*/
else
{
(p->super)--;
p->state='W';
sort(); /*调用sort函数*/
}
}
void main() /*主函数*/
{
int len,h=0;
char ch;
input();
len=space();
while((len!=0)&&(ready!=NULL))
{
ch=getchar();
h++;
5
操作系统实验报告
printf("-----------------------------------------------------");
printf("\n 现在是第%d次运行: \n",h);
p=ready;
ready=p->link;
p->link=NULL;
p->state='R';
check();
running();
printf("\n 按回车键继续......\n");
}
n\n 进程已经完成.\n"); printf("\
}
四、实 验 结 果
6
操作系统实验报告
7
操作系统实验报告
8
操作系统实验报告
五(实验总结
进程是一个具有一定独立功能的程序关于某个数据集合的一次运行活动。进程有五个特性:1、动态性 2、并发性3、独立性4、异步性5、结构特性
系统中的进程都具有以下三中基本状态:(1)就绪(Ready)状态 (2)执行(Runing)状态(3)阻塞(Blocked)状态。
最后感谢李老师的指导。
9