问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

要求:从《操作系统(本科)实验指南》的5个实验中选做任意一个,提交实验报告。求知道怎么做 ~

发布网友 发布时间:2022-04-29 14:55

我来回答

1个回答

热心网友 时间:2023-10-13 04:42

进程调度
一、目的要求:
用C或C++语言编写和调试一个进程调度程序,以加深对进程的概念及进程调度算法的理解.
二、进程调度算法:
采用最高优先数优先的调度算法(即把处理机分配给优先数最高的进程)和先来先服务算法。
每个进程有一个进程控制块( PCB)表示。进程控制块可以包含如下信息:进程名、优先数、到达时间、需要运行时间、已用CPU时间、进程状态等等。
进程的优先数及需要的运行时间可以事先人为地指定(也可以由随机数产生)。进程的到达时间为进程输入的时间。 进程的运行时间以时间片为单位进行计算。每个进程的状态可以是就绪 W(Wait)、运行R(Run)状态之一。
就绪进程获得 CPU后都只能运行一个时间片。用已占用CPU时间加1来表示。如果运行一个时间片后,进程的已占用 CPU时间已达到所需要的运行时间,则撤消该进程,如果运行一个时间片后进程的已占用CPU时间还未达所需要的运行时间,也就是进程还需要继续运行,此时应将进程的优先数减1(即降低一级),然后把它插入就绪队列等待CPU。
每进行一次调度程序都打印一次运行进程、就绪队列、以及各个进程的 PCB,以便进行检查。
重复以上过程,直到所要进程都完成为止。
三、主要数据结构:
struct pcb { /* 定义进程控制块PCB */
char name[10]; //进程名字
char state; //进程状态
int super; //进程的优先级
int ntime; //进程需要运行的时间
int rtime; //进程已经运行的时间
struct pcb* link; }
四、调度算法的流程图如下 :

参考代码:
#include "stdio.h"
#include <stdlib.h>
#include <conio.h>
#define getpch(type) (type*)malloc(sizeof(type))
#define NULL 0

struct pcb
{ /* 定义进程控制块PCB */
char name[10];
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)) /*若插入进程比当前进程优先数大,*/
{ /*插入到当前进程前面*/
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=0;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函数*/
}
}

int space()
{
int l=0; PCB* pr=ready;
while(pr!=NULL)
{
l++;
pr=pr->link;
}
return(l);
}

Void disp(PCB * pr) /*建立进程显示函数,用于显示当前进程*/
{
printf("\n qname \t state \t super \t ndtime \t runtime \n");
printf("|%s\t",pr->name);
printf("|%c\t",pr->state);
printf("|%d\t",pr->super);
printf("|%d\t",pr->ntime);
printf("|%d\t",pr->rtime);
printf("\n");
}

Void check() /* 建立进程查看函数 */
{
PCB* pr;
printf("\n **** 当前正在运行的进程是:%s",p->name); /*显示当前运行进程*/
disp(p);
pr=ready;
printf("\n ****当前就绪队列状态为:\n"); /*显示就绪队列状态*/
while(pr!=NULL)
{
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++;
printf("\n The execute number:%d \n",h);
p=ready;
ready=p->link;
p->link=NULL;
p->state='R';
check();
running();
printf("\n 按任一键继续......");
ch=getchar();
}
printf("\n\n 进程已经完成.\n");
ch=getchar();
}
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
青海摇什么时候火的 宋庄镇都有哪些村 唐山多地解除封控管理、静态管理,市民仍需做好哪些防护? 拼多多上面的旗舰店是正品吗 ...尺是20:1的图纸上,应画多少厘米,在比例尺是1:200的图纸上测_百度知... 4x2=8,4x20=8,4x200=800,我发现了:一个因数不变,另外一个因数乘以几,积... 小学三年级数学上册4X2=8,4X20=80,4X200=800我发现:一个因数不变,另... 描写雪的段落优选好句60句 程序员最低学历是多少 电脑不识别独显了怎么办? 怎样设置电话录音 手机 如果辽宁号航母战斗群和印度航母作战,结果会怎样 罪恶都市武装直升飞机的秘籍是什么 word文档如何统计人数 铁血联盟2 榴弹发射器怎么用? 侠盗飞车3有个把飞机放进仓库的任务怎么做啊 三角洲特种部队4第一关怎么过 亚洲航空 统计word和excel中都有的名字 朝鲜的海军、陆军是咱们的装备莫 侠盗猎车4飞机 怎样用word统计重复名字次数 荣誉勋章2010的武器介绍 如何用Excel统计一堆word文档的标题 word中全是人名时,如何快速数出名字的个数 圣安地列斯中有哪些飞机分别如何驾驶?求!!! 电影《湄公河行动》中涉及了哪些武器? 飞机超市的目标客户 飞机超市的介绍 win7系统64位软件怎么安装 电影《悟空传》中二郎神的哮天犬被阿紫称呼为什么 实验十九 遥感图像辐射校正 悟空传电影里 那个演二郎神外婆的是谁,就是那个老奶奶 到底神话故事里孙悟空和二郎神谁更厉害? 关于欢度春节话家乡习俗的实践报告怎么写? 悟空传里孙悟空和杨戬最后说的那句下次都用尽全力什么意思 求一本书,女主是妲己和纣王的女儿,从小生活在人类世界,碰到过男主。男主好像是二郎神?特别厉害。 求购电气自动化专业顶岗实习报告~~A4纸50页左右的~~急急急~~ 悟空传中谁是反派人物 NANA(漫画)结局是什么? 悟空传中阿紫到底是谁的女儿,天尊的女儿叫阿紫,怎么二郎神的母亲的女儿也叫阿紫 想知道NaNa娜娜的最后结局? 你最喜欢哪个版本的杨戬?为什么? 《nana》结局是什么? NANA最后的结局是什么啊 NANA里面的真正结局是什么啊?动画的结局太草率了!! nana的结局是什么? 日本动画(NANA)最后的结局是什么? 《nana》结局拓巧为什么和蕾拉在一起? 开心消消乐680关怎么过 680关三星攻略