作业调度模拟程序

作业调度模拟程序
作业调度模拟程序

作业调度模拟程序

一、目的和要求

1. 实验目的

(1)加深对作业调度算法的理解;

(2)进行程序设计的训练。

2.实验要求

用高级语言编写一个或多个作业调度的模拟程序。

单道批处理系统的作业调度程序。作业一投入运行,它就占有计算机的一切资源直到作业完成为止,因此调度作业时不必考虑它所需要的资源是否得到满足,它所运行的时间等因素。

作业调度算法:

1) 采用先来先服务(FCFS)调度算法,即按作业到达的先后次序进行调度。总是首先调度在系统中等待时间最长的作业。

2) 短作业优先(SJF) 调度算法,优先调度要求运行时间最短的作业。

3) 响应比高者优先(HRRN)调度算法,为每个作业设置一个优先权(响应比),调度之前先计算各作业的优先权,优先数高者优先调度。RP (响应比)=作业周转时间/ 作业运行时间=1+作业等待时间/作业运行时间

每个作业由一个作业控制块JCB表示,JCB可以包含以下信息:作业名、提交(到达)时间、所需的运行时间、所需的资源、作业状态、链指针等等。

作业的状态可以是等待W(Wait)、运行R(Run)和完成F(Finish)三种之一。每个作业的最初状态都是等待W。

一、模拟数据的生成

1.允许用户指定作业的个数(2-24),默认值为5。

2.允许用户选择输入每个作业的到达时间和所需运行时间。

3.(**)从文件中读入以上数据。

4.(**)也允许用户选择通过伪随机数指定每个作业的到达时间(0-30)和所需运行时间(1-8)。

二、模拟程序的功能

1.按照模拟数据的到达时间和所需运行时间,执行FCFS, SJF和HRRN调度算法,程序计算各作业的开始执行时间,各作业的完成时间,周转时间和带权周转时间(周转系数)。

2.动态演示每调度一次,更新现在系统时刻,处于运行状态和等待各作业的相应信息(作业名、到达时间、所需的运行时间等)对于HRRN算法,能在每次调度时显示各作业的响应比R情况。

3.(**)允许用户在模拟过程中提交新作业。

4.(**)编写并调度一个多道程序系统的作业调度模拟程序。只要求作业调度算法:采用基于先来先服务的调度算法。对于多道程序系统,要假定系统中具有的各种资源及数量、调度作业时必须考虑到每个作业的资源要求。

三、模拟数据结果分析

1.对同一个模拟数据各算法的平均周转时间,周转系数比较。

2.(**)用曲线图或柱形图表示出以上数据,分析算法的优点和缺点。

四、实验准备

五、其他要求

1.完成报告书,内容完整,规格规范。

2.实验须检查,回答实验相关问题。

注:带**号的条目表示选做内容。

二、实验内容

根据指定的实验课题,完成设计、编码和调试工作,完成实验报告。

三、实验环境

可以采用TC,也可以选用Windows下的利用各种控件较为方便的VB,VC等可视化环境。也可以自主选择其他实验环境。

四、实验原理及核心算法参考程序段

单道FCFS算法:

源代码

#include #include struct job

{

char status;

char name[10];

float arrtime;

float reqtime;

float startime;

float finitime;

float zhouzhuan;

};void FCFS(job jobs[],int temp[100],int jobnum);//先到先服务算法void SJF(job jobs[10],int jobnum);//短作业优先算法void HRRF(job

jobs[10],int jobnum);//最高响应比优先算法int main(void)

