当前位置:文档之家› 操作系统-先来先服务,短作业优先,优先级,响应比调度

操作系统-先来先服务,短作业优先,优先级,响应比调度

操作系统-先来先服务,短作业优先,优先级,响应比调度
操作系统-先来先服务,短作业优先,优先级,响应比调度

#include

using namespace std;

#define MAX 10

struct task_struct

{

char name[10]; /*进程名称*/

int number; /*进程编号*/

float come_time; /*到达时间*/

float run_begin_time; /*开始运行时间*/

float run_time; /*运行时间*/

float run_end_time; /*运行结束时间*/

int priority; /*优先级*/

int order; /*运行次序*/

int run_flag; /*调度标志*/

}tasks[MAX];

int counter; /*实际进程个数*/

int fcfs(); /*先来先服务*/

int ps(); /*优先级调度*/

int sjf(); /*短作业优先*/

int hrrf(); /*响应比高优先*/

int pinput(); /*进程参数输入*/

int poutput(); /*调度结果输出*/

void main(){

int option;

pinput();

while(option!=0){

printf("★☆◇-----------------------------------◇☆★\n");

printf("★请选择调度算法(0~4):★\n");

printf("☆◆☆\n");

printf("★ 1.先来先服务\n");

printf("≯***************************************☆\n");

printf("★ 2.优先级调度(抢占式)\n");

printf("≯***************************************☆\n");

printf("★ 3.短作业优先\n");

printf("≯***************************************☆\n");

printf("★ 4.响应比高优先(非抢占式)\n");

printf("≯***************************************☆\n");

printf("★ 5.重新输入数据\n");

printf("≯***************************************☆\n");

printf("★0.退出\n");

printf("≯***************************************☆\n");

printf("★请选择:");

scanf("%d",&option);

printf("☆-------------------------------☆\n");

printf("/n");

switch(option)

{

case 0:

printf("☆--------------------------☆\n");

printf("★运行结束★。\n");

break;

case 1:

printf("☆--------------------------☆\n");

printf("★对进程按先来先服务调度。★\n\n");

fcfs();

poutput();

break;

case 2:

printf("☆--------------------------☆\n");

printf("★对进程按优先级调度。★\n\n");

ps();

poutput();

break;

case 3:

printf("☆--------------------------☆\n");

printf("★对进程按短作业优先调度。★\n\n");

sjf();

poutput();

break;

case 4:

printf("☆--------------------------☆\n");

printf("★对进程按响应比高优先调度。★\n\n");

hrrf();

poutput();

break;

case 5:

printf("☆--------------------------☆\n");

printf("★重新输入数据。★\n\n");

pinput();

break;

}

}

}

int fcfs() /*先来先服务*/

