二进程同步算法模拟

合集下载

国家开放大学《操作系统》形考任务(应用题)参考答案

国家开放大学《操作系统》形考任务(应用题)参考答案

国家开放大学《操作系统》形考任务(应用题)参考答案1.用如图所示的进程状态转换图能够说明有关处理机管理的大量内容。

图进程状态转换图试回答:①什么事件引起每次显著的状态变迁?②下述状态变迁因果关系能否发生?为什么?参考答案:①就绪→运行:CPU空闲,就绪态进程被调度程序选中。

运行→就绪:正在运行的进程用完了本次分配给它的CPU时间片。

运行→阻塞:运行态进程因某种条件未满足而放弃对CPU的占用,如等待读文件。

阻塞→就绪:阻塞态进程所等待的事件发生了,例如读数据的操作完成。

②下述状态变迁:(A)2→1:可以。

运行进程用完了本次分配给它的时间片,让出CPU,从就绪队列中选一个进程投入运行。

(B)3→2:不可以。

任何时候一个进程只能处于一种状态,它既然由运行态变为阻塞态,就不能再由运行态变为就绪态。

(C)4→1:可以。

某一阻塞态进程等待的事件出现了,而且此时就绪队列为空,该进程进入就绪队列后马上又被调度运行。

2.系统中只有一台打印机,有三个用户的程序在执行过程中都要使用打印机输出计算结果。

设每个用户程序对应一个进程。

问:这三个进程间有什么样的制约关系?试用P、V操作写出这些进程使用打印机的算法。

参考答案:因为打印机是一种临界资源,所以这三个进程只能互斥使用这台打印机,即一个用户的计算结果打印完之后,另一个用户再打印。

设三个进程分别为A、B和C。

设一个互斥信号量mutex,其初值为1。

3.判断下列同步问题的算法是否正确?若有错,请指出错误原因并予以改正。

①设A,B两个进程共用一个缓冲区Q,A向Q写入信息,B从Q读出信息,算法框图如图左侧所示。

②设A,B为两个并发进程,它们共享一个临界资源。

其运行临界区的算法框图如图右侧所示。

参考答案:①这个算法不对。

因为A、B两个进程共用一个缓冲区Q,如果A先运行,且信息数量足够多,那么缓冲区Q中的信息就会发生后面的冲掉前面的,造成信息丢失,B就不能从Q中读出完整的信息。

改正:A、B两进程要同步使用缓冲区Q。

信号量在进程同步中的应用及实现

信号量在进程同步中的应用及实现
和着力解决的首要问题。
解决进程同步 问题 的算法构架 如下 :
到其他合作进程发 来的消息 之前则阻 与 进程 的互斥 不 同 , 进程 同步时 的信
塞 自己, 直到其他合作进程 给出协调信 号 量 只 与 制 约进 程 及 被制 约 进 程 有
其 号后被唤醒而继续执行 。 进程之间的这 关 而不 是与整 组并 发进 程有 关 , 称
种相互合作等 待对 方消息 的协 调关系 之 为私有 信号量 。 私有 信号量 赋初 为
学 术 纵 横
FZA ・UsU0G EG AHNX EH ZNH N
信号量在进程同步中的应用及实现
口 逯 广 义

要: 本文在阐述进程 同步基本 创建 的先后次序也都是不确定的 , 这就 互 斥信 号量 与所有 的并 发进 程有 关 , 个合作进程到达协调点后 , 在没有得 了公有 资 源 的数 量 ,初值 通 常 为 1 。

其二 : 由于进 程访问临界资 源 概念。进程就是进程实体的运行过程 , 值 只能由定义 在信号量上 的 P操 作原 对 出现 ;
而 界区 , 任何时刻只能 是系统进行 资源分配和调度 的一个独 语 和 V操 作原语来 改变 , Q是 个初 的那段资源称为I 所以在 立单位。 进程具有异 步性 即进程按各 自 始状 态为空 的队列 ,即信号量表 示某 有一个 进程进入 自己的临界 区。 独立的、不可预知的速度 向前推进 , 在 类 资源实体与进程 队列 有关 的整 形变 每个进程进 入临界 区之前 调用 P操作 争用临界资源时会 给系统造成混乱 , 于 量 。 根 据 进 程 是引入进程 同步 , 进程同步的主要任务 的制 约关 系信

w i s w i s= on- p a (): he < d o o ; t