{

job jobs[10];

int jobnum,i;

int temp[100];

int x,y;

int k=0;

int choice=1;

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

printf("1.FCFS算法调度\n");

printf("2.SJF算法调度\n");

printf("3.HRRF算法调度\n");

printf("4.调用系统清屏\n");

printf("0.退出算法调度\n");

printf("版权所有:纪焓\n");

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

printf("请输入作业调度个数:");

scanf("%d",&jobnum);

for(i=0;i

{

printf("第%d个作业:\n",i+1);

printf("作业%d名称:",i+1);

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

printf("到达系统时间:");

scanf("%f",&jobs[i].arrtime);

printf("CPU所需时间:");

scanf("%f",&jobs[i].reqtime);

temp[i]=i;

}

//按到达系统时间排序

for(x=0;x

{

for(y=x+1;y

{

if(jobs[temp[x]].arrtime>jobs[y].arrtime)

{

k=temp[x];

temp[x]=temp[y];

temp[y]=k;

}

}

}

printf("\n");

printf("按到达系统时间排序:\n");

for(i=0;i

{

printf("\tname\tarrtime\treqtime\n");

printf("N %d",i+1);

printf("\t%s",jobs[temp[i]].name);

printf("\t%.2f",jobs[temp[i]].arrtime);

printf("\t%.2f",jobs[temp[i]].reqtime);

printf("\n");

}

//调用先到先服务算法

//FCFS(jobs,temp,jobnum);

//调用短作业优先算法

//SJF(jobs,jobnum);

while(choice!=0)

{

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

scanf("%d",&choice);

if(choice==1)

{

FCFS(jobs,temp,jobnum);

}

else if(choice==2)

{

SJF(jobs,jobnum);

}

else if(choice==3)

{

HRRF(jobs,jobnum);

}

}

return0;

}

/*先到先服务算法*/void FCFS(job jobs[10],int temp[100],int jobnum) {

int i=0;

jobs[temp[0]].startime=jobs[temp[0]].arrtime;

jobs[temp[0]].finitime=jobs[temp[0]].arrtime+jobs[temp[0]].reqtime;

jobs[temp[0]].zhouzhuan=jobs[temp[0]].finitime-jobs[temp[0]].arrtime;

for(i=1;i

{

jobs[temp[i]].startime=jobs[temp[i-1]].finitime;

jobs[temp[i]].finitime=jobs[temp[i]].startime+jobs[temp[i]].reqtime;

jobs[temp[i]].zhouzhuan=jobs[temp[i]].finitime-jobs[temp[i]].arrtime; }

printf("\n\n");

printf("调用先到先服务算法:\n\n");

printf("作业名到达系统时间 CPU所需时间/h 开始时间结束

时间周转时间/h\n");

for(i=0;i

{

printf(" %s",jobs[temp[i]].name);

printf(" %.2f",jobs[temp[i]].arrtime);

printf(" %.2f",jobs[temp[i]].reqtime);

printf(" %.2f",jobs[temp[i]].startime);

printf(" %.2f",jobs[temp[i]].finitime);

printf(" %.2f",jobs[temp[i]].zhouzhuan);

printf("\n");

}

}/*短作业优先算法*/void SJF(job jobs[10],int jobnum)

{

int i,j;

int k=0;

int tempS[100];

for(i=0;i

{

tempS[i]=i;

}

for(i=0;i

{

for(j=i+1;j

{

if(jobs[tempS[i]].reqtime>jobs[j].reqtime)

{

k=tempS[i];

tempS[i]=tempS[j];

tempS[j]=k;

}

}

}

jobs[tempS[0]].startime=jobs[tempS[0]].arrtime;

jobs[tempS[0]].finitime=jobs[tempS[0]].arrtime+jobs[tempS[0]].reqtime ;

jobs[tempS[0]].zhouzhuan=jobs[tempS[0]].finitime-jobs[tempS[0]].arrti me;

for(i=1;i

{

jobs[tempS[i]].startime=jobs[tempS[i-1]].finitime;

jobs[tempS[i]].finitime=jobs[tempS[i]].startime+jobs[tempS[i]].reqtim e;

jobs[tempS[i]].zhouzhuan=jobs[tempS[i]].finitime-jobs[tempS[i]].arrti me;

}

printf("\n\n");

printf("调用最短作业优先算法:\n\n");

printf("作业名到达系统时间 CPU所需时间/h 开始时间结束时间周转时间/h\n");

for(i=0;i

{

printf(" %s",jobs[tempS[i]].name);

printf(" %.2f",jobs[tempS[i]].arrtime);

printf(" %.2f",jobs[tempS[i]].reqtime);

printf(" %.2f",jobs[tempS[i]].startime);

printf(" %.2f",jobs[tempS[i]].finitime);

printf(" %.2f",jobs[tempS[i]].zhouzhuan);

printf("\n");

}

}/*最高响应比优先算法*/void HRRF(job jobs[10],int jobnum)

{

}

运行截图

输入1使用先到先服务算法

输入2使用短作业优先算法

输入0退出调度算法程序

处理机调度与死锁练习题

第三章处理机调度与死锁 一、单项选择题 1.在为多道程序所提供的可共享的系统资源不足时,可能出现死锁。但是,不适当的________也可能产生死锁。 A. 进程优先权 B.资源的线性分配 C.进程推进顺序 D.分配队列优先权 3.产生死锁的四个必要条件是:互斥、__________、循环等待和不剥夺。 A. 请求与阻塞 B.请求与保持 C. 请求与释放 D.释放与阻塞 4.发生死锁的必要条件有四个,要防止死锁的发生,可以破坏这四个必要条件,但破坏___________条件是不太实际的。 A. 互斥 B.不可抢占 C.部分分配 D.循环等待 5.在分时操作系统中,进程调度经常采用 ________________算法。 A. 先来先服务 B.最高优先权 C. 时间片轮转 D.随机 条件。______________资源的按序分配策略可以破坏. 6.

A. 互斥使用资源 B.占有且等待资源 C. 非抢夺资源 D. 循环等待资源 7.在_____________的情况下,系统出现死锁。 A. 计算机系统发生了重大故障 B.有多个封锁的进程同时存在 C. 若干进程因竞争资源而无休止地相互等待他方释放已占有的资源 D.资源数大大小于进程数或进程同时申请的资源数大大超过资源总数 8.银行家算法是一种________________算法。 A. 死锁解除 B.死锁避免 C. 死锁预防 D.死锁检测 9.当进程数大于资源数时,进程竞争资源___________会产生死锁。 A. 一定 B.不一定 10._________优先权是在创建进程时确定的,确定之后在整个进程运行期间不再改变。 A. 先来先服务 B.静态 C. 动态 D. 短作业

实验二 处理机调度

实验二处理机调度 一、实验目的 多道程序设计中,经常是若干个进程同时处于就绪状态,为了使系统中的各进程有条不紊地运行,必须选择某种调度策略,以选择一个进程占用处理机。本次实验设计一个模拟单处理机调度的算法,以加深处理机调度的算法的理解。 二、实验要求 1.按照轮转(时间片)算法设计模拟调度程序。 2.输出进程的调度过程。 三、思路分析 由于本实验是按照处理机调度算法模拟实现处理机的调度,与真正的处理机调度过程不完全相同,如没有实现中断,进程的运行也不是真正的运行,而是在屏幕上打印其运行时间等。以下是实验的大致思路: (1)建立三个队列:PCB队列,就绪队列,完成队列。 PCB队列:保存将进入系统的进程。(由于没有实现中断,所以将进入系统运行的进程必须在程序运行前给出)。 就绪队列:到达进程进入系统的时间,将该进程放入就绪队列,等待调度。 完成队列:将“运行”完的进程放入完成队列。 (2)进程运行过程是在屏幕上打印相关信息。 使用轮转算法调度的进程应打印的信息包括:进程占用处理机序列,该进程每次占用处理机的开始时间与结束时间。可参考下图: (3)统计出进程的周转时间T和带权周转时间W。 四、流程图

五、实验内容 编写程序实现轮转算法的模拟调度程序。(可参考FCFS算法的模拟调度程序。 //************************************************************************ ******// //* 实验二处理机调度*// //************************************************************************ ******//

处理器调度习题

处理器调度 选择题 当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.高响应比优先调度算法 在采用动态优先权的优先权调度算法中,如果所有进程都具有相同优先权初值,则此时的优先权调度算法实际上和( )相同。

模拟一种处理机调度算法讲解

课程设计报告 设计名称:模拟实现一种处理机调度算法 学生姓名: xxx 专业:计算机科学与技术 班别: xxxxxxxx 学号: xxxxxx 指导老师: xxxxx 日期: 2014 年 6 月 20 日

初始条件: 1.预备内容:阅读操作系统的处理机管理章节内容,对进程调度的功能以及进程调度算法有深入的理解。 2.实践准备:掌握一种计算机高级语言的使用。 要求完成的主要任务:(包括课程设计工作量及其技术要求,以及说明书撰写等具体要求) 1.模拟进程调度,能够处理以下的情形: ⑴能够选择不同的调度算法(要求中给出的调度算法); ⑵能够输入进程的基本信息,如进程名、优先级、到达 时间和运行时间等; ⑶根据选择的调度算法显示进程调度队列; ⑷根据选择的调度算法计算平均周转时间和平均带权周 转时间。 2.设计报告内容应说明: ⑴需求分析; ⑵功能设计(数据结构及模块说明); ⑶开发平台及源程序的主要部分; ⑷测试用例,运行结果与运行情况分析; ⑸自我评价与总结: i)你认为你完成的设计哪些地方做得比较好或比较出 色; ii)什么地方做得不太好,以后如何改正;

iii)从本设计得到的收获(在编写,调试,执行过程中 的经验和教训); iv)完成本题是否有其他方法(如果有,简要说明该方 法); 进程调度模拟设计——先来先服务、优先级法1、背景: 当计算机系统是多道程序设计系统时,通常会有多个进程或线程同时竞争CPU。只要有两个或更多的进程处于就绪状态,这种情形就会发生。如果只有一个CPU可用,那么就必须选择下一个要运行的进程。在操作系统中,完成选择工作的这一部分称为调度程序,该程序使用的算法成为调度算法。 进程调度的核心问题是采用什么样的算法把处理机分配给进程,好的算法将提高资源利用率,减少处理机的空闲时间,避免有些作业长期得不到相应的情况发生等,从而设计出受欢迎的操作系统。较常见的几种进程调度算法有:先来先服务调度算法;短作业优先调度算法;时间片轮转调度算法;优先级调度算法;高响应比优先算法和多级反馈队列调度算法等。 2.1设计目的 无论是在批处理系统还是分时系统中,用户进程数一般都多于处理机数、这将导致它们互相争夺处理机。另外,系统进程也同样需要使用处理机。这就要求进程调度程序按一定的策略,动态地把处理机

实验一处理机调度

实验一处理机调度实验 实验目的: 用高级语言编写和调试一个进程调度程序,以加深对进程的概念及进程调度算法的理解。实验要求: 用C++语言实验对N个进程采用非抢占式的动态优先权优先算法的进程调度 实验内容: 设计一个有N个进程并发的进程调度程序。进程调度算法:采用最高优先数优先的调度算法(即把处理机分配给优先数最高的进程)算法。 每个进程有一个进程控制块(PCB)表示。PCB用结构来描述,包括以下字段: 进程标识ID、 优先数,为初始设定的模拟条件 到达时间,为初始设定的模拟条件 需要运行时间,为初始设定的模拟条件 已用CPU时间,为初始设定的模拟条件 进程阻塞时间startblock(表示进程在运行startblock个时间片后,进程将进入阻塞状态),为初始设定的模拟条件 进程被阻塞的时间blocktime(表示进程等待blocktime个时间片后,将转换成就绪状态),为初始设定的模拟条件,模拟执行I/O操作需要的时间 进程状态state,就绪W(Wait)、运行R(Run)、或完成F(Finish)三种状态 队列指针next等等。 优先数改变的规则 进程在就绪对列中呆一个时间片,优先数增加1; 进程每运行一个时间片,优先数减3; 运行过程描述 首先按照初始化输入,按照各进程优先级高低排列就绪队列中进程顺序,优先级最高的进程最先获得CPU控制权运行。如果运行一个时间片后,进程的已占用CPU时间已达到所需要的运行时间,则撤消该进程,如果运行一个时间片后进程的已占用CPU时间还未达所需要的运行时间,此时应将进程的优先数减3(即降低一级),如果到了进程需被阻塞的时间点,阻塞进程,然后把它插入阻塞队列,等待经过blocktime后,再唤醒进程,把它按照优先级高低,插入就绪队列相应位置等待CPU。 每进行一次调度程序都打印一次运行进程、就绪队列、以及各个进程的PCB,以便进行检查。重复以上过程,直到所要进程都完成为止。 备注:进程的优先数及需要的运行时间可以事先人为地指定(也可以由随机数产生)。 进程的到达时间为进程输入的时间或顺序。 参考资料: 部分数据结构说明: struct pcb { /* 定义进程控制块PCB */ char name[10]; char state; int super; int ntime; int rtime;

第三章 处理机调度与死锁习题课

第三章处理机调度与死锁 1、系统出现死锁是因为(若干进程因竞争资源而无休止的等待着其他进程释放已占有的资 源)。 2、某系统中有5个并发进程,都需要同类资源3个,试问该系统不会发生死锁的最少资源数是(11 )。 3、发生死锁现象的原因有____竞争资源_________和____进程推进顺序非法________。 通常不采用( 从非死锁进程处抢夺资源)方法来解除死锁。 4、某系统中有4个并发进程,都需要同类资源3个,试问该系统不会发生死锁的最少资源数是( 9 )。 5、死锁产生的4个必要条件是:互斥、不可剥夺、_____________请求和保持_________ 和环路等待条件。 6、作业在系统中存在与否的唯一标志是作业控制块 7、某计算机系统中有8台打印机,有K个进程竞争使用,每个进程最多需要3台打印机.该系统可能会发生死锁的K的最小值是( 4 ) 8、产生系统死锁的原因可能是由于(多个进程竞争资源出现了循环等待) 9、系统中有3个进程,每个进程需2台打印机,如果系统配有4台打印机,则系统______不可能________出现死锁的情况(本题要判断出现死锁的可能性:可能或不可能)。 10、什么是死锁?产生死锁的必要条件是什么?处理死锁的基本方法有哪些? 答:死锁是两个或两个以上进程由于竞争资源而处于的僵持状态,在这种僵持状态下若没有外力作用,所有进程都无法正常向前推进。( 必要条件:(1)互斥条件(2)请求和保持条件(3)不剥夺条件(4)环路等待条件处理方法:预防死锁、避免死锁、检测死锁、解除死锁。 11、死锁定理的含义是什么?试简化下图进程-资源图,并利用死锁定理给出相应的结论。 P1 R1 R2 P2 答:死锁定理:当且仅当资源分配图是不可完全简化的。 R1资源有3个,R2资源有2个;P1进程:占有2个R1,申请1个R2;P2进程占有1个R1,1个R2,申请1个R1;目前系统只有一个R2空闲;P1是一个既不孤立又不阻塞的进程,消去P1的边,有2个R1,1个R2空闲,能满足P2申请,使P2成为既不孤立又不阻塞的进程,所以消去P2的边,由死锁定理知,不会产生死锁。

实验一处理器调度实验报告

处理器调度一、实验内容 选择一个调度算法,实现处理器调度。 二、实验目的 在采用多道程序设计的系统中,往往有若干个进程同时处于就绪状态。 当就绪状态进程 个数大于处理器数时,就必须依照某种策略来决定哪些进程优先占用处理器。本实验模拟在单处理器情况下处理器调度,帮助学生加深了解处理器调度的工作。 三、实验题目 设计一个按优先数调度算法实现处理器调度的程序 提示: (1)假定系统有五个进程,每一个进程用一个进程控制块PCB来代表。进 程控制块的格 式为: 其中,进程名----作为进程的标识,假设五个进程的进程名分别是R, P2, P3, P4,R。 指针—按优先数的大小把五个进程连成队列,用指针指出下一个进程的进程控制块

首地址,最后一个进程中的指针为“ 0”。 要求运行时间-- 假设进程需要运行的单位时间数。 优先数-赋予进程的优先数,调度时总是选取优先数大的进程先执行。 状态-可假设有两种状态,“就绪”状态和“结束“状态,五个进程的初 始状态都为 “就绪“状态,用“ R”表示,当一个进程运行结束后,它的状态变为“结束”, 用“ E”表示。 (2)在每次运行你所设计的处理器调度程序之前,为每个进程任意确定它的“优先数” 和“要求运行时间”。 (3)为了调度方便,把五个进程按给定的优先数从大到小连成队列,用一单元指出队首 进程,用指针指出队列的连接情况。例: 队首标志 (4)处理器调度总是选队首进程运行。采用动态改变优先数的办法,进程每运行一次优 先数就减“ 1”。由于本实验是模拟处理器调度,所以,对被选中的进程并不实际的 启动运行,而是执行: 优先数- 1 要求运行时间-1 来模拟进程的一次运行提醒注意的是:在实际的系统中,当一个进程被选中运

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

作业调度 一、实验目的 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=[]

处理器调度(设计一个按时间片轮转法实现处理器调度的程序)

实验一处理器调度 一、实验容 选择一个调度算法,实现处理器调度。 二、实验目的 在采用多道程序设计的系统中,往往有若干个进程同时处于就绪状态。当就绪进程个数大于处理器数时,就必须依照某种策略来决定哪些进程优先占用处理器。本实习模拟在单处理器情况下的处理器调度,帮助学生加深了解处理器调度的工作。 三、实验题目 设计一个按时间片轮转法实现处理器调度的程序。 [提示]: (1)假定系统有五个进程,每一个进程用一个进程控制块PCB来代表。进程控制块的 格式为: 其中,Q1,Q2,Q3,Q4,Q5。 指针——进程按顺序排成循环队列,用指针指出下一个进程的进程控制块的首地址最后一个进程的指针指出第一个进程的进程控制块首地址。 要求运行时间——假设进程需要运行的单位时间数。 已运行时间——假设进程已经运行的单位时间数,初始值为“0”。 状态——有两种状态,“就绪”和“结束”,初始状态都为“就绪”,用“R”表示。 当一个进程运行结束后,它的状态为“结束”,用“E”表示。 (2) 每次运行所设计的处理器调度程序前,为每个进程任意确定它的“要求运行时间”。 (3) 把五个进程按顺序排成循环队列,用指针指出队列连接情况。另用一标志单元记录轮到运行的进程。例如,当前轮到P2执行,则有: 标志单元 K1 K2 K 3 K4 K5

(4)处理器调度总是选择标志单元指示的进程运行。由于本实习是模拟处理器调度的 功能,所以,对被选中的进程并不实际的启动运行,而是执行: 已运行时间+1 来模拟进程的一次运行,表示进程已经运行过一个单位的时间。 请同学注意:在实际的系统中,当一个进程被选中运行时,必须置上该进程可以运行的时间片值,以及恢复进程的现场,让它占有处理器运行,直到出现等待事件或运行满一个时间片。在这时省去了这些工作,仅用“已运行时间+1”来表示进程已 经运行满一个时间片。 (5)进程运行一次后,应把该进程的进程控制块中的指针值送到标志单元,以指示下一 个轮到运行的进程。同时,应判断该进程的要求运行时间与已运行时间,若该进程的要求运行时间 已运行时间,则表示它尚未执行结束,应待到下一轮时再运行。若该进程的要求运行时间=已运行时间,则表示它已经执行结束,应指导它的状态修改成“结束”(E)且退出队列。此时,应把该进程的进程控制块中的指针值送到前 面一个进程的指针位置。 (6)若“就绪”状态的进程队列不为空,则重复上面的(4)和(5)的步骤,直到所有 的进程都成为“结束”状态。 (7)在所设计的程序中应有显示或打印语句,能显示或打印每次选中进程的进程名以及 运行一次后进程队列的变化。 (8)为五个进程任意确定一组“要求运行时间”,启动所设计的处理器调度程序,显示 或打印逐次被选中的进程名以及进程控制块的动态变化过程。 四. 所用数据结构及符号说明 typedef struct PNode//PCB { struct PNode *next; //定义指向下一个节点的指针 char name[10]; //定义进程名,并分配空间 int All_time; //定义总运行时间 int Runed_Time; //定义已运行时间 char state; //定义进程状态Ready/End } *Proc; //指向该PCB的指针 int ProcNum; //总进程数

第三章处理机调度与死锁习题及答案新

第三章处理机调度与死锁 一.选择题 1.下列算法中,操作系统用于作业调度的算法是。 A.先来先服务算法B.先进先出算法 C.最先适应算法D.时间片轮转算法 2.在批处理系统中,周转时间是指。 A.作业运行时间B.作业等待时间和运行时间之和 C.作业的相对等待时间D.作业被调度进入内存到运行完毕的时间3.在作业调度中,排队等待时间最长的作业被优先调度,这是指调度算法。 A.先来先服务B.短作业优先 C.响应比高优先D.优先级 4.下列算法中,用于进程调度的算法是。 A.最先适应B.最高响应比优先 C.均衡资源调度D.优先数调度 5.两个进程争夺同一个资源。 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.需要CPU时间最短的进程先做 11.下面关于优先权大小的论述中,不正确的论述是。 A.计算型作业的优先权,应低于I/O型作业的优先权 B.系统进程的优先权应高于用户进程的优先权 C.资源要求多的作业,其优先权应高于资源要求少的作业 D.在动态优先权时,随着进程运行时间的增加,其优先权降低 12.产生死锁的原因是有关。 A.与多个进程竞争CPU B.与多个进程释放资源 C.仅由于并发进程的执行速度不当 D.除资源分配策略不当外,也与并发进程执行速度不当 13.有关产生死锁的叙述中,正确的是。 A.V操作可能引起死锁B.P操作不会引起死锁 C.PV操作使用得当不会引起死锁D.以上说法均不正确 14.有关死锁的论述中,是正确的。

2011180021-Linux操作系统-课程设计报告-基于Linux的进程调度模拟程序

河南中医学院 《linux操作系统》课程设计报告 题目:基于Linux的进程调度模拟程序 所在院系:信息技术学院 专业年级:2011级计算机科学与技术完成学生:2011180021 郭姗 指导教师:阮晓龙 完成日期:201X 年06 月22 日 目录 1. 课程设计题目概述3 2. 研究内容与目的4 3. 研究方法5 4. 研究报告6 5. 测试报告/实验报告7 6. 课题研究结论8 7. 总结9

1、课程设计题目概述 随着Linux系统的逐渐推广,它被越来越多的计算机用户所了解和应用. Linux是一个多任务的操作系统,也就是说,在同一个时间内,可以有多个进程同时执行。如果读者对计算机硬件体系有一定了解的话,会知道我们大家常用的单CPU计算机实际上在一个时间片断内只能执行一条指令,那么Linux是如何实现多进程同时执行的呢?原来Linux使用了一种称为"进程调度(process scheduling)"的手段,首先,为每个进程指派一定的运行时间,这个时间通常很短,短到以毫秒为单位,然后依照某种规则,从众多进程中挑选一个投入运行,其他的进程暂时等待,当正在运行的那个进程时间耗尽,或执行完毕退出,或因某种原因暂停,Linux就会重新进行调度,挑选下一个进程投入运行。因为每个进程占用的时间片都很短,在我们使用者的角度来看,就好像多个进程同时运行一样了。本文就是对进程调度进行研究、实验的。 本文首先对Linux系统进行了简要的介绍, 然后介绍了进程管理的相关理论知识。其次,又介绍最高优先数优先的调度算法(即把处理机分配给优先数最高的进程)、先来先服务算法的相关知识,并对进程调度进行最高优先数优先的调度算法和先来先服务算法模拟实验,并对比分析两种算法的优缺点,从而加深对进程概念和进程调度过程/算法的理解 设计目的:在多道程序和多任务系统中,系统内同时处于就绪状态的进程可能有若干个。也就是说能运行的进程数大于处理机个数。为了使系统中的进程能有条不紊地工作,必须选用某种调度策略,选择某一进程占用处理机。使得系统中的进程能够有条不紊的运行,同时提高处理机的利用率以及系统的性能。所以设计模拟进程调度算法(最高优先数优先的调度算法、先来先服务算法),以巩固和加深处理进程的概念,并且分析这两种算法的优缺点。关键词:linux 进程调度调度算法

作业调度

作业调度实验报告 1、实验目的 作业管理是用户与操作系统的接口。作业调度的主要功能是检查系统是否能满足用户作业的资源要求以及按照一定的算法选取作业。 本实验的目的是通过模拟作业调度算法的设计加深对作业管理基本原理的理解。 2 实验用具 个人电脑 3、实验内容 ⑴在后备作业队列中,输入5个作业的名称、状态、就绪时间、服务时间及存储空间。 ①按先来先服务的原则进行调度,输出作业调度的顺序及等待的时间。 ②按最短作业(即运行时间最短)优先的原则进行调度,输出作业调度的顺序及等待时间。

4 实习步骤 第一步:首先对整个题目进行分析,包括对作业、主存的定义类型。 第二步:对流程图进行分析,分析一些细节代码。 第三步:根据程序流程图写代码并调节一些细节错误。 第四步:运行看结果,这里主要看内存根据作业的要求对分配情况。 4.1 需求分析 本次实验是在预输入五道作业的基础上初始化,并通过作业的需求更改主存的输出显示情况,首先是输入5道作业,分别使用先来先服务算法和最短时间优先算法分配内存,最后进行内存的回收。

4.2 数据结构设计与说明 定义作业中的变量-资源需求: typedef struct source { int size; //资源要求大小 int tape_count; //资源要求磁带数 }src; 定义作业: typedef struct jobwork { char username[10]; //用户名 char jobname[10]; //作业名 char state[5]; //运行状态 int runtime; //运行时间 src source; //资源需求(结构体类型见上) struct jobwork *next; //下一个指针 }job; 定义内存: typedef struct memory { int size; //内存大小 int tape_count; //内存磁带数 char jobname[10]; //内存中存在的作业名(首次为空) char username[10]; //内存中作业的用户名char state[5]; //内存中作业的状态 int job_count; //内存中作业个数struct memory *next; //内存下一个指针}mem; 4.3 算法设计 第一部分:初始化作业表

时间片轮转进程调度模拟算法的实现

理工大学华夏学院 课程设计报告书 课程名称:操作系统原理 题目:时间片轮转进程调度模拟算法的实现系名:信息工程系 专业班级:计算机1132班 姓名:杰 学号: 指导教师: 司晓梅 2015年 6 月26日

理工大学华夏学院信息工程系 课程设计任务书 课程名称:操作系统原理课程设计指导教师:司晓梅 班级名称:计算机1131-2 开课系、教研室:自动化与计算机 一、课程设计目的与任务 操作系统课程设计是《操作系统原理》课程的后续实践课程,旨在通过一周的实践训练, 加深学生对理论课程中操作系统概念,原理和方法的理解,加强学生综合运用操作系统原理、Linux系统、C语言程序设计技术进行实际问题处理的能力,进一步提高学生进行分析问题 和解决问题的能力,包含系统分析、系统设计、系统实现和系统测试的能力。 学生将在指导老师的指导下,完成从需求分析,系统设计,编码到测试的全过程。 二、课程设计的容与基本要求 1、课程设计题目 时间片轮转进程调度模拟算法的实现 2、课程设计容 用c/c++语言实现时间片轮转的进程调度模拟算法。要求: 1.至少要有5个以上进程 2.进程被调度占有CPU后,打印出该进程正在运行的相关信息 提示: 时间片轮转调度算法中,进程调度程序总是选择就绪队列中的第一个进程,也就是说按照先来先服务原则调度,但一旦进程占用处理机则仅使用一个时间片。在使用完一个时间片后,进程还没有完成其运行,它必须释放出处理机给下一个就绪的进程,而被抢占的进程返回到就绪队列的末尾重新排队等待再次运行。 1)进程运行时,只打印出相关提示信息,同时将它已经运行的时间片加1就可以了。 2)为进程设计出PCB结构。PCB结构所包含的容,有进程名、进程所需运行时间、已运行时间和进程的状态以及指针的信息等。 3、设计报告撰写格式要求: 1设计题目与要求 2 设计思想 3系统结构 4 数据结构的说明和模块的算法流程图 5 使用说明书(即用户手册):容包含如何登录、退出、读、写等操作说明 6 运行结果和结果分析(其中包括实验的检查结果、程序的运行情况)

实验一___处理器调度(设计一个按时间片轮转法实现处理器调度的程序)

实验一处理器调度 一、实验内容 选择一个调度算法,实现处理器调度。 二、实验目的 在采用多道程序设计的系统中,往往有若干个进程同时处于就绪状态。当就绪进程个数大于处理器数时,就必须依照某种策略来决定哪些进程优先占用处理器。本实习模拟在单处理器情况下的处理器调度,帮助学生加深了解处理器调度的工作。 三、实验题目 第二题:设计一个按时间片轮转法实现处理器调度的程序。 [提示]: (1)假定系统有五个进程,每一个进程用一个进程控制块PCB来代表。进程控制块的 格式为: 其中,Q1,Q2,Q3,Q4,Q5。 指针——进程按顺序排成循环队列,用指针指出下一个进程的进程控制块的首地址最后一个进程的指针指出第一个进程的进程控制块首地址。 要求运行时间——假设进程需要运行的单位时间数。 已运行时间——假设进程已经运行的单位时间数,初始值为“0”。 状态——有两种状态,“就绪”和“结束”,初始状态都为“就绪”,用“R”表示。 当一个进程运行结束后,它的状态为“结束”,用“E”表示。 (2) 每次运行所设计的处理器调度程序前,为每个进程任意确定它的“要求运行时间”。 (3) 把五个进程按顺序排成循环队列,用指针指出队列连接情况。另用一标志单元记录轮到运行的进程。例如,当前轮到P2执行,则有: 标志单元 K1 K2 K 3 K4 K5 (4)处理器调度总是选择标志单元指示的进程运行。由于本实习是模拟处理器调度的 功能,所以,对被选中的进程并不实际的启动运行,而是执行: 已运行时间+1 来模拟进程的一次运行,表示进程已经运行过一个单位的时间。 请同学注意:在实际的系统中,当一个进程被选中运行时,必须置上该进程可以运行的时间片值,以及恢复进程的现场,让它占有处理器运行,直到出现等待事件或运行满一个时间片。在这时省去了这些工作,仅用“已运行时间+1”来表示进程已

第三章习题(处理机调度与死锁)

一、单项选择题 1.在为多道程序所提供的可共享的系统资源不足时,可能出现死锁。但是,不适当的 c 也可能产生死锁。 A.进程优先权 B.资源的线性分配 C.进程推进顺序 D. 分配队列优先权 2.采用资源剥夺法可解除死锁,还可以采用 b 方法解除死锁。 A.执行并行操作 B.撤消进程 C.拒绝分配新资源 D.修改信号量 3.产生死锁的四个必要条件是:互斥、 b 、循环等待和不剥夺。 A. 请求与阻塞 B.请求与保持 C. 请求与释放 D.释放与阻塞 4.发生死锁的必要条件有四个,要防止死锁的发生,可以破坏这四个必要条件,但破坏 a 条件是不太实际的。 A. 互斥 B.不可抢占 C. 部分分配 D.循环等待 5.在分时操作系统中,进程调度经常采用 c 算法。 A.先来先服务 B.最高优先权 C.时间片轮转 D.随机 6.资源的按序分配策略可以破坏 D 条件。 A. 互斥使用资源 B.占有且等待资源 C.非抢夺资源 D. 循环等待资源 7.在 C 的情况下,系统出现死锁。 A. 计算机系统发生了重大故障 B.有多个封锁的进程同时存在 C.若干进程因竞争资源而无休止地相互等待他方释放已占有的资源 D.资源数大大小于进程数或进程同时申请的资源数大大超过资源总数 8.银行家算法是一种 B 算法。 A.死锁解除 B.死锁避免 C.死锁预防 D. 死锁检测 9.当进程数大于资源数时,进程竞争资源 B 会产生死锁。 A.一定 B.不一定 10. B 优先权是在创建进程时确定的,确定之后在整个进程运行期间不再改变。 A.先来先服务 B.静态 C.动态 D.短作业 11. 某系统中有3个并发进程,都需要同类资源4个,试问该系统不会发生死锁的最少资源数是 B A.9 B.10 C.11 D.12 答:B 13.当检测出发生死锁时,可以通过撤消一个进程解除死锁。上述描述是 B 。 A. 正确的 B.错误的 14.在下列解决死锁的方法中,属于死锁预防策略的是 B 。 A. 银行家算法 B. 资源有序分配法 C.死锁检测法 D.资源分配图化简法 15.以下叙述中正确的是 B 。 A. 调度原语主要是按照一定的算法,从阻塞队列中选择一个进程,将处理机分配 给它。 B.预防死锁的发生可以通过破坏产生死锁的四个必要条件之一来实现,但破坏互斥条件的可能性不大。 C.进程进入临界区时要执行开锁原语。 D.既考虑作业等待时间,又考虑作业执行时间的调度算法是先来先服务算法。

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

实验二作业调度 一.实验题目 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; //作业到达时间

计算机操作系统-处理机调度实验报告

中南大学 实验名称:处理机调度 课程名称:计算机操作系统 学生姓名盛希玲 学号 05 学院信息科学与工程学院 专业班级电子信息工程0602 完成时间 2008年10月12日

目录 一实验内容........................... 错误!未定义书签。二实验目的........................... 错误!未定义书签。三实验题目........................... 错误!未定义书签。四基本思想........................... 错误!未定义书签。五算法分析........................... 错误!未定义书签。六流程图............................. 错误!未定义书签。七算法描述........................... 错误!未定义书签。八运行输出结果....................... 错误!未定义书签。

一实验内容 选择一个调度算法,实现处理机调度。 二实验目的 多道系统中,当就绪进程数大于处理机数时,须按照某种策略决定哪些进程优先占用处理机。本实验模拟实现处理机调度,以加深了解处理机调度的工作。 三实验题目 设计一个按优先权调度和时间片轮转算法实现处理机调度的程序。 四基本思想 先选择时间片的个数和每个时间片需要的时间,正在运行的进程每运行一秒其优先权数目加一,即其优先权减小。每个时间片运行结束后,选择进入时间片进程优先权数目最小的进程,开始下一个时间片的运行。如果有进程运行结束,则离开,再在就绪队列中选择优先权数目最小的进程进入。在运行期间,如果有新的进程来到,按优先权大小放入就绪队列中。 五算法分析 定义一个结构体,此包含了PCB的信息: struct PCB { char PID[5]; /*进程名*/ int needtime; /*要求运行的时间*/ int cputime; /*已运行时间*/ int priority; /*优先权(越小越高)*/ int starttime; /*进入就绪队列的时间*/ int overtime; /*运行完成的时间*/ int state; /*状态:1就绪2运行3完成*/ struct PCB *next; }; 子函数struct PCB *create(int num,int n)用来建立一个按优先级大小排列的就绪进程链表和一个按时间先后循序排列的将进入就绪进程的链表。

操作系统-作业调度

操作系统-作业调度

一.各作业情况如下: 作业号到达时 刻 开始 时刻 运行 需时 结束 时刻 次 序 优先级 别 1 0 2 4 2 1 5 9 3 2 8 1 4 3 3 8 优先级为小值优先,求平均周转时间和带权平均周转时间? 1.先来先服务 2.短作业优先 3.静态优先 答: 1. 先来先服务 作业号到达时 刻 开始 时刻 运行 需时 结束 时刻 次 序 优先级 别 1 0 0 2 2 1 4 2 1 2 5 7 2 9 3 2 7 8 15 3 1 4 3 1 5 3 18 4 8 0时刻只有作业1到达,所以先执行1;2时刻作业2和3都到达,2先到所以执行2;7时刻

作业3和作业4都到达,3先所以执行3,再执行4 平均周转时间=[(2-0)+(7-1)+(15-2)+(18-3)]/4=9 平均带权周转时间=[(2-0)/2+(7-1)/5+(15-2)/8+(18-3)/3]/4 2.短作业优先 作业号到达时 刻 开始 时刻 运行 需时 结束 时刻 次 序 优先级 别 1 0 0 2 2 1 4 2 1 2 5 7 2 9 3 2 10 8 18 4 1 4 3 7 3 10 3 8 0时刻只有作业1到达,所以先执行1;2时刻作业2和3都到达,2短所以先执行2;7时刻作业3和4都到达,4短所以执行4,最后执行3 平均周转时间=[(2-0)+(7-1)+(18-2)+(10-3)]/4=7.75 平均带权周转时间=[(2-0)/2+(7-1)/5+(18-2)/8+(10-3)/3]/4 3.静态优先级

作业号到达时 刻 开始 时刻 运行 需时 结束 时刻 次 序 优先级 别 1 0 0 2 2 1 4 2 1 1 3 5 18 4 9 3 2 2 8 10 2 1 4 3 10 3 13 3 8 0时刻只有作业1到达,所以先执行1;2时刻作业2和3都到达,3优先值小所以先执行3;10时刻作业2和4都到达,4优先值小所以执行4,最后执行2 平均周转时间=[(2-0)+(18-1)+(10-2)+(13-3)]/4=9.25 平均带权周转时间=[(2-0)/2+(18-1)/5+(10-2)/8+(13-3)/3]/4 二.各进程情况如下: 进程号到达时 刻 开始 时刻 运行 需时 结束 时刻 次 序 优先级 别

计算机操作系统课程设计源代码《通用处理机调度演示程序源代码》

《通用处理机调度演示程序源代码》 //短作业优先算法 #define MaxNum 100 #include #include #include struct Process_struct{ int Number; //进程编号 char Name[MaxNum]; //进程名称 int ArrivalTime; //到达时间 int ServiceTime; //开始运行时间 int FinishTime; //运行结束时间 int WholeTime; //运行时间 int run_flag; //调度标志 int order; //运行次序 double WeightWholeTime; //周转时间 double AverageWT_FCFS,AverageWT_SJF; //平均周转时间 double AverageWWT_FCFS,AverageWWT_SJF; //平均带权周转时间 }Process[MaxNum]; int N; //实际进程个数 int SJF(); //短作业优先 int SJF(){ //短作业优先算法 int temp_time=0; //当期那时间 int i=0,j; int number_schedul,temp_counter; //进程编号,当前已执行进程个数 float run_time; run_time=Process[i].WholeTime; j=1; while((j

相关文档
最新文档