{

float time_temp=0;

int i;

int number_schedul;

time_temp=tasks[0].come_time;

for(i=0;i

{

tasks[i].run_begin_time=time_temp;

tasks[i].run_end_time=tasks[i].run_begin_time+tasks[i].run_time;

tasks[i].run_flag=1;

time_temp=tasks[i].run_end_time;

number_schedul=i;

tasks[number_schedul].order=i+1;}

return 0;

}

int ps()/*优先级调度*/

{

float temp_time=0;

int i=0,j;

int number_schedul,temp_counter;

int max_priority;

max_priority=tasks[i].priority;

j=1;

while((j

{

if(tasks[j].priority>tasks[i].priority)

{

max_priority=tasks[j].priority;

i=j;

}

j++;

}

/*查找第一个被调度的进程*/

/*对第一个被调度的进程求相应的参数*/

number_schedul=i;

tasks[number_schedul].run_begin_time=tasks[number_schedul].come_time;

tasks[number_schedul].run_end_time=tasks[number_schedul].run_begin_time+tasks[number_s chedul].run_time;

tasks[number_schedul].run_flag=1;

temp_time=tasks[number_schedul].run_end_time;

tasks[number_schedul].order=1;

temp_counter=1;

while (temp_counter

{

max_priority=0;

for(j=0;j

{

if((tasks[j].come_time<=temp_time)&&(!tasks[j].run_flag))

if (tasks[j].priority>max_priority)

{

max_priority=tasks[j].priority;

number_schedul=j;

}

}

/*查找下一个被调度的进程*/

/*对找到的下一个被调度的进程求相应的参数*/

tasks[number_schedul].run_begin_time=temp_time;

tasks[number_schedul].run_end_time=tasks[number_schedul].run_begin_time+tasks[number_s chedul].run_time;

tasks[number_schedul].run_flag=1;

temp_time=tasks[number_schedul].run_end_time;

temp_counter++;

tasks[number_schedul].order=temp_counter;

}

return 0;

}

int sjf() /*短作业优先*/

{

float temp_time=0;

int i=0,j;

int number_schedul,temp_counter;

float run_time;

run_time=tasks[i].run_time;

j=1;

while ((j

{

if (tasks[j].run_time

{

run_time=tasks[j].run_time;

i=j;

}

j++;

}

/*查找第一个被调度的进程*/

/*对第一个被调度的进程求相应的参数*/

number_schedul=i;

tasks[number_schedul].run_begin_time=tasks[number_schedul].come_time;

tasks[number_schedul].run_end_time=tasks[number_schedul].run_begin_time+tasks[number_s

chedul].run_time;

tasks[number_schedul].run_flag=1;

temp_time=tasks[number_schedul].run_end_time;

tasks[number_schedul].order=1;

temp_counter=1;

while (temp_counter

{

for(j=0;j

{

if((tasks[j].come_time<=temp_time)&&(!tasks[j].run_flag))

{

run_time=tasks[j].run_time;number_schedul=j;

break;

}

}

for(j=0;j

{

if((tasks[j].come_time<=temp_time)&&(!tasks[j].run_flag))

if(tasks[j].run_time

{

run_time=tasks[j].run_time;

number_schedul=j;

}

}

/*查找下一个被调度的进程*/

/*对找到的下一个被调度的进程求相应的参数*/

tasks[number_schedul].run_begin_time=temp_time;

tasks[number_schedul].run_end_time=tasks[number_schedul].run_begin_time+tasks[number_s chedul].run_time;

tasks[number_schedul].run_flag=1;

temp_time=tasks[number_schedul].run_end_time;

temp_counter++;

tasks[number_schedul].order=temp_counter;

}

return 0;

}

int hrrf() /*响应比高优先*/

{

int j,number_schedul,temp_counter;/*优先权=(等待时间+运行时间)/运行时间*/

float temp_time,respond_rate,max_respond_rate;

/*第一个进程被调度*/

tasks[0].run_begin_time=tasks[0].come_time;

tasks[0].run_end_time=tasks[0].run_begin_time+tasks[0].run_time;

temp_time=tasks[0].run_end_time;

tasks[0].run_flag=1;

tasks[0].order=1;

temp_counter=1;

/*调度其他进程*/

while(temp_counter

{

max_respond_rate=-1;

for(j=1;j

{

if((tasks[j].come_time<=temp_time)&&(tasks[j].run_flag)==0)

{

respond_rate=(temp_time-tasks[j].come_time)/tasks[j].run_time;

if (respond_rate>max_respond_rate)

{

max_respond_rate=respond_rate;

number_schedul=j;

}

}

} /*找响应比高的进程*/

tasks[number_schedul].run_begin_time=temp_time;

tasks[number_schedul].run_end_time=tasks[number_schedul].run_begin_time+tasks[number_s chedul].run_time;

temp_time=tasks[number_schedul].run_end_time;

tasks[number_schedul].run_flag=1;

temp_counter+=1;

tasks[number_schedul].order=temp_counter;

}

return 0;

}

int pinput() /*进程参数输入*/

{

int i;

printf("★请输入进程数:\n");

scanf("%d",&counter);

for(i=0;i

{

printf("/n");

printf("★☆--------------------------☆★\n");

printf("★请输入进程信息:%d th :\n",i+1);

printf("☆=-=-=-=-=-=-=-=-=-=-=-=☆\n");

printf("★请输入进程名:");

scanf("%s",tasks[i].name);

printf("☆=-=-=-=-=-=-=-=-=-=-=-=☆\n");

printf("★请输入进程编号:");

scanf("%d",&tasks[i].number);

printf("☆=-=-=-=-=-=-=-=-=-=-=-=☆\n");

printf("★请输入到达时间:");

scanf("%f",&tasks[i].come_time);

printf("☆=-=-=-=-=-=-=-=-=-=-=-=☆\n");

printf("★请输入运行时间:");

scanf("%f",&tasks[i].run_time);

printf("☆=-=-=-=-=-=-=-=-=-=-=-=☆\n");

printf("★请输入优先级:");

scanf("%d",&tasks[i].priority);

printf("☆=-=-=-=-=-=-=-=-=-=-=-=☆\n");

tasks[i].run_begin_time=0;

tasks[i].run_end_time=0;

tasks[i].order=0;

tasks[i].run_flag=0; }

return 0;

}

int poutput() /*调度结果输出*/

{

int i;

float turn_round_time=0,f1,w=0;

printf("/n");

printf("☆-------------------------------------------------------☆\n");

printf(" 进程名,进程号,到达时间,运行时间,开始时间,结束时间,优先级\n");

for(i=0;i

f1=tasks[i].run_end_time-tasks[i].come_time;

turn_round_time+=f1;

w+=(f1/tasks[i].run_time);

printf(" %s , %d , %5.3f , %5.3f , %5.3f , %5.3f , %d\n",tasks[i].name,tasks[i]. number,tasks[i].come_time,tasks[i].run_time,tasks[i].run_begin_time,tasks[i].run_end_time,tasks [i].priority);

printf("☆-------------------------------------------------------☆\n");

}

printf("平均作业周转时间=%5.2f\n",turn_round_time/counter);

printf("平均带权作业周转时间=%5.2f\n",w/counter);

printf("☆--------------------------☆\n");

printf("/n");

return 0;

}

操作系统期末试卷(含答案)

操作系统复习题1 一、判断题 1.分时系统中,时间片设置得越小,则平均响应时间越短。() 2.多个进程可以对应于同一个程序,且一个进程也可能会执行多个程序。() 3.一个进程的状态发生变化总会引起其他一些进程的状态发生变化。() 4.在引入线程的OS中,线程是资源分配和调度的基本单位。() 5.信号量的初值不能为负数。() 6.最佳适应算法比首次适应算法具有更好的内存利用率。() 7.为提高对换空间的利用率,一般对其使用离散的分配方式。() 8.设备独立性是指系统具有使用不同设备的能力。() 9.隐式链接结构可以提高文件存储空间的利用率,但不适合文件的随即存取。() 10.访问控制矩阵比访问控制表更节约空间。() 二、选择题 1.在设计分时操作系统时,首先要考虑的是(A);在设计实时操作系统时,首先要考虑的是(B);在设计批处理系统时,首先要考虑的是(C)。 A,B,C :(1)灵活性和适应性;(2)交互性和响应时间;(3)周转时间和系统吞吐量;(4)实时性和可靠性。 2.对一个正在执行的进程:如果因时间片完而被暂停执行,此时它应从执行状态转变为(D)状态;如果由于终端用户的请求而暂停下来,则它的状态应转变为(E)状态;如果由于得不到所申请的资源而暂停时下来,则它的状态应转变为(F)状态。D,E,F:(1);静止阻塞(2);活动阻塞(3);静止就绪(4);活动就绪(5)执行。 3.我们如果为每一个作业只建立一个进程,则为了照顾短作业用户,应采用(G);为照顾紧急作业用户,应采用(H);为能实现人机交互,应采用(I);而能使短作业、长作业和交互作业用户满意时,应采用(J)。 G,H,I,J:(1);FCFS调度算法(2);短作业优先调度算法;(3)时间片轮转算法;(4)多级反馈队列调度算法;(5)基于优先权的剥夺调度算法。 4.由固定分区发展为分页存储管理方式的主要推动力是(K);由分页系统发展为分段系统,进而发展为段页式系统的主要动力分别是(L)和(M)。 K,L,M:(1)提高内存利用率;(2)提高系统吞吐量;(3)满足用户需要;(4)更好地满足多道程序进行的需要;(5)既满足用户需求,又提高内存利用率。 5.在存储管理中,不会产生内部碎片的存储管理方式是(N);支持虚拟存储器,但不能以自然的方式提供存储器的共享和存取保护机制的存储管理方式是(O)。 N:(1)分页式存储管理;(2)分段式存储管理;(3)固定分区式存储管理;(4)段页式存储管理。 O:(1)段页式存储管理;(2)请求分区页式存储管理;(3)请求分段式存储管理;(4)可变分区存储管理;(5)固定分区存储管理;(6)单一连续分区式存储管理。 6.磁盘调度主要是为了优化(P),下列算法中能避免磁盘粘着的现象的是(Q)。P:(1)寻道时间;(2)旋转延迟时间;(3)传输时间。 Q:(1)SSTF;(2)FCFS;(3)SCAN;(4)CSCAN;(5)FSCAN。 7.文件系统中,目录管理最基本的功能是(R),位示图的主要功能是(S),FAT表的主要功能是(T)。 R,S,T:(1)实现按名存取;(2)提高文件存储空间利用率;(3)管理文件存储器的空闲空间;(4)指出分配给文件的盘块(首个盘块除外)的地址;(5)管理文件存储器的空闲空间,并指出分配给文件的盘块(首个盘块除外)的地址。8.文件系统采用多级目录结构,可以(U)和(V)。 U,V:(1)缩短访问文件存储器时间;(2)节省主存空间;(3)解决不同用户文件的命名冲突;(4)方便用户读写文件;(5)提高检索目录的速度。 9.计算机系统中信息资源的安全包括(W)、(X)和(Y)三个方面,其中程序被删除属于(W)方面的威胁,数据被非法截取属于(X)方面的威胁,消息被更改属于(Y)方面的威胁。W,X,Y:(1)保密性;(2)完整性;(3)可用性;(4)方便性。 三、填空题 1.操作系统最基本的特征是(1)和(2),最主要的任务是(3)。 2.引入进程的主要目的是(4),进程存在的唯一标志是(5)。 3.(6)是指通过破坏死锁产生的必要条件来防止死锁的发生。引起死锁的四个必要条件中,(7)是不应该被破坏的,但对某些特殊的资源(如打印机),该条可通过(8)来破坏;而其他能被破坏的三个必要条件分别是(9)、(10)和(11)。 4.虚拟存储器管理的基础是(12)原理,在请求分页管理方式中,页表中的状态位用来只是对应页(13)修改位用来只是对应页(14),引用位则是供(15)使用;而在请求分段系统还增加了增补位,它用来指示(16)。 5.设备驱动程序是(17)与(18)之间的通信程序如果系统中有3台相同的单显和2台相同的彩显则必须为它们配置(19)种设备驱动程序 6.廉价磁盘冗余阵列可组成一个大容量磁盘系统,它利用(20)技术来提高磁盘系统的存取进度,而利用(21)技术来增加磁盘系统的可靠性 7.包过滤防火墙工作在(22)层,采用代理服务技术的防火墙则工作在(23)层 文件系统对文件存储空间采用(23)分配方式,它通过(24)来管理空闲的文件存储空间。 四、问答题 1.假设某多道程序设计系统中有供用户使用的内存100k,打印机1台。系统采用可变分区管理内存:对打印机采用静态分配,并假设输入输出操作的时间忽略不计:采用最短剩余时间优先的进程调度算法,进程剩余执行时间相同时采用先来先服务算法;进程调度时机在执行进程结束时或有新进程到达时。现有一进程序列如下: 假设系统优先分配内存的低地址区域,且不需移动已在主存中的进程,请: (1)给出进度调度算法选中进程的次序,并说明理由。 (2)全部进程执行结束所用的时间是多少 2.请用信号量解决以下的过独木桥问题:同一方向的行人可连续过桥,当某一方向的行人必须等待:另一方向的行人必须等待:当某一方向无人过桥是,另一方向的行人可以过桥。 3.提高内存利用率的途径有哪些 4.何谓脱机输入/输出技术 5. 将目录文件当作一般数据文件来处理有什么优缺点 操作系统复习题1答案 一、判断题 1、错 2、对 3、错 4、对 5、对 6、错 7、错 8、错 9、对10、错 二、选择题 1、A :(2);B:(4);C:(3)。 2、D:(4);E:(3);F:(2)。 3、G:(2);H:(5);I:(3);J:(4)。 4、K:(1);L:(3);M:(5)。 5、N:(2);O:(2)。 6、P:(1)寻道时间;Q:(5)。 7、R:(1);S:(3);T:(5)。8、U:(3);V:(5)。9、W:(3);X:(1);Y:(2)。 三、填空题 (1)并发;(2)资源共享;(3)管理资源;(4)使程序能够正确地并发执行;(5)进程控制快PCB;(6)预防死锁;(7)互斥条件;(8)SPOOLing技术;(9)

第三版操作系统第3章习题

操作系统第三章总复习题 一、单选题 1、进程调度又称低级调度,其主要功能是( D )。 A.选择一个作业调入内存B.选择一个主存中的进程调出到外存 C.选择一个外存中的进程调入到主存D.将一个就绪的进程投入到运行 2、若进程P 一旦被唤醒就能够投入运行,系统可能为( D )。 A.分时系统,进程P 的优先级最高 B.抢占调度方式,就绪队列上的所有进程的优先级皆比P 的低 C.就绪队列为空队列 D.抢占调度方式,P 的优先级高于当期运行的进程。 3、一个进程P 被唤醒后,( D )。 A.P 就占有了CPU。B.P 的PCB 被移到就绪队列的队首。 C.P 的优先级肯定最高D.P 的状态变成就绪 4、若当前运行进程()后,系统将会执行进程调度原语。 A 执行了一个转移指令 B 要求增加主存空间,经系统调用银行家算法进行测算认为是安全的。 C 执行了一条I/O 指令要求输入数据。 D 执行程序期间发生了I/O 完成中断。 5、当系统中()时,系统将不会执行进程调度原语。 A.一个新进程被创建B.当前进程执行了P 操作。C.在非抢占调度中,进程A 正在运行而进程B 恰好被唤醒。D.分时系统中时间片用完。 6、在分时系统中,若当期运行的进程连续获得了两个时间片,原因可能是()。 A 该进程的优先级最高 B 就绪队列为空 C 该进程最早进入就绪队列 D 该进程是一个短进程 7、实时系统中采用的调度算法可以有如下几种: 1、非抢占优先权调度算法 2、立即抢占优先权调度算法 3、时间片轮转调度算法 4、基于时钟中断抢占的优先权调度算法 按实时要求的严格程度由低到高的顺序()。 A 1-3-2-4 B 3-1-4-2 C 3-1-2-4 D 1-3-4-2 8、三种主要类型的OS 中都必须配置的调度()。 A 作业调度 B 中级调度 C 低级调度 D I/O 调度 9、设系统中n 个进程并发,共同竞争资源X,且每个进程都需要m 个X 资源,为使该系统不会发生死锁,资源X 最少要有( C )个。 A m*n+1 B n*m+n C n*m+1-n D 无法预计 10、死锁的预防方法中,不太可能的一种方法使()。

(售后服务)操作系统编程进程或作业先来先服务高优先权按时间片轮转调度算法

(售后服务)操作系统编程进程或作业先来先服务高优先权按时间片轮转调度 算法

湖南农业大学科学技术师范学院 学生实验报告

(高优先权流程图) (按时间片轮转调度) 程序说明及实现: 1)先来先服务调度算法: 高响应比优先实现进程调度.(用C语言实现), 2)优先级调度程序: 该程序由主程序、构造队列子程序、打印子程序、运行子程序构成。 3)时间片轮转法程序: 于此程序中由于程序比较小,未进行分模块设计。直接采用单壹模块。 1先来先服务 #include floatt,d;/*定义俩个全局变量*/ struct/*定义壹个结构体数组,包括进程的信息*/ { intid; floatArriveTime; floatRequestTime; floatStartTime; floatEndTime; floatRunTime; floatDQRunTime; intStatus; }arrayT ask[4];/*定义初始化的结构体数组*/ GetTask()/*给结构体数组赋值,输入到达,服务时间*/ {inti; floata; for(i=0;i<4;i++) {arrayT ask[i].id=i+1; printf("inputthenumber"); printf("inputthetheArriveTimeofarrayT ask[%d]:",i);/*用户输入进程的时间,初始为零*/ scanf("%f",&a); arrayT ask[i].ArriveTime=a; printf("inputtheRequestTimeofarrayT ask[%d]:",i); scanf("%f",&a); arrayT ask[i].RequestTime=a; arrayT ask[i].StartTime=0; arrayT ask[i].EndTime=0; arrayT ask[i].RunTime=0;

N套_操作系统期末试卷(含答案)

一、选择题 1、在现代操作系统中引入了(),从而使并发和共享成为可能。 A.单道程序 B. 磁盘 C. 对象 D.多道程序 2、( )操作系统允许在一台主机上同时连接多台终端,多个用户可以通过各自的终端同时交互地使用计算机。 A.网络 B.分布式 C.分时 D.实时 3、从用户的观点看,操作系统是()。 A. 用户与计算机硬件之间的接口 B.控制和管理计算机资源的软件 C. 合理组织计算机工作流程的软件 D.计算机资源的的管理者 4、当CPU处于管态时,它可以执行的指令是()。 A. 计算机系统中的全部指令 B. 仅限于非特权指令 C. 仅限于访管指令 D. 仅限于特权指令 5、用户在程序中试图读取某文件的第100个逻辑块时,使用操作系统提供的()接口。 A. 系统调用 B.图形用户接口 C.原语 D.键盘命令 6、下列几种关于进程的叙述,()最不符合操作系统对进程的理解 A.进程是在多程序并行环境中的完整的程序。 B.进程可以由程序、数据和进程控制块描述。 C.线程是一种特殊的进程。 D.进程是程序在一个数据集合上运行的过程,它是系统进行资源分配和调度的一个独立单位。 7、当一个进程处于()状态时,称其为等待(或阻塞)状态。 A. 它正等待中央处理机 B. 它正等待合作进程的一个消息 C. 它正等待分给它一个时间片 D. 它正等待进入内存 8、一个进程释放一种资源将有可能导致一个或几个进程()。 A.由就绪变运行 B.由运行变就绪 C.由阻塞变运行 D.由阻塞变就绪 9、下面关于线程的叙述中,正确的是()。 A.不论是系统支持线程还是用户级线程,其切换都需要内核的支持。 B.线程是资源的分配单位,进程是调度和分配的单位。 C.不管系统中是否有线程,进程都是拥有资源的独立单位。 D.在引入线程的系统中,进程仍是资源分配和调度分派的基本单位。 10、设有3个作业,它们同时到达,运行时间分别为T1、T2和T3,且T1≤T2≤T3,若它们在单处理机系统中按单道运行,采用短作业优先调度算法,则平均周转时间为()。 A. T1+T2+T3 B. (T1+T2+T3)/3 C. T1+T2/3+2*T3/3 3+2*T2/3+T1 11、在下面的I/O控制方式中,需要CPU干预最少的方式是()。 A.程序I/O方式 B.中断驱动I/O控制方式 C.直接存储器访问DMA控制方式D.I/O通道控制方式 12、有m个进程共享同一临界资源,若使用信号量机制实现对一临界资源的互斥访问,则信号量的变

操作系统光盘习题答案

第四章 必做题一: 选择题: 1.1.操作系统的主要性能参数:﹎﹎A﹎﹎指的是单位时间内系统处理的作业量。 A: (1)周转时间;(2)处理时间;(3)消逝时间;(4)利用率;(5)生产率;(6)吞吐量。 1.2.在所学的调度算法中,能兼顾作业等待时间和作业执行时间调度算法是﹎﹎A﹎﹎。A: (1)FCFS调度算法;(2)短作业优先调度算法;(3)时间片轮转法;(4)多级反馈队列调度算法;(5)高响应比优先算法;(6)基于优先权的剥夺调度算法。 1.3.在所学的调度算法中,为实现人机交互作用应采用调度算法是﹎﹎A﹎﹎。 A:(1)FCFS调度算法;(2)短作业优先调度算法;(3)时间片轮转法;(4)多级反馈队列调度算法;(5)高响应比优先算法;(6)基于优先权的剥夺调度算法。 1.4. 在采用非抢占式优先权进程调度算法的系统中,正在运行进程的优先权是﹎﹎A﹎﹎。 A: (1) 系统中优先权最高的进程 (2)比就绪队列中进程优先权高的进程 (3) 比就绪队列中进程优先权不一定高的进程 1.5. 时间片轮转算法中时间片足够大时,该算法退化为﹎﹎A﹎﹎。 A:(1)时间片轮转算法;(2)先进先出调度算法;(3)高响应比优先算法;(4)短作业优先算法。 1.6. 优先权调度算法中优先权反比运行时间时,该算法转变为﹎﹎A﹎﹎。 A:(1)时间片轮转算法;(2)先进先出调度算法;(3)高响应比优先算法;(4)短作业优先算法。 1.7.作业调度是按某种算法从磁盘输入井的﹎﹎A﹎﹎中选一个作业装入主存运行。 A:(1)就绪队列(2)等待队列(3)作业后备队列(4)提交队列 1.8.在分时系统中除了设置了进程调度外,通常还设置了﹎﹎A﹎﹎。 A,B,C:⑴剥夺调度;⑵作业调度;⑶进程调度;⑷中级调度;(5)处理机调度。 1.9.作业调度与进程调度的主要区别是:﹎﹎A﹎﹎ A:(1)作业调度比进程调度频繁(2)两种调度的算法完全不同 (3)两种调度的性能指标完全不同(4)进程调度比作业调度频繁 1.10. 因争用资源产生死锁的必要条件是互斥、循环等待、不可抢占和﹎﹎A﹎﹎。 A: (1)请求与解释 (2)释放与保持 (3)释放与阻塞 (4)保持与等待 答案: 1.1. A—(6) 1. 2. A—(5) 1.3. A—(3) 1.4. A—(3) 1.5. A—(2) 1.6. A—(4) 1.7. A—(3) 1.8. A—(4) 1.9. A—(4) 1.10. A—(4) 判断题 1.计算型作业的优先权,应高于I/O型作业的优先权。 2.资源要求多的作业,其优先权应高于资源要求少的作业。 3.可以通过破坏产生死锁的四个必要条件之一或其中几个的方法,来预防发生死锁。 4. 用银行家算法避免死锁时,检测到进程已占用的资源数与本次申请的资源数之和不超过对资源的最大需求量,且现存资源能满足本次申请量,但不能满足尚需的最大需求量时才分

操作系统实验报告-作业调度

作业调度 一、实验目的 1、对作业调度的相关内容作进一步的理解。 2、明白作业调度的主要任务。 3、通过编程掌握作业调度的主要算法。 二、实验内容及要求 1、对于给定的一组作业, 给出其到达时间和运行时间,例如下表所示: 2、分别用先来先服务算法、短作业优先和响应比高者优先三种算法给出作业的调度顺序。 3、计算每一种算法的平均周转时间及平均带权周转时间并比较不同算法的优劣。

测试数据 workA={'作业名':'A','到达时间':0,'服务时间':6} workB={'作业名':'B','到达时间':2,'服务时间':50} workC={'作业名':'C','到达时间':5,'服务时间':20} workD={'作业名':'D','到达时间':5,'服务时间':10} workE={'作业名':'E','到达时间':12,'服务时间':40} workF={'作业名':'F','到达时间':15,'服务时间':8} 运行结果 先来先服务算法 调度顺序:['A', 'B', 'C', 'D', 'E', 'F'] 周转时间: 带权周转时间:

短作业优先算法 调度顺序:['A', 'D', 'F', 'C', 'E', 'B'] 周转时间: 带权周转时间:1. 响应比高者优先算法 调度顺序:['A', 'D', 'F', 'E', 'C', 'B'] 周转时间: 带权周转时间: 五、代码 #encoding=gbk workA={'作业名':'A','到达时间':0,'服务时间':6,'结束时间':0,'周转时间':0,'带权周转时间':0} workB={'作业名':'B','到达时间':2,'服务时间':50} workC={'作业名':'C','到达时间':5,'服务时间':20} workD={'作业名':'D','到达时间':5,'服务时间':10} workE={'作业名':'E','到达时间':12,'服务时间':40} workF={'作业名':'F','到达时间':15,'服务时间':8} list1=[workB,workA,workC,workD,workE,workF] list2=[workB,workA,workC,workD,workE,workF] list3=[workB,workA,workC,workD,workE,workF] #先来先服务算法 def fcfs(list): resultlist = sorted(list, key=lambda s: s['到达时间']) return resultlist #短作业优先算法 def sjf(list): time=0 resultlist=[] for work1 in list: time+=work1['服务时间'] listdd=[] ctime=0 for i in range(time): for work2 in list: if work2['到达时间']<=ctime: (work2) if len(listdd)!=0: li = sorted(listdd, key=lambda s: s['服务时间']) (li[0]) (li[0]) ctime+=li[0]['服务时间'] listdd=[]

操作系统期末考试试题及答案精选

四、解答题(共20分) 1.什么是操作系统它的主要功能是什么(共8分) 操作系统是控制和管理计算机系统内各种硬件和软件资源、有效地组织多道程序运行的系统软件(或程序集合),是用户与计算机之间的接口 操作系统的主要功能包括:存储器管理、处理机管理、设备管理、文件管理以及用户接口管理。 2.操作系统中存储器管理的主要功能是什么什么叫虚拟存储器(共8分) 存储器管理的主要功能是:内存分配,地址映射,内存保护,内存扩充。(4分) 虚拟存储器是用户能作为可编址内存对待的存储空间,在这种计算机系统中虚地址被映象成实地址。或者:简单地说,虚拟存储器是由操作系统提供的一个假想的特大存储器。(4分) 3.什么是文件的逻辑组织和物理组织(共4分) 文件的逻辑组织——用户对文件的观察和使用是从自身处理文件中数据时 采用的组织方式来看待文件组织形式。这种从用户观点出发所见到的文件组织形式称为文件的逻辑组织。 文件的物理组织——文件在存储设备上的存储组织形式称为文件的物理组织。 三、填空题(每空2分,共30分) 1.通常,进程实体是由程序段,相关的数据段和PCB 这三部分组成,其中PCB 是进程存在的惟一标志。 2.从用户的源程序进入系统到相应程序在机器上运行,所经历的主要处理阶段有编辑阶段,编译阶段,连接阶段,装入阶段和运行阶段。 3.在UNIX系统中,文件的类型主要包括普通文件,目录文件,特别文件。 4.虚拟设备是通过 SPOOLing 技术把独占设备变成能为若干用户共享的设备。 5. Windows NT是采用微内核结构的操作系统,它的进程的功能发

生了变化,它只是资源分配的单位,不是调度运行的单位,后者的功能由线程完成。 五、应用题(共20分) 5.进程所请求的一次打印输出结束后,将使进程状态从( D) A、运行态变为就绪态 B、运行态变为等待态 C、就绪态变为运行态 D、等待态变为就绪态 6.采用动态重定位方式装入的作业,在执行中允许(C )将其移动。 A、用户有条件地 B、用户无条件地 C、操作系统有条件地 D、操作系统无条件地 7.分页式存储管理中,地址转换工作是由(A )完成的。 A、硬件 B、地址转换程序 C、用户程序 D、装入程序 9.对记录式文件,操作系统为用户存取文件信息的最小单位是(C )。 、文件 D 、记录 C 、数据项 B 、字符A. 10.为了提高设备分配的灵活性,用户申请设备时应指定(A )号。 A、设备类相对 B、设备类绝对 C、相对 D、绝对 11.通常把通道程序的执行情况记录在(D )中。 A、PSW B、PCB C、CAW D、CSW 14.共享变量是指(D )访问的变量。 A、只能被系统进程 B、只能被多个进程互斥 C、只能被用户进程 D、可被多个进程 15.临界区是指并发进程中访问共享变量的( D)段。 A、管理信息 B、信息存储 C、数据 D、程序 16.若系统中有五台绘图仪,有多个进程均需要使用两台,规定每个进程一次仅允许申请一台,则至多允许( D)个进程参于竞争,而不会发生死锁。 A、5 B、2 C、3 D、4 17.产生系统死锁的原因可能是由于(C )。 A、进程释放资源 B、一个进程进入死循环 C、多个进程竞争,资源出现了循环等待 D、多个进程竞争共享型设备 21.引入多道程序设计的主要目的在于(BD ) A、提高实时响应速度 B、充分利用处理机,减少处理机空闲时间 、有利于代码共享C.

操作系统-计算题

四、计算题 1.有以下三个作业,分别采用先来先服务和短作业优先作业调度算法。试问它们的平均周转时间各是什么?是否还可以给出一种更好的调度算法,使其平均周转时间优于这两种调度算法? 解:(1)采用先来先服务作业调度算法时的实施过程如下。 这时,作业的调度顺序是1→2→3。其平均周转时间为:(8 + 11.6 + 12)/ 3 = 10.53 (2)采用短作业优先作业调度算法时的实施过程如下。

这里要注意,在作业1运行完毕进行作业调度时,作业2和3都已经到达。由于是实行短作业优先作业调度算法,因此先调度作业3运行,最后调度作业2运行。所以,这时的作业调度顺序是1→3→2。其平均周转时间为:(8 + 8 + 12.6)/ 3 = 9.53 (3)还可以有更好的作业调度算法,使其平均周转时间优于这两种调度算法。例如,如果知道在作业1后面会来两个短作业,那么作业1到达后,先不投入运行。而是等所有作业到齐后,再按照短作业优先作业调度算法进行调度,具体实施过程如下。 这时的作业调度顺序是3→2→1。其平均周转时间为:(1 + 5.6 + 14)/ 3 = 6.87 2.有一组作业,它们的到达时间和所需CPU时间如下所示,分别采用先来先服务和短作业优先作业调度算法,给出它们的调度顺序、作业周转时间以及平均周转时间。 解:(1)采用先来先服务作业调度算法时的实施过程如下:

这时,作业的调度顺序是1→2→3→4,其平均周转时间为:(70 + 60 + 60 + 45)/ 4 = 58.75 (2)采用短作业优先作业调度算法时的实施过程如下: 这时,作业的调度顺序是1→4→3→2,其平均周转时间为:(70 + 5 + 35 + 75)/ 4 = 46.25 三、简答题 1.对临界区的管理应遵循哪些基本准则? 答:为了合理利用临界资源,保证进程互斥地进入临界区,对临界区的管理应遵循以下准则: (1)空闲让进。当无进程处于临界区时,表明临界资源处于空闲状态,应允许一个请求进入临界区的进程立即进入自己的临界区,以有效地利用临界资源。 (2)忙则等待。当已有进程进入临界区时,表明临界资源正在被访问,因而其他试图进入临界区的进程必须等待,以保证对临界资源的互斥访问。 (3)有限等待。对要求访问临界资源的进程,应保证在有限时间内能进入自己的临界区,以免陷入“死等”状态。

操作系统作业调度实验报告

实验二作业调度 一.实验题目 1、编写并调试一个单道处理系统的作业等待模拟程序。 作业调度算法:分别采用先来先服务(FCFS),最短作业优先(SJF)的调度算法。 (1)先来先服务算法:按照作业提交给系统的先后顺序来挑选作业,先提交的先被挑选。 (2)最短作业优先算法:是以进入系统的作业所提出的“执行时间”为标准,总是优先选取执行时间最短的作业。 二.实验目的: 本实验要求用高级语言(C语言实验环境)编写和调试一个或多个作业调度的模拟程序,了解作业调度在操作系统中的作用,以加深对作业调度算法的理解 三.实验过程 <一>单道处理系统作业调度 1)单道处理程序作业调度实验的源程序: zuoye.c 执行程序: zuoye.exe 2)实验分析: 1、由于在单道批处理系统中,作业一投入运行,它就占有计算机的一切资源直到作业 完成为止,因此调度作业时不必考虑它所需要的资源是否得到满足,它所占用的 CPU 时限等因素。 2、每个作业由一个作业控制块JCB表示,JCB可以包含如下信息:作业名、提交时间、 所需的运行时间、所需的资源、作业状态、链指针等等。作业的状态可以是等待 W(Wait)、运行R(Run)和完成F(Finish)三种状态之一。每个作业的最初状态总是等待W。 3、对每种调度算法都要求打印每个作业开始运行时刻、完成时刻、周转时间、带权周 转时间,以及这组作业的平均周转时间及带权平均周转时间。 3)流程图:

代替 二.最短作业优先算法 代替 三.高响应比算法 图一.先来先服务流程图 4)源程序: #include #include #include #define getpch(type) (type*)malloc(sizeof(type)) #define NULL 0 int n; float T1=0,T2=0; int times=0; struct jcb //作业控制块 { char name[10]; //作业名 int reachtime; //作业到达时间

操作系统期末考试试题

一、单项选择 1、在存储管理方案中,__D_____ 可与覆盖技术配合. A、页式管理 B、段式管理 C、段页式管理 D、可变分区管理 2、在存储管理中,采用覆盖与交换技术的目的是___A______。 A、节省主存空间 B、物理上扩充准存容量 C、提高CPU效率 D、实现主存共享 3、动态重定位技术依赖于___B______。 A、重定位装入程序 B、重定位寄存器 C、地址机构 D、目标程序 4、虚拟存储器的最大容量____A______。 A、为内外存容量之和 B、由计算机的地址结构决定 C、是任意的 D、有作业的地址空间决定 5、在虚拟存储系统中,若进程在内存中占3块(开始时为空),采用先进先出页面淘汰算法,但执行访问页号序列为1、2、3、4、1、2、5、1、、2、3、4、5、6时,将产生___D___次缺页中断。 A、7 B、8 C、9 D、10 6、设内存的分配情况如下图所示。若要申请一块40K字节的内存空间,若采用最佳适应算法,则所得到的分区首址为____C___。 A、100K B、190K C、330K D、410K 7、很好地解决了“零头”问题的存储管理方法是____A____。 A、页式存储管理 B、段式存储管理 C、多重分区管理 D、可变分区管理 8、系统“抖动”现象的发生是由___A___引起的。 A、置换算法选择不当 B、交换的信息量过大 C、内存容量不足 D、请求页式管理方案 9、在可变式分区存储管理中的拼接技术可以_____A___。 A、集中空闲区 B、增加主存容量 C、缩短访问周期 D、加速地址转换 10、分区管理中采用“最佳适应”分配算法时,宜把空闲区按____A__次序等记在空闲区表中。 A、长度递增 B、长度递减 C、地址递增 D、地址递减 11、在固定分区分配中,每个分区的大小是_C__。 A、相同 B、可以不同但根据作业长度固定 C、可以不同但预先固定 D、所作业长度变化

操作系统习题

一、选择题 1.在三种基本类型的操作系统中,都设置了进程调度,在批处理系统中还应设置作业调度;在分时系统中除了设置进程调度,通常还设置中级调度,在多处理机系统中则还需设置剥夺调度。 2.在面向用户的调度准则中,截止时间的保证是选择实时调度算法的重要准则,响应时间快是选择分时系统中调度算法的重要准则,平均周转时间短是批处理系统中选择作业调度算法的重要准则,而优先权高的作业能获得优先服务准则则是为了照顾紧急作业用户的要求而设置的。 3.作业调度是从处于后备状态的队列中选取作业投入运行,周转时间是指作业进入系统到作业完成所经过的时间间隔,时间片轮转算法不适合作业调度。 4.下列算法中,FCFS算法只能采用非抢占调度方式,时间片轮转法只能采用抢占调度方式,而其余的算法既可采用抢占方式也可采用非抢占方式。 5.我们如果为每一个作业只建立一个进程,则为了照顾短作业用户,应采用短作业优先;为照顾紧急作业的用户,应采用基于优先权的剥夺调度算法;为能实现人机交互作用应采用时间片轮转法;为了兼顾短作业和长时间等待的用户,应采用高响应比优先;为了使短作业、长作业及交互作业用户都比较满意,应采用多级反馈队列调度算法;为了使平均周转时间最短,应采用短作业优先算法。 6.下列调度方式和算法中,最容易引起进程长期等待的是抢占式静态优先权优先算法。 7.下列选项中,降低进程优先级的最合理的时机是进程的时间片用完。 8.支持多道程序设计的操作系统在运行过程中,不断地选择新进程运行来实现CPU的共享,但其中有新进程进入就绪队列不是引起操作系统选择新进程的直接原因。 9.从下面关于优先权大小的论述中,选择一条正确的论述。 (6)在动态优先权时,随着进程执行时间的增加,其优先权降低。 10.假设就绪队列中有10个进程,以时间片轮转方式进行进程调度,时间片大小为300ms,CPU进行进程切换要花费10ms,则系统开销所占的比率约为%3,若就绪队列中进程的个数增加到20个,其余条件不变,则系统开销所占的比率将

操作系统实验报告-作业调度实验

作业调度实验 一.实验目的及要求: 用高级语言编写和调试一个或多个作业调度的模拟程序,以加深对作业调度算法的理解。 二. 实验环境: 操作系统:Windows XP 编译环境:Visual C++ 6.0 三.算法描述 由于在单道批处理系统中,作业一投入运行,它就占有计算机的一切资源直到作业完成为止,因此调度作业时不必考虑它所需要的资源是否得到满足,它所占用的 CPU时限等因素。 作业调度算法:采用先来先服务(FCFS)调度算法,即按作业提交的先后次序进行调度。总是首先调度在系统中等待时间最长的作业。 每个作业由一个作业控制块JCB表示,JCB可以包含如下信息:作业名、提交时间、所需的运行时间、所需的资源、作业状态、链指针等等。 作业的状态可以是等待W(Wait)、运行R(Run)和完成F(Finish)三种状态之一。每个作业的最初状态总是等待W。 各个等待的作业按照提交时刻的先后次序排队,总是首先调度等待队列中队首的作业。 每个作业完成后要打印该作业的开始运行时刻、完成时刻、周转时间和带权周转时间,这一组作业完成后要计算并打印这组作业的平均周转时间、带权平均周转时间。 四. 实验步骤: 1.、作业等待算法:分别采用先来先服务(FCFS),最短作业优先(SJF)调度算法。 对每种调度算法都要求打印每个作业开始运行时刻、完成时刻、周转时间、带权周转时间。 2.程序流程图

3、程序源码结构: void main() { void fcfs(); void sjf(); ... while(1){ printf("\n\t\t/* 1、fcfs */"); printf("\n\t\t/* 2、sjf */"); printf("\n\t\t/* 0、Exit */\n"); printf("\n\n\t请选择:\t"); scanf("%d",&a); printf("\n"); switch(a){ case 1: fcfs();break; case 2: sjf();break; default: break; } if(a!=1&&a!=2) break; } }

操作系统(第二版)习题答案

第1章 一、填空 1.计算机由硬件系统和软件系统两个部分组成,它们构成了一个完整的计算机系统。 2.按功能划分,软件可分为系统软件和应用软件两种。 3.操作系统是在裸机上加载的第一层软件,是对计算机硬件系统功能的首次扩充。 4.操作系统的基本功能是处理机(包含作业)管理、存储管理、设备管理和文件管理。 5.在分时和批处理系统结合的操作系统中引入“前台”和“后台”作业的概念,其目的是改善系统功能,提高处理能力。 6.分时系统的主要特征为多路性、交互性、独立性和及时性。 7.实时系统与分时以及批处理系统的主要区别是高及时性和高可靠性。 8.若一个操作系统具有很强的交互性,可同时供多个用户使用,则是分时操作系统。 9.如果一个操作系统在用户提交作业后,不提供交互能力,只追求计算机资源的利用率、大吞吐量和作业流程的自动化,则属于批处理操作系统。 10.采用多道程序设计技术,能充分发挥CPU 和外部设备并行工作的能力。 二、选择 1.操作系统是一种 B 。 A.通用软件B.系统软件C.应用软件D.软件包2.操作系统是对 C 进行管理的软件。 A系统软件B.系统硬件C.计算机资源D.应用程序3.操作系统中采用多道程序设计技术,以提高CPU和外部设备的A。 A.利用率B.可靠性C.稳定性D.兼容性4.计算机系统中配置操作系统的目的是提高计算机的 B 和方便用户使用。 A.速度B.利用率C.灵活性D.兼容性5. C 操作系统允许多个用户在其终端上同时交互地使用计算机。 A.批处理B.实时C.分时D.多道批处理6.如果分时系统的时间片一定,那么 D ,响应时间越长。 A.用户数越少B.内存越少C.内存越多D.用户数越多 三、问答 1.什么是“多道程序设计”技术?它对操作系统的形成起到什么作用? 答:所谓“多道程序设计”技术,即是通过软件的手段,允许在计算机内存中同时存放几道相互独立的作业程序,让它们对系统中的资源进行“共享”和“竞争”,以使系统中

操作系统实验-先来先服务、短作业优先算法

实验报告 【实验名称】实验一进程调度【实验目的】 巩固和加深处理机调度的概念。 【实验内容】 设计调度算法,模拟实现处理机的调度。 1.设计先来先服务调度算法 数据结构和符号说明: typedef struct PCB { char name[10]; //进程名 char state; //进程状态 int arrivetime; //到达时间 int starttime; //开始时间 int finishtime; //完成时间 int servicetime;//服务时间 float turnaroundtime;//周转时间 float weightedturnaroundtime;//带权周转时间 struct PCB *next; //指向下个进程的指针 }pcb; int time;//全局变量,计时器 int n;//全局变量,进程个数 pcb *head = NULL,*p,*q;//进程链表指针 流程图:

开始 输入进程名、到达时间、服务时间存入链表 进程是否全部处理完毕? 当前进程状态是否为F ?N 处理进程,计算完成时间,周转时间等,并更新当前时间Y 处理下一进程 N 结束Y 程序源代码 /* 操作系统实验一 先来先服务调度算法 */ #include #include typedef struct PCB//进程控制 { char name[10];//进程名 char state;//进程状态 int arrivetime;//到达时间 int starttime;//开始时间 int finishtime;//结束时间 int servicetime;//服务时间 float turnaroundtime;//周转时间 float weightedturnaroundtime;//带权周转时间 struct PCB *next;//指向下个进程 }pcb; int time;//当前时间 int n;//进程个数 pcb *head = NULL,*p,*q; //处理未完成的进程 void run_fcfs(pcb *p1) { time = p1->arrivetime > time ? p1->arrivetime : time; //如果进程到达时间大于当前时间,则当前时间=到达时间 p1->starttime = time;//当前时间即为进程开始时间

操作系统习题及答案二学习资料

习题二处理器管理 一、单项选择题 1、操作系统中的作业管理是一种()。 A.宏观的高级管理 B.宏观的低级管理 C.系统刚开始加电 D.初始化引导完成 2、进程和程序的本质区别是(). A.存储在内存和外存 B.顺序和非顺序执行机器指今 C.分时使用和独占使用计算机资源 D.动态和静态特征 3、处于后备状态的作业存放在()中。 A.外存 B.内存 C.A和B D.扩展内存 4、在操作系统中,作业处于()时,已处于进程的管理之下。 A.后备 B.阻塞 C.执行 D.完成 5、在操作系统中,JCB是指()。 A.作业控制块 B.进程控制块 C.文件控制块 D.程序控制块 6、作业调度的关键在于()。 A.选择恰当的进程管理程序 B.选择恰当的作业调度算法 C.用户作业准备充分 D.有一个较好的操作环境 7、下列作业调度算法中,最短的作业平均周转时间是()。 A.先来先服务法 B. 短作业优先法 C. 优先数法 D. 时间片轮转法 8、按照作业到达的先后次序调度作业,排队等待时间最长的作业被优先调度,这是指() 调度算法。 A.先来先服务法 B. 短作业优先法 C.时间片轮转法 D. 优先级法 9、在批处理系统中,周转时间是()。 A.作业运行时间 B.作业等待时间和运行时间之和 C.作业的相对等待时间 D.作业被调度进入内存到运行完毕的时间 10、为了对紧急进程或重要进程进行调度,调度算法应采用()。 A.先来先服务法 B. 优先级法 C.短作业优先法 D. 时间片轮转法 11、操作系统中,()负责对进程进行调度。 A.处理机管理 B. 作业管理 C.高级调度管理 D. 存储和设备管理 12、一个进程被唤醒意味着()。 A.该进程重新占有了CPU B.进程状态变为就绪 C.它的优先权变为最大 D.其PCB移至就绪队列的队首 13、当作业进入完成状态,操作系统(). A.将删除该作业并收回其所占资源,同时输出结果 B.将该作业的控制块从当前作业队列中删除,收回其所占资源,并输出结果

操作系统实验 FCFS和短作业优先SJF调度算法模拟

. 题目先来先服务FCFS和短作业优先SJF进程调度算法 姓名: 学号: 专业: 学院: 指导教师:林若宁 二零一八年十一月

一、实验目的 模拟单处理器系统的进程调度,分别采用短作业优先和先来先服务的进程调度算法作为进程设计算法,以加深对进程的概念及进程调度算法的理解. 二、实验内容 1. 短作业优先调度算法原理 短作业优先调度算法,是指对短作业或断进程优先调度的算法。它们可以分别可以用于作业调度和进程调度。短作业优先调度算法,是从后备队列中选择一个或若干个运行时间最短的作业,将它们调入内存运行。短进程优先调度算法,是从就绪队列中选出一个估计运行时间最短的进程,将处理机分配给它使它立即执行并一直执行到完成,或发生某事件而被阻塞放弃处理机时再重新调度。 2. 先来先服务调度算法原理 先来先服务(FCFS)调度算法是一种最简单的调度算法,该算法既可用于作业调度,也可用于进程调度。当在作业调度中采用该算法时,每次调度都是从后备作业队列中选择一个或多个最先进入该队列的作业,将它们调入内存,为它们分配资源、创建进程,然后放入就绪队列。在进程调度中采用FCFS算法时,则每次调度是从就绪队列中选择一个最先进入该队列的进程,为之分配处理机,使之投入运行。该进程一直运行到完成或发生某事件而阻塞后才放弃处理机。 三、程序设计 1.概要设计 程序包括主函数、FCFS算法函数、SJF算法函数、输出函数;主函数流程:输入文件中的数据—显示各进程数据—选择算法—调用相应算法的函数—输出结果 2.算法流程

SJF算法流程图:

3.详细设计 (1)定义一个结构体 typedef struct PCB { char job_id[10]; //作业ID float Arr_time; //到达时刻 float Fun_time; //估计运行时间 float Wait_time; //等待时间 float Start_time; //开始时刻 float Fin_time; //完成时刻 float Tur_time; //周转时间 float WTur_time; //带权周转时间 int Order; //优先标记 }list; (2)先来先服务算法函数 void fcfs(list *p,int count) //先来先服务算法{ list temp; //临时结构体变量int i; int j;

操作系统实验-先来先服务FCFS和短作业优先SJF进程调度算法

操作系统实验报告 实验一 先来先服务FCFS和短作业优先SJF进程调度算法 学号: 班级: 姓名:

【实验题目】:先来先服务FCFS和短作业优先SJF进程调度算法 【实验目的】 通过这次实验,加深对进程概念的理解,进一步掌握进程状态的转变、进程调度的策略及对系统性能的评价方法。 【实验内容】 问题描述: 设计程序模拟进程的先来先服务FCFS和短作业优先SJF调度过程。假设有n个进程分别在T1, …,T n时刻到达系统,它们需要的服务时间分别为S1, …,S n。分别采用先来先服务FCFS和短作业优先SJF进程调度算法进行调度,计算每个进程的完成时间,周转时间和带权周转时间,并且统计n个进程的平均周转时间和平均带权周转时间。 程序要求如下: 1)进程个数n;每个进程的到达时间T1, … ,T n和服务时间S1, … ,S n;选择算法1-FCFS,2-SJF。 2)要求采用先来先服务FCFS和短作业优先SJF分别调度进程运行,计算每个进程的周转时间,带权周转时间,并且计算所有进程的平均周转时间,带权平均周转时间; 3)输出:要求模拟整个调度过程,输出每个时刻的进程运行状态,如“时刻3:进程B开始运行”等等; 4)输出:要求输出计算出来的每个进程的周转时间,带权周转时间,所有

进程的平均周转时间,带权平均周转时间。 实现提示: 用C++语言实现提示: 1)程序中进程调度时间变量描述如下: static int MaxNum=100; int ArrivalTime[MaxNum]; int ServiceTime[MaxNum]; int FinishTime[MaxNum]; int WholeTime[MaxNum]; double WeightWholeTime[MaxNum]; double AverageWT_FCFS,AverageWT_SJF; double AverageWWT_FCFS,AverageWWT_SJF; 2)进程调度的实现过程如下: 变量初始化; 接收用户输入n,T1, … ,T n,S1, … ,S n;算法选择1-FCFS,2-SJF; 按照选择算法进行进程调度,计算进程的完成时间、周转时间和带权周转时间; 计算所有进程的平均周转时间和平均带权周转时间; 按格式输出调度结果。 实验要求: 1)上机前认真复习FCFS和SJF进程调度调度算法,熟悉进程调度的执行过

相关主题
文本预览
相关文档 最新文档