搜档网
当前位置:搜档网 › 操作系统进程调度C语言代码

操作系统进程调度C语言代码

操作系统进程调度C语言代码
操作系统进程调度C语言代码

// sun.cpp : 定义控制台应用程序的入口点。

//本算法包含四种调度:先到先服务,短作业优先,时间片轮转,优先级优先!#include"stdio.h"

#define N 50

void main()

{ void sjp();

void fcfs();

void sjf();

void yxj();

int a;

while(true)

{

printf("\n\n");

printf("\t\t/*************************/");

printf("\n\t\t/* 1、先到先服务调度*/");

printf("\n\t\t/* 2、短作业优先调度*/");

printf("\n\t\t/* 3、时间片轮转调度*/");

printf("\n\t\t/* 4、优先级优先调度*/");

printf("\n\t\t/* 0、退出*/\n");

printf("\t\t/*************************/");

printf("\n\n\t请选择菜单项:\t");

scanf("%d",&a);

printf("\n");

switch(a)

{

case 1: fcfs();break;

case 2: sjf();break;

case 3: sjp();break;

case 4: yxj();break;

default: break;

}

if(a<0&&a>4) break;

}

}

void sjp()

{

int i,j,n,min,px,sjp,time;

float sum1,sum2;

bool flag=true;

printf("\t请输入有n个进程(0

scanf("%d",&n);

while(n>50||n<=0)

{

printf("n\t请重新输入:");

scanf("%d",&n);

}

printf("\n\n");

printf("\t请输入时间片大小(0

while(sjp<=0)

{

printf("n\t请重新输入:");

scanf("%d",&sjp);

}

struct Gzuo{

int id; //进程名字

int dt; //到达时刻

int st; //服务时间

int wct; //完成时刻

int st2; //标志是否完成

float zt; //周转时间

float dczt; //带权周转时间

};

Gzuo a[N];

for(i=0;i

{

a[i].id=i+1;

printf("\t到达时间:");

scanf("%d",&a[i].dt);

printf("\t服务时间:");

scanf("%d",&a[i].st);

a[i].st2 = a[i].st;

printf("\n");

}

for(j=n-1;j>=0;j--)

{

for(i=0;i

{

if(a[i].dt>a[i+1].dt)

{

min=a[i].dt;

a[i].dt=a[i+1].dt;

a[i+1].dt=min;

min=a[i].st;

a[i].st=a[i+1].st;

a[i+1].st=min;

min=a[i].st2;

a[i].st2=a[i+1].st2;

a[i+1].st2=min;

min=a[i].id;

a[i].id=a[i+1].id;

a[i+1].id=min;

}

}

}

time = a[0].dt;

//printf("赋值后TIME值为:%d\n",time);

min = 0;

while(min

{

flag = true;

for(i = 0;i

{

if(a[i].st2>0&&a[i].dt<=time)

flag = false;

}

for(i=0;i

{

if(a[i].st2 > 0 )

{

if(a[i].dt<=time)

{

//printf("当前a[%d].st2值为:%d\n",i,a[i].st2);

a[i].st2 = a[i].st2 - sjp;

//printf("运算后当前a[%d].st2值为:%d\n",i,a[i].st2);

//printf("当前TIME值为:%d\n",time);

time = time + sjp;

//printf("增加之后TIME值为:%d\n",time);

if(a[i].st2<=0)

{

a[i].wct = time + a[i].st2;

a[i].zt=(float)(a[i].wct-a[i].dt);

a[i].dczt=a[i].zt/a[i].st;

min++;

}

}else if(flag)

{

for(i=0;i

{

if(a[i].st2>0&&a[i].dt>time)

{

time = a[i].dt;

break;

}

}

}

}

}

}

printf("\t1、按id号依次输出\n");

printf("\t2、按完成顺序依次输出\n");

printf("\n\t请选择输出顺序:\t");

scanf("%d",&px);

printf("\nid:到达时间\t服务时间\t完成时间\t周转时间\t带权周转时间\n");

sum1=0;

sum2=0;

switch(px)

{

case 2:

{

for(i=0;i

{

printf("%d:%d\t\t%d\t\t%d\t\t%.0f\t\t%.2f\n",a[i].id,a[i].dt,a[i].st,a[i].wct,a[i].zt,a[i].dczt);

sum1+=a[i].zt;

sum2+=a[i].dczt;

}

printf("\n平均周转时间:%.2f\n",sum1/n);

printf("\n平均带权周转时间:%.2f\n\n",sum2/n);

break;

}

case 1:

{

for(j=0;j

{

for(i=0;i

if(a[i].id==j+1)

{

printf("%d:%d\t\t%d\t\t%d\t\t%.0f\t\t%.2f\n",a[i].id,a[i].dt,a[i].st,a[i].wct,a[i].zt,a[i].dczt);

sum1+=a[i].zt;

sum2+=a[i].dczt;

}

}

printf("\n平均周转时间:%.2f\n",sum1/n);

printf("\n平均带权周转时间:%.2f\n\n",sum2/n);

break;

}

default: break;

}

}

void fcfs()

{

int i,j,n,min,px;

float sum1,sum2;

printf("\t请输入有n个进程(0

scanf("%d",&n);

while(n>50||n<=0)

{

printf("n\t请重新输入:");

scanf("%d",&n);

}

printf("\n\n");

struct Gzuo{

int id; //进程名字

int dt; //到达时刻

int st; //服务时间

int wct; //完成时刻

float zt; //周转时间

float dczt; //带权周转时间

};

Gzuo a[N];

for(i=0;i

{

a[i].id=i+1;

printf("\t到达时间:");

scanf("%d",&a[i].dt);

printf("\t服务时间:");

scanf("%d",&a[i].st);

printf("\n");

}

for(j=n-1;j>=0;j--)

{

for(i=0;i

{

if(a[i].dt>a[i+1].dt)

{

min=a[i].dt;

a[i].dt=a[i+1].dt;

a[i+1].dt=min;

min=a[i].st;

a[i].st=a[i+1].st;

a[i+1].st=min;

min=a[i].id;

a[i].id=a[i+1].id;

a[i+1].id=min;

}

}

}

a[0].wct=a[0].st+a[0].dt;

a[0].zt=(float)a[0].st;

a[0].dczt=a[0].zt/a[0].st;

for(i=1;i

{

if(a[i].dt>a[i-1].wct)

{

a[i].wct=a[i].dt+a[i].st;

a[i].zt=(float)a[i].st;

a[i].dczt=a[i].zt/a[i].st;

}

else

{

a[i].wct=a[i-1].wct+a[i].st;

a[i].zt=(float)(a[i].wct-a[i].dt);

a[i].dczt=a[i].zt/a[i].st;

}

}

printf("\t1、按id号依次输出\n");

printf("\t2、按完成顺序依次输出\n");

printf("\n\t请选择输出顺序:\t");

scanf("%d",&px);

printf("\nid:到达时间\t服务时间\t完成时间\t周转时间\t带权周转时间\n");

sum1=0;

sum2=0;

switch(px)

{

case 2:

{

for(i=0;i

{

printf("%d:%d\t\t%d\t\t%d\t\t%.0f\t\t%.2f\n",a[i].id,a[i].dt,a[i].st,a[i].wct,a[i].zt,a[i].dczt);

sum1+=a[i].zt;

sum2+=a[i].dczt;

}

printf("\n平均周转时间:%.2f\n",sum1/n);

printf("\n平均带权周转时间:%.2f\n\n",sum2/n);

break;

}

case 1:

{

for(j=0;j

{

for(i=0;i

if(a[i].id==j+1)

{

printf("%d:%d\t\t%d\t\t%d\t\t%.0f\t\t%.2f\n",a[i].id,a[i].dt,a[i].st,a[i].wct,a[i].zt,a[i].dczt);

sum1+=a[i].zt;

sum2+=a[i].dczt;

}

}

printf("\n平均周转时间:%.2f\n",sum1/n);

printf("\n平均带权周转时间:%.2f\n\n",sum2/n);

break;

}

default: break;

}

}

void sjf()

{

int i,j,n,min,px;

int b=0,z;

float sum1,sum2;

printf("\n\t\t请输入有n个进程(0

scanf("%d/n",&n);

while(n>50||n<=0)

{

printf("n\t请重新输入:");

scanf("%d",&n);

}

printf("\n");

struct Gzuo{

int id; //进程名字

int dt; //到达时刻

int st; //服务时间

int wct; //完成时刻

float zt; //周转时间

float dczt; //带权周转时间

};

Gzuo a[N];

for(i=0;i

{

a[i].id=i+1;

printf("\t到达时间:");

scanf("%d",&a[i].dt);

printf("\t服务时间:");

scanf("%d",&a[i].st);

printf("\n");

}

min=a[0].dt;

for(j=n-1;j>=0;j--)

{

for(i=0;i

{

if(a[i].dt>a[i+1].dt)

{

min=a[i].dt;

a[i].dt=a[i+1].dt;

a[i+1].dt=min;

min=a[i].st;

a[i].st=a[i+1].st;

a[i+1].st=min;

min=a[i].id;

a[i].id=a[i+1].id;

a[i+1].id=min;

}

if(a[i].dt==a[i+1].dt&&a[i].st>a[i+1].st)

{

min=a[i].dt;

a[i].dt=a[i+1].dt;

a[i+1].dt=min;

min=a[i].st;

a[i].st=a[i+1].st;

a[i+1].st=min;

min=a[i].id;

a[i].id=a[i+1].id;

a[i+1].id=min;

}

}

}

a[0].wct=a[0].st+a[0].dt;

a[0].zt=(float)a[0].st;

a[0].dczt=a[0].zt/a[0].st;

for(i=1;i

{

if(a[i].dt>a[0].wct) ;

else b=b+1;

}

for(j=b-1;j>=1;j--)

{

for(i=1;i

{

if(a[i].st>a[i+1].st)

{

min=a[i].dt;

a[i].dt=a[i+1].dt;

a[i+1].dt=min;

min=a[i].st;

a[i].st=a[i+1].st;

a[i+1].st=min;

min=a[i].id;

a[i].id=a[i+1].id;

a[i+1].id=min;

}

}

}

for(i=1;i

{

if(a[i].dt>a[i-1].wct)

{

a[i].wct=a[i].dt+a[i].st;

a[i].zt=(float)a[i].st;

a[i].dczt=a[i].zt/a[i].st;

}

else

{

a[i].wct=a[i-1].wct+a[i].st;

a[i].zt=(float)(a[i].wct-a[i].dt);

a[i].dczt=a[i].zt/a[i].st;

}

for(j=i+1,b=j;j

{

if(a[j].dt>a[i].wct) ;

else b=b+1;

}

for(j=b-1;j>=i;j--)

{

for(z=i;z

{

if(a[z].st>a[z+1].st)

{

min=a[z].dt;

a[z].dt=a[z+1].dt;

a[z+1].dt=min;

min=a[z].st;

a[z].st=a[z+1].st;

a[z+1].st=min;

min=a[i].id;

a[i].id=a[i+1].id;

a[i+1].id=min;

}

}

}

}

printf("\n\t请选择输出顺序\n");

printf("\t1、按id号依次输出\n");

printf("\t2、按完成顺序依次输出\n");

scanf("%d",&px);

printf("\nid:到达时间\t服务时间\t完成时间\t周转时间\t带权周转时间\n");

sum1=0;

sum2=0;

switch(px)

{

case 2:

{

for(i=0;i

{

printf("%d:%d\t\t%d\t\t%d\t\t%.0f\t\t%.2f\n",a[i].id,a[i].dt,a[i].st,a[i].wct,a[i].zt,a[i].dczt);

sum1+=a[i].zt;

sum2+=a[i].dczt;

}

printf("\n平均周转时间:%.2f\n",sum1/n);

printf("\n平均带权周转时间:%.2f\n\n",sum2/n);

break;

}

case 1:

{

for(j=0;j

{ for(i=0;i

if(a[i].id==j+1)

{

printf("%d:%d\t\t%d\t\t%d\t\t%.0f\t\t%.2f\n",a[i].id,a[i].dt,a[i].st,a[i].wct,a[i].zt,a[i].dczt);

sum1+=a[i].zt;

sum2+=a[i].dczt;

}

}

printf("\n平均周转时间:%.2f\n",sum1/n);

printf("\n平均带权周转时间:%.2f\n\n",sum2/n);

break;

}

default: break;

}

}

void yxj()

{

int i,j,n,min,px;

int b=0,z;

float sum1,sum2;

printf("\n\t\t请输入有n个进程(0

scanf("%d/n",&n);

while(n>50||n<=0)

{

printf("n\t请重新输入:");

scanf("%d",&n);

}

printf("\n");

struct Gzuo{

int id; //进程名字

int dt; //到达时刻

int st; //服务时间

int yxj; //优先级

int wct; //完成时刻

float zt; //周转时间

float dczt; //带权周转时间

};

Gzuo a[N];

for(i=0;i

{

a[i].id=i+1;

printf("\t到达时间:");

scanf("%d",&a[i].dt);

printf("\t服务时间:");

scanf("%d",&a[i].st);

printf("\t优先级:");

scanf("%d",&a[i].yxj);

printf("\n");

}

min=a[0].dt;

for(j=n-1;j>=0;j--)

{

for(i=0;i

{

if(a[i].dt>a[i+1].dt)

{

min=a[i].dt;

a[i].dt=a[i+1].dt;

a[i+1].dt=min;

min=a[i].st;

a[i].st=a[i+1].st;

a[i+1].st=min;

min=a[i].id;

a[i].id=a[i+1].id;

a[i+1].id=min;

min=a[i].yxj;

a[i].yxj=a[i+1].yxj;

a[i+1].yxj=min;

}

if(a[i].dt==a[i+1].dt&&a[i].yxj

{

min=a[i].dt;

a[i].dt=a[i+1].dt;

a[i+1].dt=min;

min=a[i].st;

a[i].st=a[i+1].st;

a[i+1].st=min;

min=a[i].id;

a[i].id=a[i+1].id;

a[i+1].id=min;

min=a[i].yxj;

a[i].yxj=a[i+1].yxj;

a[i+1].yxj=min;

}

}

}

a[0].wct=a[0].st+a[0].dt;

a[0].zt=(float)a[0].st;

a[0].dczt=a[0].zt/a[0].st;

for(i=1;i

{

if(a[i].dt>a[0].wct) ;

else b++;

}

for(j=b-1;j>=1;j--)

{

for(i=1;i

{

if(a[i].yxj

{

min=a[i].dt;

a[i].dt=a[i+1].dt;

a[i+1].dt=min;

min=a[i].st;

a[i].st=a[i+1].st;

a[i+1].st=min;

min=a[i].id;

a[i].id=a[i+1].id;

a[i+1].id=min;

min=a[i].yxj;

a[i].yxj=a[i+1].yxj;

a[i+1].yxj=min;

}

}

}

for(i=1;i

{

if(a[i].dt>a[i-1].wct)

{

a[i].wct=a[i].dt+a[i].st;

a[i].zt=(float)a[i].st;

a[i].dczt=a[i].zt/a[i].st;

}

else

{

a[i].wct=a[i-1].wct+a[i].st;

a[i].zt=(float)(a[i].wct-a[i].dt);

a[i].dczt=a[i].zt/a[i].st;

}

for(j=i+1,b=j;j

{

if(a[j].dt>a[i].wct) ;

else b=b+1;

}

for(j=b-1;j>=i;j--)

for(z=i;z

{

if(a[z].yxj

{

min=a[z].dt;

a[z].dt=a[z+1].dt;

a[z+1].dt=min;

min=a[z].st;

a[z].st=a[z+1].st;

a[z+1].st=min;

min=a[i].id;

a[i].id=a[i+1].id;

a[i+1].id=min;

}

}

}

}

printf("\n\t请选择输出顺序\n");

printf("\t1、按id号依次输出\n");

printf("\t2、按完成顺序依次输出\n");

scanf("%d",&px);

printf("\nid:到达时间\t服务时间\t优先级\t完成时间\t周转时间\t带权周转时间\n");

sum1=0;

sum2=0;

switch(px)

{

case 2:

{

for(i=0;i

{

printf("%d:%d\t\t%d\t\t%d\t\t%d\t\t%.0f\t\t%.2f\n",a[i].id,a[i].dt,a[i].yxj,a[i].st,a[i].wct,a[i].z t,a[i].dczt);

sum1+=a[i].zt;

sum2+=a[i].dczt;

}

printf("\n平均周转时间:%.2f\n",sum1/n);

printf("\n平均带权周转时间:%.2f\n\n",sum2/n);

break;

}

case 1:

{

for(j=0;j

{ for(i=0;i

if(a[i].id==j+1)

printf("%d:%d\t\t%d\t\t%d\t\t%d\t\t%.0f\t\t%.2f\n",a[i].id,a[i].dt,a[i].yxj,a[i].st,a[i].wct,a[i].z t,a[i].dczt);

sum1+=a[i].zt;

sum2+=a[i].dczt;

}

}

printf("\n平均周转时间:%.2f\n",sum1/n);

printf("\n平均带权周转时间:%.2f\n\n",sum2/n);

break;

}

default: break;

}

}

随机进程调度算法

《操作系统原理》实验报告 实验名称:Linux随机进程调度算法实现 班级: 学号: 姓名: 日期: 2012/12/31

一、实验名称 Linux随机进程调度算法实现 二、所属课程名称 《操作系统原理》 三、实验原理 linux 0.11内核目录linux/kernel中的sched.c函数是内核中进程调度管理的程序,其中schedule()函数负责选择系统中下一个要运行的进程。 schedule()函数首先对所有任务(进程)进行检测,唤醒任何一个已经得到信号的进程。具体方法是任务数组中的每个进程,检查其报警定时值alarm。如果进程的alarm时间已经过期(alarm

NR_TASKS:系统能容纳的最大进程数(64个); task[]:任务(进程)数组; 更改代码如下:(linux 0.11内核目录下linux/kernel/sched.c 源文件的scheduling()函数while(1)循环)while (1) { //定义c用来判断系统中是否可运行的任务(进程)存在; c=-1; //c初值设为-1,默认不存在可运行进程; next = 0;//next记录下一个即将运行的进程; i=jiffies % NR_TASKS+1; //i的值是随机产生的; p=&task[i];//p指向在task表中下标为i的进程; while (--i) { //遍历task[]; if(!*--p)continue; //如果task[i]不包含进程,跳过; //如果task[i]包含进程且该进程处于就绪状态,记录 //该任务(进程)序号,跳出无限循环while(1),转向 //switch_to()函数执行该任务(进程); if ((*p)->state == TASK_RUNNING) { next = i; c=i; break; } } if (c) break;//如果没有任何任务(进程)要执行,则跳出, //转向switch_to(),执行0号进程(idle)。 }

进程调度算法实验报告

进程调度算法实验报告 篇一:操作系统进程调度算法模拟实验报告 进程调度算法模拟 专业:XXXXX 学号:XXXXX 姓名:XXX 实验日期:20XX年XX月XX日 一、实验目的 通过对进程调度算法的模拟加深对进程概念和进程调度算法的理解。 二、实验要求 编写程序实现对5个进程的调度模拟,要求至少采用两种不同的调度算 法分别进行模拟调度。 三、实验方法内容 1. 算法设计思路 将每个进程抽象成一个控制块PCB, PCB用一个结构体描述。 构建一个进程调度类。将进程调度的各种算法分装在一个类中。类中存 在三个容器,一个保存正在或未进入就绪队列的进程,一个保存就绪的进程,另一个保存已完成的进程。还有一个PCB实例。主要保存正在运行的进程。类中其他方法都是围绕这三个容器可以这个运行中的PCB展开。

主要用到的技术是STL中的vector以维护和保存进程容器、就绪容器、 完成容器。 当程序启动时,用户可以选择不同的调度算法。然后用户从控制台输入 各个进程的信息,这些信息保存到进程容器中。进程信息输入完毕后,就开始了进程调度,每调度一次判断就绪队列是否为空,若为空则系统时间加一个时间片。判断进程容器中是否有新的进程可以加入就绪队列。 2. 算法流程图主程序的框架: ();//先来先服务 ();//最短进程优先调度//简单时间片轮转//最高优先数优先//输入进程信息 ();.m_WaitQueue.empty()||.m_ProcessQueue.empt() (); (); 进程调度过程: ; 3. 算法中用到的数据结构 struct fcfs{//先来先服务算法从这里开始char name[10];float arrivetime;float servicetime;float starttime;float finishtime;float zztime;float

处理器调度习题

处理器调度 选择题 当CPU执行操作系统代码时,则处理机处于( )。 A.执行态 B.目态 C.管态 D.就绪态 ( )是机器指令的扩充,是硬件的首次延伸,是加在硬件上的第一层软件。 A.系统调用 B.操作系统 C.内核 D.特权指令 操作系统提供给程序员的接口是( )。 A.进程 B.系统调用 C.库函数 D.B和C 用户程序向系统提出使用外设的请求方式是( )。 A.作业申请 B.原语 C.系统调用 D.I/O指令 当作业正常完成进入完成状态时,操作系统( )。 A.将输出该作业的结果并删除内存中的作业 B.将收回该作业的所占资源并输出结果 C.将收回该作业的所占资源及输出结果,并删除该作业 D.将收回该作业的所占资源及输出结果,并将它的控制块从当前的队列中删除 下列选项是关于作业和进程关系的描述,其中哪一个是不正确的( )。 A.作业的概念主要用在批处理系统中,而进程的概念则用在几乎所有的OS中。 B.作业是比进程低一级的概念。 C.一个作业至少由一个进程组成。 D.作业是用户向计算机提交任务的实体,而进程是完成用户任务的执行实体以及向系统申请分配资源的基本单位。 作业从后备作业到被调度程序选中的时间称为( )。 周转时间B.响应时间C.等待调度时间D.运行时间 设有三个作业J1,J2,J3,它们同时到达,运行时间分别为T1,T2,T3,且T1≤T2≤T3,若它们在一台处理机上按单道运行,采用短作业优先算法,则平均周转时间为( )。 A.T1+T2+T3 B.1/3(T1+T2+T3) C.T1+2/3T2+1/3T3 D.T1+1/3T2+2/3T3 从作业提交给系统到作业完成的时间间隔称为作业的( )。 A.中断时间 B.等待时间 C.周转时间 D.响应时间 设有四个作业同时到达,每个作业执行时间均为2 h,它们在一台处理机上按单道方式运行,则平均周转时间为( )。 A.1 h B.5 h C.2.5 h D.8 h FCFS调度算法有利于( )。 A.长作业和CPU繁忙型作业 B.长作业和I/O繁忙型作业 C.短作业和CPU繁忙型作业 D.短作业和I/O繁忙型作业 下列哪种说法不是SJ(P)F调度算法的缺点( )。 A.对于长作业(进程)不利 B.未考虑作业(进程)的紧迫程度 C.不能有效降低作业(进程)的平均等待时间 D.由于根据的是用户提供的估计执行时间,因此不一定真正做到短而优先。 选择排队进程中等待时间最长的进程被优先调度,该调度算法是( )。 A.先来先服务调度算法B.短进程优先调度算法 C.优先权调度算法D.高响应比优先调度算法 在采用动态优先权的优先权调度算法中,如果所有进程都具有相同优先权初值,则此时的优先权调度算法实际上和( )相同。

进程调度算法实验报告

作业调度 一、实验名称 作业调度算法 二、实验目标 在单道环境下编写作业调度的模拟程序,以加深对作业调度的理解。单道环境的特点使被调度的作业占有所有的资源。实现的算法有先来先服务,最短作业优先,最高响应比三种作业调度算法。 三、实验环境要求: 1.PC机。 2.Windows; 3.CodeBlocks 四、实验基本原理 1.本实验设计一个可指定作业个数的作业调度系统。可以输出先来先服务,最短作业优先,最高响应比三种作业调度算法的结果。 2.先来先服务就是按照各个作业进入系统的自然次序进行调度。最短作业优先就是优先调度并且处理短作业。最高响应比优先就是根据在程序运行过程中的最高响应比对应的作业先进行调度处理。 3.在设计程序过程中,将time相关的内容封装到类中,重载了加减乘除和输入输出以及比较运算符,方便12:00这种形式的数据的加减乘除运算和比较运算, 五、数据结构设计 1.时间类

class time { public: time(int x = 0, int y = 0) { time::hour = x; time::minute = y; } time& operator = (const time &t1) { this->hour=t1.hour; this->minute=t1.minute; return *this; } time operator + (time t2) { intminutes,hours; minutes = (minute + t2.minute) % 60; hours=hour+t2.hour+ (minute + t2.minute) /60; return time(hours,minutes); } time operator -(time t2) { intminutes,hours; minutes =minute - t2.minute; if (minute<0) { minutes += 60; hour--; }

操作系统处理器调度算法C++程序

一、先来先服务算法 1.程序简介 先来先服务算法按照作业进入系统后备作业队列的先后次序挑选作业,先进入系统的作业将优先被挑选进入主存,创建用户进程,分配所需资源,然后,移入就绪队列.这是一种非剥夺式调度算法,易于实现,但效率不高.只顾及作业的等候时间,未考虑作业要求服务时间的长短,不利于短作业而优待长作业,不利于I/O繁忙型作业而有利于CPU繁忙型作业.有时为了等待场作业执行结束,短作业的周转时间和带全周转时间将变得很大,从而若干作业的平均周转时间和平均带权周转时间也变得很大。 2.分析 1.先定义一个数组代表各作业运行的时间,再定义一个数组代表各作业到达系统的时间,注意到达系统的时间以第一个作业为0基础(注意:若各程序都同时到达系统,则到达系统时间都为0)。 2.输入作业数。 3.然后运用循环结构累积作业周转时间和带权周转时间。 4.最后,作业周转时间和带权周转时间分别除以作业数即可得到平均作业周转时间和平均带权周转时间。 3.详细设计 源程序如下: #include #include using namespace std; int main() { int n,a[100],b[100]; double s[100],m[100],T=0,W=0; cout<<"请输入作业数:"<>n; cout<<"请分别输入各作业到达系统的时间:"<>b[i]; } cout<<"请分别输入各作业所运行的时间:"<>a[i];s[0]=0; s[i+1]=s[i]+a[i]; m[i+1]=(s[i+1]-b[i])/a[i]; T=T+s[i+1]-b[i]; W=W+m[i+1]; }

操作系统复习题(2)及答案

一.名词解释 抢占式进程调度进程状态系统调用中断响应线程联想存储器死锁通道地址重定位高速缓存可再入程序 抖动索引文件作业控制块目录项设备驱动程序虚存逻辑空间物理空间 二.填空题 1.现代操作系统的两个最基本的特征是(),(),()和() 2.操作系统是计算机系统中的一个(),它管理和控制计算机系统中的()3.允许多个用户以交互方式使用计算机的操作系统称为(),允许多个用户将多个作业提交给计算机集中处理的操作系统称为(),计算机系统能及时处理过程控制数据并做出响应的操作系统称为()。 4.用户与操作系统之间的接口主要分为()和()两类。 5.进程控制块的初始化工作包括(),()和()。 6.在操作系统中引入线程概念的主要目的是()。 7.程序并发执行与顺序执行时相比产生了一些新特性,分别是:(),()和()。 8.进程是一个程序对某个数据集的()。 9.如果系统有N个进程,则在等待队列中进程的个数最多可为()个。 10.在操作系统中,不可中断执行的操作称为()。 11.如果信号量的当前值为-4,则表示()。 12.在有M个进程的系统中出现死锁时,死锁进程的个数K应该满足的条

件是()。 13.不让死锁发生的策略可以分为静态和动态的两种,死锁避免属于()。 14.若使当前运行进程总是优先级最高的,应选择()进程调度算法。 15.在进程中,访问()的代码称为临界区。为保证进程()使用临界区,应在进程的临界区前设置(),在临界区后设置()。 16.在采用请求分页式存储管理的系统中,地址变换可能会因为(),(),和() 等原因而产生中断。 17.在可变分区存储管理中,分区的保护通常采用()和()两种方式。 18.在分区分配算法中,首次适应算法倾向于优先利用存中()部分的空闲分区,从而保留了()部分的大空闲区。 19.不让死锁发生的策略可以分为静态和动态的两种,死锁避免属于()。 20.若使当前运行进程总是优先级最高的,应选择()进程调度算法。 21.缓冲区由()和()组成? 22.进行设备分配时所需的数据表格主要由(),(),()和()等。 23.设备管理中引入缓冲机制的主要原因由(),()和() 24.使用位示图(20行,30列)表示空闲盘块状态。当分配一个盘块号为132号时,其在位示图中的行,列数为(),()。当释放一个盘块号为318时,其所在位示图中的行,列数位(),()。(注:行为0-――19,列为0-――29,首盘块号为1)。

进程调度算法实验报告

操作系统实验报告(二) 实验题目:进程调度算法 实验环境:C++ 实验目的:编程模拟实现几种常见的进程调度算法,通过对几组进程分别使用不同的调度算法,计算进程的平均周转时间和平均带权周转时间,比较 各种算法的性能优劣。 实验内容:编程实现如下算法: 1.先来先服务算法; 2.短进程优先算法; 3.时间片轮转调度算法。 设计分析: 程序流程图: 1.先来先服务算法 开始 初始化PCB,输入进程信息 各进程按先来先到的顺序进入就绪队列 结束 就绪队列? 运行 运行进程所需CPU时间 取消该进程 2.短进程优先算法

3.时间片轮转调度算法 实验代码: 1.先来先服务算法 #include #define n 20 typedef struct { int id; //进程名

int atime; //进程到达时间 int runtime; //进程运行时间 }fcs; void main() { int amount,i,j,diao,huan; fcs f[n]; cout<<"请输入进程个数:"<>amount; for(i=0;i>f[i].id; cin>>f[i].atime; cin>>f[i].runtime; } for(i=0;if[j+1].atime) {diao=f[j].atime; f[j].atime=f[j+1].atime; f[j+1].atime=diao; huan=f[j].id; f[j].id=f[j+1].id; f[j+1].id=huan; } } } for(i=0;i #define n 5 #define num 5 #define max 65535 typedef struct pro { int PRO_ID; int arrive_time;

操作系统课程设计报告进程调度

前言 操作系统(Operating System,简称OS)是管理和控制计算机硬件与软件资源的计算机程序,是直接运行在“裸机”上的最基本的系统软件,任何其他软件都必须在操作系统的支持下才能运行。 操作系统是用户和计算机的接口,同时也是计算机硬件和其他软件的接口。操作系统的功能包括管理计算机系统的硬件、软件及数据资源,控制程序运行,改善人机界面,为其它应用软件提供支持,让计算机系统所有资源最大限度地发挥作用,提供各种形式的用户界面,使用户有一个好的工作环境,为其它软件的开发提供必要的服务和相应的接口等。实际上,用户是不用接触操作系统的,操作系统管理着计算机硬件资源,同时按照应用程序的资源请求,分配资源,如:划分CPU时间,内存空间的开辟,调用打印机等。 操作系统的主要功能是资源管理,程序控制和人机交互等。计算机系统的资源可分为设备资源和信息资源两大类。设备资源指的是组成计算机的硬件设备,如中央处理器,主存储器,磁盘存储器,打印机,磁带存储器,显示器,键盘输入设备和鼠标等。信息资源指的是存放于计算机内的各种数据,如系统软件和应用软件等。 操作系统位于底层硬件与用户之间,是两者沟通的桥梁。用户可以通过操作系统的用户界面,输入命令。操作系统则对命令进行解释,驱动硬件设备,实现用户要求。 本次课程设计我们将对上学期所学的知识进行系统的应用,而达到巩固知识的作用

目录 1问题概述 (2) 2需求分析 (2) 3 概要设计 (2) 3.1主要功能 (2) 3.2 模块功能结构 (3) 3.3 软硬件环境 (3) 3.4数据结构设计 (3) 4 详细设计 (4) 4.1“先来先服务(FCFS)调度算法” (4) 4.2“短进程调度算法(SPF)” (7) 4.3“高响应比优先调度算法” (10) 4.4“优先级调度(非抢占式)算法” (14) 5 系统测试及调试 (16) 5.1测试 (16) 5.2调试过程中遇到的问题 (17) 6 心得体会 (18) 7 参考文献 (19) 8 附录 (20)

进程模拟调度算法课程设计

一.课程概述 1.1.设计构想 程序能够完成以下操作:创建进程:先输入进程的数目,再一次输入每个进程的进程名、运行总时间和优先级,先到达的先输入;进程调度:进程创建完成后就选择进程调度算法,并单步执行,每次执行的结果都从屏幕上输出来。 1.2.需求分析 在多道程序环境下,主存中有着多个进程,其数目往往多于处理机数目,要使这多个进程能够并发地执行,这就要求系统能按某种算法,动态地把处理机分配给就绪队列中的一个进程,使之执行。分配处理机的任务是由处理机调度程序完成的。由于处理机是最重要的计算机资源,提高处理机的利用率及改善系统必(吞吐量、响应时间),在很大程度上取决于处理机调度性能的好坏,因而,处理机调度便成为操作系统设计的中心问题之一。本次实验在VC++6.0环境下实现先来先服务调度算法,短作业优先调度算法,高优先权调度算法,时间片轮转调度算法和多级反馈队列调度算法。 1.3.理论依据 为了描述和管制进程的运行,系统为每个进程定义了一个数据结构——进程控制块PCB(Process Control Block),PCB中记录了操作系统所需的、用于描述进程的当前情况以及控制进程运行的全部信息,系统总是通过PCB对进程进行控制,亦即,系统是根据进程的PCB 而不是任何别的什么而感知进程的存在的,PCB是进程存在的惟一标志。本次课程设计用结构体Process代替PCB的功能。 1.4.课程任务 一、用C语言(或C++)编程实现操作模拟操作系统进程调度子系统的基本功能;运用多 种算法实现对进程的模拟调度。 二、通过编写程序实现进程或作业先来先服务、高优先权、按时间片轮转、短作业优先、多 级反馈队列调度算法,使学生进一步掌握进程调度的概念和算法,加深对处理机分配的理解。 三、实现用户界面的开发

操作系统的进程调度 实验报告

《计算机操作系统2》实验报告 实验一题目:操作系统的进程调度 姓名:学号:12125807 实验日期:2014.12 实验要求: 1.设计一个有n个进程工行的进程调度程序。每个进程由一个进程控制块(PCB)表示。 进程控制块通常应包含下述信息:进程名、进程优先数、进程需要运行的时间、占用CPU的时间以及进程的状态等,且可按调度算法的不同而增删。 2.调度程序应包含2~3种不同的调度算法,运行时可任意选一种,以利于各种算法的分 析比较。 3.系统应能显示或打印各进程状态和参数的变化情况,便于观察诸进程的调度过程 实验目的: 1.进程是操作系统最重要的概念之一,进程调度又是操作系统核心的主要内容。本实习要 求学生独立地用高级语言编写和调试一个简单的进程调度程序。调度算法可任意选择或自行设计。例如,简单轮转法和优先数法等。本实习可加深对于进程调度和各种调度算法的理解。 实验内容: 1.编制和调试示例给出的进程调度程序,并使其投入运行。 2.自行设计或改写一个进程调度程序,在相应机器上调试和运行该程序,其功能应该不亚 于示例。 3.直观地评测各种调度算法的性能。 示例: 1.题目 本程序可选用优先数法或简单轮转法对五个进程进行调度。每个进程处于运行R(run)、就绪W(wait)和完成F(finish)三种状态之一,并假设起始状态都是就绪状态W。为了便于处理,程序进程的运行时间以时间片为单位计算。各进程的优先数或轮转时间片数、以及进程需要运行的时间片数,均由伪随机数发生器产生。 进程控制块结构如下:

PCB 进程标识数 链指针 优先数/轮转时间片数 占用CPU时间片数 进程所需时间片数 进程状态 进程控制块链结构如下: 其中:RUN—当前运行进程指针; HEAD—进程就绪链链首指针; TAID—进程就绪链链尾指针。 2.算法与框图 (1) 优先数法。 进程就绪链按优先数大小从高到低排列,链首进程首先投入运行。每过一个时间片,运行进程所需运行的时间片数减1,说明它已运行了一个时间片,优先数也减3,理由是该进程如果在一个时间片中完成不了,优先级应该降低一级。接着比较现行进程和就绪链链首进程的优先数,如果仍是现行进程高或者相同,就让现行进程继续进行,否则,调度就绪链链首进程投入运行。原运行进程再按其优先数大小插入就绪链,且改变它们对应的进程状态,直至所有进程都运行完各自的时间片数。 (2) 简单轮转法。 进程就绪链按各进程进入的先后次序排列,进程每次占用处理机的轮转时间按其重要程度登入进程控制块中的轮转时间片数记录项(相当于优先数法的优先数记录项位置)。每过一个时间片,运行进程占用处理机的时间片数加1,然后比较占用处理机的时间片数是否与该进程的轮转时间片数相等,若相等说明已到达轮转时间,应将现运行进程排到就绪链末尾,调度链首进程占用处理机,且改变它们的进程状态,直至所有进程完成各自的时间片。(3) 程序框图如下图所示。

进程调度算法1

进程调度算法(附录)#include #include #include #include #include #include #define P_NUM 5 #define P_TIME 50 enum state { ready, execute, block, finish }; struct pcb { char name[4]; int priority; int cputime; int needtime; int count; int round; state process; pcb * next; }; pcb * get_process(); pcb * get_process() { pcb *q; pcb *t; pcb *p; int i=0; cout<<"input name and time"<>q->name; cin>>q->needtime; q->cputime=0; q->priority=P_TIME-q->needtime; q->process=ready; q->next=NULL; if (i==0){ p=q; t=q;} else{t->next=q;t=q; } i++; } //while return p; }

void display(pcb *p) { cout<<"name"<<" "<<"cputime"<<" "<<"needtime"<<" "<<"priority"<<" "<<"state"<name; cout<<" "; cout<cputime; cout<<" "; cout<needtime; cout<<" "; cout<priority; cout<<" "; switch(p->process) { case ready:cout<<"ready"<next; } } int process_finish(pcb *q) { int bl=1; while(bl&&q){ bl=bl&&q->needtime==0; q=q->next; } return bl; } void cpuexe(pcb *q) { pcb *t=q; int tp=0; while(q){ if (q->process!=finish) { q->process=ready; if(q->needtime==0){ q->process=finish; } } if(tppriority&&q->process!=finish) { tp=q->priority; t=q;

操作系统:进程调度实验报告

设计性实验报告 一、实验目的 1.在Linux下用C语言编程模拟优先级进程调度算法和时间片轮转进程调度算法。 2.为了清楚地观察每个进程的调度过程,每次调度程序应将各个进程的情况显示出来。 二、总体设计(设计原理、设计方案及流程等) 1、优先级进程调度算法 采用动态优先级进程调度算法,其基本思想是每次调度总是把处理机分配给优先级最高的进程,同时在运行过程中进程的优先级随着执行或等待的时间而降低或增加。 在该实验中每个进程用一个进程控制块( PCB)表示。进程控制块包含如下信息:进程号,进程名、优先数、需要运行时间、已用CPU时间、进程状态。进程号,名字,优先数,运行的时间,事先人为地指定。每个进程的状态可以是就绪,执行,阻塞或完成4种状态之一。 就绪进程获得 CPU后都只能运行一个时间片。用已占用CPU时间加1来表示。就绪队列中的进程在等待一个时间片后,优先级增1。如果运行一个时间片后,进程的已占用 CPU时间已达到所需要的运行时间,则撤消该进程,如果运行一个时间片后进程的已占用CPU时间还未达所需要的运行时间,也就是进程还需要继续运行,此时将进程的优先级减1,然后把它插入就绪队列等待CPU。 2、时间片轮转调度算法 采用简单时间片轮转调度算法,其基本思想是:所有就绪进程按 FCFS排成一个队列,总是把处理机分配给队首的进程,各进程占用CPU的时间片相同。如果运行进程用完它的时间片后还未完成,就把它送回到就绪队列的末尾,把处理机重新分配给队首的进程。直至所有的进程运行完毕。 三、实验步骤(包括主要步骤、代码分析等) 1.打开linux虚拟机,用vim编辑器打开代码进行修改和调整。用gcc编译器进行编译编译运行首先运行优先级算法,如图所示:

进程调度C语言实现

#include #include #include typedef struct ProcessNode{ // 进程结点的基本结构char name; // 进程名int service_time; // 服务时间 int arrive_time; // 到达时间 int priority; // 优先级 struct FCFS_time{ // 先到先服务 int finish_time; // 完成时间 int turnaround_time; // 周转时间 float weigtharound_time;// 带权周转时间 }FCFS_time; struct SJF_time{ // 短作业优先 int finish_time; int turnaround_time; float weigtharound_time; int flag; }SJF_time; struct RR_time{ // 时间片轮转的结点 int finish_time; int turnaround_time; float weigtharound_time; int flag_time;// 赋值为进程的服务时间,为0 则进程完成}RR_time; struct Pri_time{ // 优先权非抢占式 int finish_time; int turnaround_time; float weigtharound_time; }Pri_time; struct ProcessNode*next; }ProcessNode,*Linklist; void main() { int choice;

操作系统课程设计报告进程调度

前言操作系统(OperatingSystem,简称OS)是管理和控制计算机硬件与软件资源的计算机程序,是直接运行在“裸机”上的最基本的系统软件,任何其他软件都必须在操作系统的支持下才能运行。 操作系统是用户和计算机的接口,同时也是计算机硬件和其他软件的接口。操作系统的功能包括管理计算机系统的硬件、软件及数据资源,控制程序运行,改善人机界面,为其它应用软件提供支持,让计算机系统所有资源最大限度地发挥作用,提供各种形式的用户界面,使用户有一个好的工作环境,为其它软件的开发提供必要的服务和相应的接口等。实际上,用户是不用接触操作系统的,操作系统管理着计算机硬件资源,同时按照应用程序的资源请求,分配资源,如:划分CPU时间,内存空间的开辟,调用打印机等。 操作系统的主要功能是资源管理,程序控制和人机交互等。计算机系统的资源可分为设备资源和信息资源两大类。设备资源指的是组成计算机的硬件设备,如中央处理器,主存储器,磁盘存储器,打印机,磁带存储器,显示器,键盘输入设备和鼠标等。信息资源指的是存放于计算机内的各种数据,如系统软件和应用软件等。 操作系统位于底层硬件与用户之间,是两者沟通的桥梁。用户可以通过操作系统的用户界面,输入命令。操作系统则对命令进行解释,驱动硬件设备,实现用户要求。

本次课程设计我们将对上学期所学的知识进行系统的应用,而达到巩固知识的作用

目录 1问题概述.................................................................................................... 2需求分析.................................................................................................... 3概要设计.................................................................................................... 3.1主要功能................................................................................................. 3.2模块功能结构 ........................................................................................ 3.3软硬件环境............................................................................................. 3.4数据结构设计 ........................................................................................ 4详细设计.................................................................................................... 4.1“先来先服务(FCFS)调度算法” ....................................................... 4.2“短进程调度算法(SPF)”.................................................................. 4.3“高响应比优先调度算法”................................................................. 4.4“优先级调度(非抢占式)算法”.......................................................... 5系统测试及调试 ....................................................................................... 5.1测试......................................................................................................... 5.2调试过程中遇到的问题 ........................................................................ 6心得体会.................................................................................................... 7参考文献.................................................................................................... 8附录............................................................................................................

操作系统模拟进程调度算法

操作系统 ——项目文档报告 进程调度算法 专业: 班级: 指导教师: 姓名: 学号:

一、核心算法思想 1.先来先服务调度算法 先来先服务调度算法是一种最简单的调度算法,该算法既可以用于作业调度,也可用于进程调度。当在作业调度中采用该算法时,每次调度都是从后备作业队列中选择一个或多个最先进入该队列的作业,将他们调入内存,为它们分配资源、创建进程,然后放入就绪队列。在进程调度中采用FCFS算法时,则每次调度是从就绪队列中选择一个最先进入该队列的进程,为之分配处理机,使之投入运行。该进程一直运行到完成或发生某事件而阻塞后才放弃处理机。FCFS算法比较有利于长作业(进程),而不利于短作业(进程)。 2.短作业(进程)优先调度算法 短作业(进程)优先调度算法SJ(P)F,是指对短作业或短进程优先调度的算法。它们可以分别用于作业调度和进程调度。短作业优先(SJF)的调度算法是从后备队列中选择一个或若干个估计运行时间最短的作业,将它们调入内存运行。而短进程(SPF)调度算法则是从就绪队列中选出一个估计运行时间最短的进程,将处理机分配给它,使它立即执行并一直执行到完成,或发生某事件而被阻塞放弃处理机再重新调度。SJ(P)F调度算法能有效地降低作业(进程)的平均等待时间,提高系统吞吐量。该算法对长作业不利,完全未考虑作业的紧迫程度。 3.高响应比优先调度算法 在批处理系统中,短作业优先算法是一种比较好的算法,其主要不足之处是长作业的运行得不到保证。如果我们能为每个作业引人动态优先权,并使作业的优先级随着等待时间的增加而以速率a提高,则长作业在等待一定的时间后,必然有机会分配到处理机。该优先权的变化规律可描述为: 优先权=(等待时间+要求服务时间)/要求服务时间 即优先权=响应时间/要求服务时间 如果作业的等待时间相同,则要求服务的时间越短,其优先权越高,因而该算法有利于短作业。 当要球服务的时间相同时,作业的优先权决定于其等待时间,等待时间越长,优先权越高,因而它实现的是先来先服务 对于长作业,作业的优先级可以随着等待时间的增加而提高,当其等待时间足够长时,其优先级便可以升到很高,从而也可获得处理机。 4.时间片轮转算法 在时间片轮转算法中,系统将所有的就绪进程按先来先服务的原则排成一个队列,每次调度时,把CPU分配给队首进程,并令其执行一个时间片。当执行的时间片用完时,由一个计数器发出时钟中断请求,调度程序便据此信号来停止该进程的执行,并将它送往就绪队列的末尾;然后,再把处理机分配给就绪队列中新的队首进程,同时也让它执行一个时间片。这样就可以保证就绪队列中的所有进程在一给定的时间内均能获得一时间片的处理机执行时间。换言之,系统能在给定的时间内响应所有用户的请求。 二、核心算法流程图

操作系统进程调度实验报告

实验一进程调度实验 专业:XXXXX 学号:XXXXX 姓名:XXX 实验日期:20XX年XX月XX日

一、实验目的 通过对进程调度算法的模拟加深对进程概念和进程调度算法的理解。 二、实验要求 编写程序实现对5个进程的调度模拟,要求至少采用两种不同的调度算法分别进行模拟调度。 三、实验方法内容 1.算法设计思路 将每个进程抽象成一个控制块PCB,PCB用一个结构体描述。 构建一个进程调度类。将进程调度的各种算法分装在一个类中。类中存在三个容器,一个保存正在或未进入就绪队列的进程,一个保存就绪的进程,另一个保存已完成的进程。还有一个PCB实例。主要保存正在运行的进程。类中其他方法都是围绕这三个容器可以这个运行中的PCB展开。 主要用到的技术是STL中的vector以维护和保存进程容器、就绪容器、完成容器。 当程序启动时,用户可以选择不同的调度算法。然后用户从控制台输入各个进程的信息,这些信息保存到进程容器中。进程信息输入完毕后,就开始了进程调度,每调度一次判断就绪队列是否为空,若为空则系统时间加一个时间片。判断进程容器中是否有新的进程可以加入就绪队列。 2.算法流程图 主程序的框架: 开始 选择调度算法void FCFS();//先来先服务 void SJF();//最短进程优先调度void RR();//简单时间片轮转void PD();//最高优先数优先 输入进程信息 将输入容器中以满足进入条件的进程调入就绪队列 判断就绪容器和输入容器是否为空!processScheduler.m_WaitQueue.empty()|| !processScheduler.m_ProcessQueue.empt() void ProcessQueueProcess(); //查看当前时间下,有无进程加 入。若有则把该进程调入就绪队列 void PCBInput();//输入进程信息 Y 打印各进程信息 进行统计计算周转 时间等 结束void PCBDisplay(); //打印当前状况下。就绪队列、完成队列、运行中的进程信息 void SchedulerStatistics(); //调度统计,计算周转时间等 按照选择的算法开 始选择就绪队列的 进程开始执行 void ProcessSelect(); //若当前就绪队列不为空则根 据选择的调度算法开始调度,否则,系统时间加一个时间片.以等待新的进程到

时间片轮转算法和优先级调度算法 C语言模拟实现

一、目得与要求?进程调度就是处理机管理得核心内容。本实验要求用高级语言编写模拟进程调度程序,以便加深理解有关进程控制快、进程队列等概念,并体会与了解优先数算法与时间片轮转算法得具体实施办法。 二、实验内容 1、设计进程控制块PCB得结构,通常应包括如下信息: 进程名、进程优先数(或轮转时间片数)、进程已占用得CPU时间、进程到完成还需要得时间、进程得状态、当前队列指针等。 2、编写两种调度算法程序: 优先数调度算法程序?循环轮转调度算法程序 3、按要求输出结果。?三、提示与说明 分别用两种调度算法对伍个进程进行调度。每个进程可有三种状态;执行状态(RUN)、就绪状态(READY,包括等待状态)与完成状态(FINISH),并假定初始状态为就绪状态。?(一)进程控制块结构如下:?NAME——进程标示符PRIO/ROUND——进程优先数/进程每次轮转得时间片数(设为常数2)? CPUTIME——进程累计占用CPU得时间片数? NEEDTIME——进程到完成还需要得时间片数 STATE——进程状态?NEXT——链指针?注: 1、为了便于处理,程序中进程得得运行时间以时间片为单位进行计算; 2、各进程得优先数或轮转时间片数,以及进程运行时间片数得初值,均由用户在程序运行时给定。?(二)进程得就绪态与等待态均为链表结构,共有四个指针如下:? RUN——当前运行进程指针 READY——就需队列头指针 TAIL——就需队列尾指针 FINISH——完成队列头指针 1、在优先数算法中,进程优先数得初值设为: (三)程序说明? 50-NEEDTIME?每执行一次,优先数减1,CPU时间片数加1,进程还需要得时间片数减1。 在轮转法中,采用固定时间片单位(两个时间片为一个单位),进程每轮转一次,CP

相关主题