练习题汇总-无答案

练习题汇总-无答案

进程管理(Part 2)一、填空题1.进程的“同步”和“互斥”反映了进程间①和②的关系。

2.死锁产生的原因是①和②。

3.产生死锁的四个必要条件是①、②、③、④。

4.在操作系统中,信号量是表示①的物理实体,它是一个与②有关的整型变量,其值仅能由③原语来改变。

5.每执行一次P原语,信号量的数值S减1。

如果S>=0,该进程①;若S<0,则②该进程,并把它插入该③对应的④队列中。

6.每执行一次V原语,信号量的数值S加1。

如果①,进程继续执行;如果S <=0,则从对应的②队列中移出一个进程R,该进程状态变为③。

7.利用信号量实现进程的①,应为临界区设置一个信号量mutex。

其初值为②,表示该资源尚未使用,临界区应置于③和④原语之间。

8.在多道环境下,由于进程的并发执行,一段程序为多个进程①时,要求在执行的过程中,该段程序的指令和数据不能被②,这样的程序段称为③。

二、单项选择题1.在非剥夺调度方式下,运行进程执行V原语之后,其状态。

(A)不变(B)要变(C)可能要变(D)可能不变2.两个进程争夺同一个资源。

(A)一定死锁(B)不一定死锁(C)不死锁(D)以上说法都不对3.①是一种只能由P操作和V操作进行访问的特殊变量,可以用来实现异步并行进程间的②以排它地访问共享数据,还可以用来实现③,实现进程间在逻辑上的相互制约关系。

(A)调度(B)类程(C)进程(D)互斥(E)信号量(F)控制变量(G)同步(H)共享变量(I)规程(J)分配4.可以被多个进程在任一时刻共享的代码必须是。

(A)不能自身修改的纯码(B)顺序代码(C)无转移指令的代码(D)汇编语言编制的代码5.当对信号量进行V原操作之后,。

(A)当S<0,进程继续执行(B)当S>0,要唤醒一个就绪进程(C)当S<=0,要唤醒一个等待进程(D)当S<=0,要唤醒一个就绪进程6.在下列叙述中,错误的一条是。

(A)进程被撤消时,只需释放该进程的PCB就可以了,因为PCB是进程存在的唯一标志(B)进程的互斥和同步都能用P/V原语实现(C)用户程序中执行系统调用命令时,处理机的状态字将发生改变(D)设备独立性是指用户在编程时,所使用的设备与实际设备无关7.正在运行的进程在信号量S上作P操作之后,当S<0,进程将进入信号量的。

第二章进程同步典型习题

第二章进程同步典型习题

east() {
p(emutex); if e=0 then p(wait); e++; v(emutex); 车辆过桥; p(emutex); e--; if e=0 then v(wait); v(emutex);
west() {
p(wmutex); if w=0 then p(wait); w++; v(wmutex); 车辆过桥; p(wmutex); w--; if w=0 then v(wait); v(wmutex);
process E->W; ; begin …… P(S1); ( ); 过桥; 过桥; V(S2); ( ); …… end; ;
process W->E; ; begin …… P(S2); ( ); 过桥; 过桥; V(S1); ( ); …… end; ;
3.设有三个进程A、B、C,其中A与B构成一 3.设有三个进程A、B、C,其中A 设有三个进程A、B、C,其中 对生产者和消费者,共享一个由1个缓冲区组 对生产者和消费者,共享一个由1 成的缓冲池;B与C也构成一对生产者和消费 成的缓冲池;B与 ;B 者,共享另一个由1个缓冲区组成的缓冲池。 共享另一个由1个缓冲区组成的缓冲池。 用PV操作描述它们的同步关系。 PV操作描述它们的同步关系。 操作描述它们的同步关系
1.答: 答 1)各进程之间的关系是互斥 ) 2)可定义一个互斥信号量 S,S的初值为 1。用 PV操作管理时 S可能 ) , 的初值为 。 操作管理时 可能 的取值为 1、0及<0, 、 及 , 这些值的含义是: 这些值的含义是: S=1时表示无车辆在 段行驶,若有某车辆欲进人AB段则立即可以 时表示无车辆在AB段行驶,若有某车辆欲进人 段则立即可以 时表示无车辆在 段行驶 进入。 进入。 S=0时表示已有一车辆正在 AB段行驶,这时任何其它车辆欲进入 段行驶, 时表示已有一车辆正在 段行驶 AB段都必须等待。 段都必须等待。 段都必须等待 S<0时其绝对值 表示在 A点等待进入 AB段行驶的车辆数。 时其绝对值|S|表示在 点等待进入 段行驶的车辆数。 时其绝对值 段行驶的车辆数 3)用PV操作管理时进程的程序如下: 操作管理时进程的程序如下: ) 操作管理时进程的程序如下 begin 到达A点 到达 点; P(S); ( ) 段行驶; 在AB段行驶; 段行驶 驶出B点 驶出 点; V(S); ( ) end

计算机操作系统进程同步算法习题选

计算机操作系统进程同步算法习题选

s
t
解:
设置四个信号量Sin=1,Sout=0,Tin=1,Tout=0; get: while(1) { wait(Sin); 将数放入S; signal (Sout); } copy: while(1) { wait (Sout); wait (Tin); 将数从S取出放入T; signal (Tout); signal (Sin); } put: while(1) { wait (Tout); 将数从T取走; signal(Tin); }

A1: while (1) { wait(Sin[1]); wait(Sin[2]); 将数据放入缓冲区 signal(Sout[1]); signal(Sout[2]); }
Bi: while (1) { wait(Sout[i]); 从缓冲区取数 signal(Sin[i]); }
向目标前进一步:
司机进程: while(1) { 启动车辆
正常驾驶 到站停车 }…
售票 员 进程 : while(1) { 关门
售票
}…
开门
分析:
为保证车辆行驶安全,售票员必须关好车门, 然后通知司机启动车辆,在行驶过程中售票员不 能打开车门,待车到站停稳后,司机通知售票员 才能打开车门,如此不断重复。为此,须设置两 个信号量S1,S2用来控制司机和售票员的行为, 初值都为0。
解:
算法如下: 司机进程: while(1) { wait(S1) 启动车辆 正常驾驶 到站停车 signal(S2) }… 售票员进 程: while(1) { 关门 signal(S1)
售票
wait(S2) 开门 }…
【例题2】
1.用wait、signal操作解决下图之同步问题 提示:分别考虑对缓冲区S和T的同步,再 合并考虑 get copy put

过程控制仿真实验

过程控制仿真实验

过程控制仿真实验1.背景在现代计算机系统中,多任务操作系统可以同时运行多个进程或任务。

这些进程之间可能存在资源竞争和冲突,并需要操作系统进行合理的调度和控制。

过程控制是指操作系统对这些进程的控制和管理,以确保它们按照一定的顺序和优先级进行执行,达到系统的稳定和高效运行。

因此,了解和掌握过程控制的原理和机制对于设计和优化计算机操作系统至关重要。

2.目的过程控制仿真实验的目的是通过模拟和仿真操作系统的过程控制流程来深入理解和掌握过程控制的原理和机制。

通过实际操作和观察,可以更好地理解和分析进程的调度、同步和通信等问题,从而提高操作系统的性能和可靠性。

3.方法3.1设计实验任务首先需要确定实验的任务和目标。

例如,可以设计一个进程调度实验,要求模拟操作系统对多个进程进行调度的过程。

3.2编写模拟程序根据实验任务,编写一个模拟程序,该程序包含多个进程或任务。

每个进程都有自己的优先级、执行时间和资源需求等属性。

同时,编写相应的调度算法,如先来先服务(FCFS)、最短作业优先(SJF)或轮转调度(RR)等。

3.3运行模拟程序在计算机上运行模拟程序,并观察和记录每个进程的执行情况。

可以使用图形界面或命令行界面显示进程状态、执行时间和资源占用等信息。

3.4分析和讨论结果根据模拟程序的运行结果,分析和讨论进程的调度和执行顺序。

比较不同调度算法的性能和效果,并提出改进意见和建议。

4.结果4.1不同调度算法的性能差异通过比较模拟程序在不同调度算法下的运行结果,可以分析和比较它们的性能差异。

例如,FCFS算法可能导致一些进程等待时间过长,而RR算法可以较好地平衡进程的执行时间。

4.2进程同步和通信的问题在模拟程序中,可以设置一些资源竞争和冲突的情况,以测试操作系统对进程同步和通信的处理能力。

通过观察和分析进程之间的互动和通信情况,可以发现潜在的问题和改进的方向。

4.3操作系统的优化建议通过实验结果和分析,可以提供一些针对操作系统的优化建议。

华科操作系统实验报告

华科操作系统实验报告

华科操作系统实验报告一、实验目的操作系统是计算机系统的核心组成部分,对于理解计算机的工作原理和提高计算机应用能力具有重要意义。

本次华科操作系统实验的主要目的是通过实际操作和实践,深入理解操作系统的基本概念、原理和功能,掌握操作系统的核心技术和应用方法,提高我们的实践能力和问题解决能力。

二、实验环境本次实验使用的操作系统为Windows 10 和Linux(Ubuntu 2004),开发工具包括 Visual Studio Code、GCC 编译器等。

实验硬件环境为个人计算机,配置为英特尔酷睿 i7 处理器、16GB 内存、512GB 固态硬盘。

三、实验内容1、进程管理进程创建与销毁进程调度算法模拟进程同步与互斥2、内存管理内存分配与回收算法实现虚拟内存管理3、文件系统文件操作与管理文件系统的实现与优化4、设备管理设备驱动程序编写设备分配与回收四、实验步骤及结果1、进程管理实验进程创建与销毁首先,使用 C 语言编写程序,通过系统调用创建新的进程。

在程序中,使用 fork()函数创建子进程,并在子进程和父进程中分别输出不同的信息,以验证进程的创建和执行。

实验结果表明,子进程和父进程能够独立运行,并输出相应的信息。

进程调度算法模拟实现了先来先服务(FCFS)、短作业优先(SJF)和时间片轮转(RR)三种进程调度算法。

通过模拟多个进程的到达时间、服务时间和优先级等参数,计算不同调度算法下的平均周转时间和平均等待时间。

实验结果显示,SJF 算法在平均周转时间和平均等待时间方面表现较好,而 RR 算法能够提供较好的响应时间和公平性。

进程同步与互斥使用信号量和互斥锁实现了进程的同步与互斥。

编写了生产者消费者问题的程序,通过信号量控制生产者和消费者对缓冲区的访问,避免了数据竞争和不一致的情况。

实验结果表明,信号量和互斥锁能够有效地实现进程间的同步与互斥,保证程序的正确性。

2、内存管理实验内存分配与回收算法实现实现了首次适应(First Fit)、最佳适应(Best Fit)和最坏适应(Worst Fit)三种内存分配算法。

进程的调度实验报告(3篇)

进程的调度实验报告(3篇)

第1篇一、实验目的通过本次实验,加深对操作系统进程调度原理的理解,掌握先来先服务(FCFS)、时间片轮转(RR)和动态优先级(DP)三种常见调度算法的实现,并能够分析这些算法的优缺点,提高程序设计能力。

二、实验环境- 编程语言:C语言- 操作系统:Linux- 编译器:GCC三、实验内容本实验主要实现以下内容:1. 定义进程控制块(PCB)结构体,包含进程名、到达时间、服务时间、优先级、状态等信息。

2. 实现三种调度算法:FCFS、RR和DP。

3. 创建一个进程队列,用于存储所有进程。

4. 实现调度函数,根据所选算法选择下一个执行的进程。

5. 模拟进程执行过程,打印进程执行状态和就绪队列。

四、实验步骤1. 定义PCB结构体:```ctypedef struct PCB {char processName[10];int arrivalTime;int serviceTime;int priority;int usedTime;int state; // 0: 等待,1: 运行,2: 完成} PCB;```2. 创建进程队列:```cPCB processes[MAX_PROCESSES]; // 假设最多有MAX_PROCESSES个进程int processCount = 0; // 实际进程数量```3. 实现三种调度算法:(1)FCFS调度算法:```cvoid fcfsScheduling() {int i, j;for (i = 0; i < processCount; i++) {processes[i].state = 1; // 设置为运行状态printf("正在运行进程:%s\n", processes[i].processName); processes[i].usedTime++;if (processes[i].usedTime == processes[i].serviceTime) { processes[i].state = 2; // 设置为完成状态printf("进程:%s 完成\n", processes[i].processName); }for (j = i + 1; j < processCount; j++) {processes[j].arrivalTime--;}}}```(2)RR调度算法:```cvoid rrScheduling() {int i, j, quantum = 1; // 时间片for (i = 0; i < processCount; i++) {processes[i].state = 1; // 设置为运行状态printf("正在运行进程:%s\n", processes[i].processName); processes[i].usedTime++;processes[i].serviceTime--;if (processes[i].serviceTime <= 0) {processes[i].state = 2; // 设置为完成状态printf("进程:%s 完成\n", processes[i].processName); } else {processes[i].arrivalTime++;}for (j = i + 1; j < processCount; j++) {processes[j].arrivalTime--;}}}```(3)DP调度算法:```cvoid dpScheduling() {int i, j, minPriority = MAX_PRIORITY;int minIndex = -1;for (i = 0; i < processCount; i++) {if (processes[i].arrivalTime <= 0 && processes[i].priority < minPriority) {minPriority = processes[i].priority;minIndex = i;}}if (minIndex != -1) {processes[minIndex].state = 1; // 设置为运行状态printf("正在运行进程:%s\n", processes[minIndex].processName);processes[minIndex].usedTime++;processes[minIndex].priority--;processes[minIndex].serviceTime--;if (processes[minIndex].serviceTime <= 0) {processes[minIndex].state = 2; // 设置为完成状态printf("进程:%s 完成\n", processes[minIndex].processName); }}}```4. 模拟进程执行过程:```cvoid simulateProcess() {printf("请选择调度算法(1:FCFS,2:RR,3:DP):");int choice;scanf("%d", &choice);switch (choice) {case 1:fcfsScheduling();break;case 2:rrScheduling();break;case 3:dpScheduling();break;default:printf("无效的调度算法选择。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

实验二进程同步算法模拟一、实验目的1、模拟设计一种进程调度过程:FCFS、短作业优先、高响应比优先(任选其一)。

2、算法代码实现,模拟数据演示,模拟结果验证。

二、实验学时4课时三、实验环境与平台Windows 2000, C/C++程序开发集成环境(开发语言可自选)四、实验内容及要求1、实验内容:(1)自定义PCB的数据结构;(2)针对资源分配中出现的问题,选择适合的算法,实现资源的合理分配。

2、实验要求:(1)完成规定的实验内容;(2)在实验之前,利用课外时间浏览帮助文件的相关主题内容;(3)实验时保存程序代码;(4)写出实验报告.(实验目的、实验时间、实验设备和实验环境平台、完成的实验内容、实验结果和结论)。

五、完成的实验内容下例是用C语言编写,用TC2.0调试结果六、实现代码如下:#include "stdio.h"#define getjcb(type) (type*)malloc(sizeof(type))#define NULL 0int n=0,time=0;float eti,ewi;struct jcb{ char name[10]; /* 作业名 */char state; /* 作业状态 */int ts; /* 提交时间 */float super; /* 优先权 */int tb; /* 开始运行时间 */int tc; /* 完成时间 */float ti; /* 周转时间 */float wi; /* 带权周转时间 */int ntime; /* 作业所需运行时间 */ char resource[10]; /* 所需资源 */struct jcb *link; /* 结构体指针 */} *p,*q,*head=NULL;typedef struct jcb JCB;inital(){int i;printf("\nInput jcb num\n");scanf("%d",&n);printf("Input\nname\tts\tntime\tresource\n");for(i=0;i<n;i++){p=getjcb(JCB);scanf("%s\t%d\t%d\t%s",&p->name,&p->ts,&p->ntime,&p->resou rce);p->state='W';p->link=NULL;if(head==NULL) head=q=p;else{ q->link=p; q=p; }}}fileinput(){FILE *fp;int i;if((fp=fopen("os2.txt","r"))==NULL) printf(" open error!") ; fscanf(fp,"%d\n",&n);for(i=0;i<n;i++){p=getjcb(JCB);fscanf(fp,"%s%d%d%s",&p->name,&p->ts,&p->ntime,&p->resource );p->state='W';p->link=NULL;if(head==NULL) head=q=p;else{q->link=p;q=p;}} fclose(fp);}void print(JCB *pr,int m){JCB *p;printf("\ntime=%d",time);if(m==3){printf("\nname\tstate\tts\tntime\tsuper\tsource\ttb\ttc\tti\twi\n");printf("%s\t%c\t%d\t%d\t%4.2f\t%s\t%d\t%d\t%4.2f\t%4.2f\n",pr->name,pr->state,pr->ts,pr->ntime,pr->super,pr->resource,pr->tb,pr->tc,pr->ti,pr->wi);} else {printf("\nname\tstate\tts\tntime\tsource\ttb\ttc\tti\twi\n"); printf("%s\t%c\t%d\t%d\t%s\t%d\t%d\t%4.2f\t%4.2f\n", pr->name,pr->state,pr->ts,pr->ntime,pr->resource,pr->tb,pr->tc,pr->ti,pr->wi); }p=head;do{ if(p->state=='W')if(m==3){printf("%s\t%c\t%d\t%d\t%4.2f\t%s\n",p->name,p->state,p->ts,p->ntime,p->super,p->resource);}else{printf("%s\t%c\t%d\t%d\t%s\n",p->name,p->state,p->ts,p->ntime,p->resource);}p=p->link;}while(p!=NULL);p=head;do{if(p->state=='F')if(m==3){printf("%s\t%c\t%d\t%d\t%4.2f\t%s\t%d\t%d\t%4.2f\t%4.2f\n",p->name,p->state,p->ts,p->ntime,p->super,p->resource,p->tb, p->tc,p->ti,p->wi);}else{printf("%s\t%c\t%d\t%d\t%s\t%d\t%d\t%4.2f\t%4.2f\n",p->name,p->state,p->ts,p->ntime,p->resource,p->tb,p->tc,p-> ti,p->wi);}p=p->link;}while(p!=NULL);}void last(){eti/=n;ewi/=n;printf("\neti=%7.3f\tewi=%7.3f\n",eti,ewi);}super(){JCB *padv;padv=head;do{if(padv->state=='W'&&padv->ts<=time)padv->super=(float)(time-padv->ts+padv->ntime)/padv->ntime; padv=padv->link;}while(padv!=NULL);}void hrn(m){JCB *min;int i,iden;for(i=0;i<n;i++){p=min=head;iden=1;super();do{if(p->state=='W'&&p->ts<=time)if(iden){min=p;iden=0;}else if(p->super>min->super) min=p;p=p->link;}while(p!=NULL);if(iden) {i--;time++;printf("\ntime=%d:\tno JCB submib...wait...",time);if(time>1000){printf("\nruntime is too long...error...");getch();}}else{running(min,m);}}}void sjf(int m){JCB *min;int i,iden;for(i=0;i<n;i++){p=min=head;iden=1;do{if(p->state=='W'&&p->ts<=time)if(iden){min=p;iden=0;}else if(p->ntime<min->ntime) min=p;p=p->link;}while(p!=NULL) ;if(iden) {i--;printf("\ntime=%d:\tno JCB submib...wait...",time);time++;if(time>100){printf("\nruntime is too long...error");getch();}}else{running(min,m);}}}fcfs(int m){int i,iden;printf("\n\nthe jcb is runing...");for(i=0;i<n;i++){p=head;iden=1;do{if(p->state=='W'&&p->ts<=time) iden=0;if(iden)p=p->link;}while(p!=NULL&&iden) ;if(iden) {i--;printf("\ntime=%d:\tno JCB submib...wait...",time);time++;if(time>100){printf("\nruntime is too long...error");getch();}}else{running(p,m);}}}running(JCB *p,int m){p->tb=time;p->state='R';p->tc=p->tb+p->ntime;p->ti=(float)(p->tc-p->ts);p->wi=(float)(p->ti/p->ntime);eti+=p->ti;ewi+=p->wi;print(p,m);time+=p->ntime;p->state='F';printf("\n%s has been finished!\npress any key to continue...\n",p->name);getch();}void runjcb(int m){printf("\n\nstart running jcb...");switch(m){case 1:fcfs(m);break;case 2:sjf(m);break;case 3:hrn(m);break;default:printf("\nrunjcb error...\n");exit();}}fileway(){printf("\nadopts the file way to input the datas...y/n:") ; if(getch()=='y') fileinput();else inital();}start(){int m;char str[100]="\nselect algorithm\n1.FCFS\n2.SJF\n3.HRN\n" ;printf("%s",str);m=getch()-48;fileway();if(1<=m&&m<=3) runjcb(m);else {printf("\nselect error!try again...\n");start();}last();}main(){start();printf("\nfinished!");getch();}六、实验结果七、结论分析本例依次实现了FCFS,SJF,HRN算法,我只对SJF算法即短作业优先调度算法进行了实验按要求输入数据,如上图所示,即:进程个数(jcd num):5执行后,输出周转时间ti、带权周转时间wi,而且是逐次运行。

相关文档
最新文档