时间片轮转法

合集下载

实验二带优先级的时间片轮换的进程调度算法的实现

实验二带优先级的时间片轮换的进程调度算法的实现


struct pcb *p;

for (i=0;i<MAXPIOR;i++)

{p=array[i];

while (p!=NULL)

{printf("id:%d,state:%d,pior:%d,life:%d\n",p->ident,p->state,p->pior,p->life);

p=p->next;
• {int i=0,ii=0;
• for (i=0;i<7;i++)

if (stricmp(str,command[i])==0)

break;
• switch(i)

{case 0:printf("thank you for using the program!\n");exit(0);

break;
•{

int i=MAXPIOR-1,pior=0,t;

struct pcb *pp,*qq,*pr,*r;

do

{

while (i>=0 && array[i]==NUf (i<0)

{

printf("NO process,please create it! \n");
第1个,再降低其优先级,插入到相应的队列中。 C)ps 查看当前进程状态 D)sleep 命令将进程挂起 E)awake 命令唤醒1个被挂起的进程 F)kill 命令杀死进程 G)quit命令退出 (4)选用面向对象的编程方法。

操作系统实验三 时间片轮转法完成进程调度

操作系统实验三 时间片轮转法完成进程调度

实验三:时间片轮转法完成进程调度一、实验目的:(1)加深对进程的理解(2)理解进程控制块的结构(3)理解进程运行的并发性(4)掌握时间片轮转法进程调度算法实验内容:(1)建立进程控制块(2)设计三个链队列,分别表示运行队列、就绪队列和完成队列(3)用户输入进程标识符以及进程所需的时间,申请空间存放进程PCB信息。

(4)每一个时间片结束输出各进程的进程号,CPU时间(即已经占用的CPU时间),所需时间(即还需要的CPU时间),以及状态(即用W表示等待,R表示运行,F表示完成)实验程序:#include <stdio.h>#include <stdlib.h>#include <string.h>typedef struct node{char name[10];/*进程标识符*/int prio;/*进程优先数*/int round;/*进程时间轮转时间片*/int cputime; /*进程占用CPU时间*/int needtime; /*进程到完成还要的时间*/int count;/*计数器*/char state; /*进程的状态*/struct node *next; /*链指针*/}PCB;PCB *finish,*ready,*tail,*run; //队列指针int N,t; //进程数,时间片的大小void firstin(){run=ready;//就绪队列头指针赋值给运行头指针run->state='R'; //进程状态变为运行态ready=ready->next; //就绪队列头指针后移到下一进程}void prt1(char a)//输出标题函数{if(toupper(a)=='P')//优先级法printf("进程名占用CPU时间到完成还要的时间轮转时间片状态\n");} void prt2(char a,PCB *q)//进程PCB输出{if(toupper(a)=='P')//优先级法的输出printf("%4s %8d %12d %14d %8c\n",q->name,q->cputime,q->needtime,q->roun d,q->state);}void prt(char algo)//输出函数二、三、{PCB *p;prt1(algo);//输出标题if(run!=NULL)//如果运行指针不空prt2(algo,run);//输出当前正在运行的PCBp=ready;//输出就绪队列PCBwhile(p!=NULL){prt2(algo,p);p=p->next;}p=finish;//输出完成队列的PCBwhile(p!=NULL){prt2(algo,p);p=p->next;}getchar(); //按住任意键继续}void insert(PCB *q)//时间片轮转的插入算法{PCB *p1,*s,*r;s=q;//待插入的PCB指针p1=ready;//就绪队列头指针r=p1;//*r做pl的前驱指针while(p1!=NULL)if(p1->round<=s->round){r=p1;p1=p1->next;}if(r!=p1){r->next=s;s->next=p1;}else{s->next=p1;//否则插入在就绪队列的头ready=s;}}void create(char alg)//时间片轮转法创建链表进程PCB{PCB *p;int i,time;char na[10];ready=NULL;finish=NULL;run=NULL;printf("输入进程名及其需要运行的时间(中间以空格隔开):\n"); for(i=1;i<=N;i++){p=new PCB;scanf("%s %d",&na,&time);strcpy(p->name,na);p->cputime=0;p->needtime=time;p->state='W';//进程的状态p->round=0;if(ready!=NULL)insert(p);else{p->next=ready;ready=p;}}printf("*************时间片轮转法进程调度过程*************\n"); prt(alg);run=ready;ready=ready->next;run->state='R';}void timeslicecycle(char alg)//时间片轮转法{while(run!=NULL){run->cputime=run->cputime+t;//处理时间加trun->needtime=run->needtime-t;//完成需要时间减trun->round=run->round+t;//运行完将其变为完成态,插入完成队列if(run->needtime<=0)//当进程完成时{run->next=finish;finish=run;run->state='F';run=NULL;if(ready!=NULL)//就绪队列不空,将第一个进程投入进行firstin();}else{run->state='W';//将进程插入到就绪队列中等待轮转insert(run);//将就绪队列的第一个进程投入运行firstin();}prt(alg);}}void main()//主函数{char algo='P';//算法标记printf("输入进程的个数:");scanf("%d",&N);//输入进程数printf("定义时间片大小:");scanf("%d",&t);//输入时间片大小create(algo);//创建进程timeslicecycle(algo);//时间片轮转法调度}//main()四、实验结果:五、实验小结:时间片轮转调度是一种最古老,最简单,最公平且使用最广的算法。

操作系统实验二报告-时间片轮转进程调度算法1

操作系统实验二报告-时间片轮转进程调度算法1

操作系统实验报告实验二时间片轮转进程调度算法学号:班级:姓名:【实验题目】: 时间片轮转进程调度算法【实验目的】通过这次实验, 加深对进程概念的理解, 进一步掌握进程状态的转变、进程调度的策略与对系统性能的评价方法。

【实验内容】问题描述:设计程序模拟进程的时间片轮转RR 调度过程。

假设有n 个进程分别在T1, … ,Tn 时刻到达系统, 它们需要的服务时间分别为S1, … ,Sn 。

分别利用不同的时间片大小q, 采用时间片轮转RR 进程调度算法进行调度, 计算每个进程的完成时间, 周转时间和带权周转时间, 并且统计n 个进程的平均周转时间和平均带权周转时间。

程序要求如下:1)进程个数n ;每个进程的到达时间T 1, … ,T n 和服务时间S 1, … ,S n ;输入时间片大小q 。

2)要求时间片轮转法RR 调度进程运行, 计算每个进程的周转时间, 带权周转时间, 并且计算所有进程的平均周转时间, 带权平均周转时间;3)输出: 要求模拟整个调度过程, 输出每个时刻的进程运行状态, 如“时刻3: 进程B开始运行”等等;4)输出:要求输出计算出来的每个进程的周转时间, 带权周转时间, 所有进程的平均周转时间, 带权平均周转时间。

实现提示:用C++语言实现提示:1)程序中进程调度时间变量描述如下:int ArrivalTime[100];int ServiceTime[100];int PServiceTime[100];int FinishTime[100];int WholeTime[100];double WeightWholeTime[100];double AverageWT,AverageWWT;bool Finished[100];➢2)进程调度的实现过程如下:➢变量初始化;➢接收用户输入n, T1, … ,Tn, S1, … ,Sn;时间片大小q;➢按照时间片轮转RR算法进行进程调度, 计算进程的完成时间、周转时间和带权周转时间;➢计算所有进程的平均周转时间和平均带权周转时间;➢按格式输出调度结果。

时间片轮转算法和优先级调度算法

时间片轮转算法和优先级调度算法

时间片轮转算法和优先级调度算法-C语言模拟实现-收藏时间片轮转算法和优先级调度算法C语言模拟实现收藏一、目的和要求进程调度是处理机管理的核心内容。

本实验要求用高级语言编写模拟进程调度程序,以便加深理解有关进程控制快、进程队列等概念,并体会和了解优先数算法和时间片轮转算法的具体实施办法。

二、实验内容1. 设计进程控制块PCB的结构,通常应包括如下信息:进程名、进程优先数(或轮转时间片数)、进程已占用的CPU时间、进程到完成还需要的时间、进程的状态、当前队列指针等。

2. 编写两种调度算法程序:优先数调度算法程序循环轮转调度算法程序3. 按要求输出结果。

二、提示和说明分别用两种调度算法对伍个进程进行调度。

每个进程可有三种状态;执行状态(RUN)、就绪状态(READY,包括等待状态)和完成状态(FINISH ),并假定初始状态为就绪状态。

(一)进程控制块结构如下:NAME ----- 进程标示符PRIO/ROUND ――进程优先数/进程每次轮转的时间片数(设为常数2)CPUTIME ――进程累计占用CPU的时间片数NEEDTIME ――进程到完成还需要的时间片数I STATE——进程状态NEXT ――链指针注:2.各进程的优先数或轮转时间片数,以及进程运行时间片数的初值,均由用户在程序运行时给定。

(二)进程的就绪态和等待态均为链表结构,共有四个指针如下:RUN ――当前运行进程指针READY ――就需队列头指针TAIL ――就需队列尾指针FINISH ――完成队列头指针(三)程序说明1. 在优先数算法中,进程优先数的初值设为:50-NEEDTIME每执行一次,优先数减1,CPU时间片数加1,进程还需要的时间片数减1。

在轮转法中,采用固定时间片单位(两个时间片为一个单位),进程每轮转一次,CPU时间片数加2,进程还需要的时间片数减2,并退出CPU,排到就绪队列尾,等待下一次调度。

2. 程序的模块结构提示如下:整个程序可由主程序和如下7个过程组成:(1)INSERT1 ――在优先数算法中,将尚未完成的PCB按优先数顺序插入到就绪队列中;(2)INSERT2 ――在轮转法中,将执行了一个时间片单位(为2),但尚未完成的进程的PCB,插到就绪队列的队尾;(3)FIRSTIN ――调度就绪队列的第一个进程投入运行;(4)PRINT ――显示每执行一次后所有进程的状态及有关信息。

时间片轮转调度算法实验报告

时间片轮转调度算法实验报告

xx大学操作系统实验报告姓名:学号:班级:实验日期:实验名称:时间片轮转RR进程调度算法实验二时间片轮转RR进程调度算法1.实验目的:通过这次实验,理解时间片轮转RR进程调度算法的运行原理,进一步掌握进程状态的转变、进程调度的策略及对系统性能的评价方法。

2.需求分析(1) 输入的形式和输入值的范围;输入:进程个数n 范围:0<n<=100时间片q依次输入(进程名进程到达时间进程服务时间)所有进程平均带权周转时间:(3) 程序所能达到的功能1)进程个数n,输入时间片大小q,每个进程的到达时间T1, … ,T n和服务时间S1, … ,S n。

2)要求时间片轮转法RR调度进程运行,计算每个进程的周转时间和带权周转时间,并且计算所有进程的平均周转时间和带权平均周转时间;3)输出:模拟整个调度过程,输出每个时刻的进程运行状态;4)输出:输出计算出来的每个进程的周转时间、带权周转时间、所有进程的平均周转时间以及带权平均周转时间。

(4) 测试数据,包括正确的输入及其输出结果和含有错误的输入及其输出结果。

正确输入:错误输入:2、概要设计所有抽象数据类型的定义:static int MaxNum=100int ArrivalTime //到达时间int ServiceTime //服务时间int FinishedTime //结束时间int WholeTime //周转时间double WeightWholeTime //带权周转时间double AverageWT //平均周转时间double AverageWWT //平均带权周转时间主程序的流程:●变量初始化●接受用户输入的n,q ,T1…..Tn,S1….Sn;●进行进程调度,计算进程的开始运行时间、结束时间、执行顺序、周转时间、带权周转时间;●计算所有进程的平均周转时间、平均带权周转时间;●按照格式输出调度结果。

各程序模块之间的层次(调用)关系Main函数通过对Input函数进行调用,对函数的成员变量进行赋值,再通过RRAlgorithm函数求出题目要求的各个数据结果,最后通过display函数对结果进行格式输出。

实验进程调度

实验进程调度

淮海工学院计算机科学系实验报告书课程名:《操作系统原理》题目:实验一进程管理班级:Z软件52学号:2017140595姓名:郭文静1、实验目的与要求进程是操作系统最重要的概念之一,进程调度是操作系统内核的重要功能,本实验要求用C/C++语言编写一个进程调度模拟程序,至少使用最高优先权优先或时间片轮转法两种算法来实现进程调度。

通过本实验可加深对进程调度算法的理解。

1、设计有5个进程并发执行的模拟调度程序,每个程序由一个PCB表示。

2、模拟调度程序至少使用最高优先权优先或时间片轮转法两种算法来实现进程调度。

3、程序执行中应能在屏幕上显示出各进程的状态变化,以便于观察调度的整个过程。

2、实验内容或题目2.1优先级算法说明(1)PCB的结构:优先级算法中,设PCB的结构如右图所示,其中各数据项的含义Array如下:Id:进程标识符号,取值1—5。

Prior:优先级,随机产生,范围5—10。

Used:目前已占用的CPU时间数,初值为0;当该进程被调用执行时,每执行一个时间片,Used加1。

Need:进程尚需的CPU时间数,初值表示该进程需要运行的总时间,取值范围为1—5。

并随机产生,每运行一个时间片need减1;need为0则进程结束。

Status:进程状态R(运行),J(就绪),F(完成);初始时都处于就绪状态。

Next:指向就绪队列中下一个进程的PCB的指针。

(2)初始状态及就绪队列组织:5个进程初始都处于就绪状态,进程标识1—5,used初值都为0。

各进程的优先级随机产生,范围1—5。

处于就绪状态的进程,用队列加以组织,队列按优先级由高到低依次排列,队首指针设为head。

(3)调度原则以及运行时间的处理:正在执行的进程每执行一个时间片,其优先级减1(允许优先级为负)。

进程调度将在以下情况发生:当正在运行的程序其优先级小于就绪队列队首进程的优先级时。

程序中进程的运行时间以逻辑时间片为单位。

2.2时间片轮转算法说明(1)PCB的结构(如下图所示):轮转法中,设PCB的结构如右图所示,其中各数据项的含义如下:Span:在某一轮中,分配给先运行进程的时间片数,取值1—3。

时间片轮转调度

时间片轮转调度

时间片轮转调度实验性质:设计建议学时:2学时一、实验目的为EOS调度器添加时间片轮转调度算法,了解常用调度算法。

二、预备知识阅读《EOS实验指南》5.4节。

重点理解EOS当前使用的基于优先级的抢先式调度,调度程序执行的过程和时机,以及时间片轮转调度实现的方法。

三、实验内容3.1准备实验按照下面的步骤准备实验:1.启动OS Lab。

2.新建一个EOS Kernel项目。

3.在"项目管理器”窗口中双击Floppy.img文件,使用FloppylmageEditor工具打开此软盘镜像。

4.将本实验文件夹中的multi.exe文件添加到软盘镜像的根目录中。

5.点击FloppyImageEditor工具栏上的保存按钮,关闭该工具。

3.2阅读multi.exe的源代码在本实验文件夹中找到multi.exe的源代码文件multi.c,使用OS Lab打开此文件,仔细阅读此文件中的源代码。

在阅读的过程中需要注意下面的问题:在main函数中使用ThreadFunction线程函数创建了23个新线程。

这样在该应用程序创建的进程中,算上主线程后就会包括24个线程。

主线程会在控制台的第0行循环输出计数,其它的线程也会在控制台的对应行循环输出计数,这样就可以很方便的观察各个线程执行的情况。

各个线程在向控制台输出时使用“关中断”和“开中断”进行了互斥。

原则上在应用程序中是不能使用“关中断”和“开中断”指令的,这里是为了保证各个线程不进行让权等待,保证实验的效果。

为了保证实验效果,所有的线程(包括主线程)都是死循环。

也就是说所有的线程都不会结束执行。

3.3 执行multi.exe按照下面的步骤执行multi.exe,查看其运行效果:1.按F7生成在3.1中创建的EOS Kernel项目。

2.按F5启动调试。

3.在EOS控制台中输入“ A:\multi.exe ”后按回车。

在multi.exe开始执行后,观察其执行结果(如图1)会发现multi.exe的执行没有体现其源代码的设计意图。

进程调度模拟设计——时间片轮转、优先级法

进程调度模拟设计——时间片轮转、优先级法

学号:课程设计课程名字系统软件开发实训A题目进程调度模拟设计——时间片轮转、优先级法学院专业班级姓名指导教师2014 年01 月17 日课程设计任务书学生姓名:专业班级:指导教师:工作单位:题目: 进程调度模拟设计——时间片轮转、优先级法初始条件:1.预备内容:阅读操作系统的处理机管理章节内容,对进程调度的功能以及进程调度算法有深入的理解。

2.实践准备:掌握一种计算机高级语言的使用。

要求完成的主要任务:(包括课程设计工作量及其技术要求,以及说明书撰写等具体要求)1.模拟进程调度,能够处理以下的情形:⑴能够选择不同的调度算法(要求中给出的调度算法);⑵能够输入进程的基本信息,如进程名、优先级、到达时间和运行时间等;⑶根据选择的调度算法显示进程调度队列;⑷根据选择的调度算法计算平均周转时间和平均带权周转时间。

2.设计报告内容应说明:⑴课程设计目的与功能;⑵需求分析,数据结构或模块说明(功能与框图);⑶源程序的主要部分;⑷测试用例,运行结果与运行情况分析;⑸自我评价与总结。

时间安排:设计安排3周:查阅、分析资料 1天系统软件的分析与建模 4天系统软件的设计 5天系统软件的实现 3天撰写文档 1天课程设计验收答辩 1天设计验收安排:设计周的第三周的指定时间到实验室进行上机验收。

设计报告书收取时间:课程设计验收答辩完结时。

(注意事项:严禁抄袭,一旦发现,抄与被抄的一律按0分记)指导教师签名: 2013 年 12 月 10日系主任(或责任教师)签名: 2013 年 12 月 10日进程调度模拟设计——时间片轮转、优先级法1设计目的1.1 阅读操作系统的处理机管理章节内容,对进程调度的功能以及进程调度算法有深入的理解,能够使用其中的方法来进行进程调度模拟设计。

1.2 练掌握并运用时间片轮转和优先级法,掌握一种计算机高级语言的使用。

2 设计要求2.1 能够选择不同的调度算法(要求中给出的调度算法);2.2 能够输入进程的基本信息,如进程名、优先级、到达时间和运行时间等;2.3 根据选择的调度算法显示进程调度队列;2.4 根据选择的调度算法计算平均周转时间和平均带权周转时间。

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

轮转法调度
思考
假如在实际情况下,时间片大小为20ms,作业间调度花 费时间为5ms,则CPU的损耗率为20%,对每一个作业, 都有高达20%的损耗率是不可忍受的。而且时间片越小 损耗率越大,怎么办?
自然而然的,想到增大时间片的大小,例如增大到 500ms,则CPU损耗率只有1%,但是是否时间片越大,性 能越好?
试想,如果时间片足够大,使得所有的任务都可以在一 个时间片里运行完,那么轮转法就会退化为先来先服务 法,使得性能下降。
轮转法调度
总结
对时间片轮转法来说,合理的选择时间片的大小 是非常重要的。 若时间片选择太大:轮转法就会退化为先来先服 务法; 若时间片选择太小:则就会增加作业切换频率, 使得系统开销增大。
在实际当中,时间片一般选择100ms。
CPU调度-时间片轮转法
(假设听众都学习过先来先服务法)
轮转法调度
基本原理
★ 在轮转法中,系统将所有的就绪进程按先来先服务的 原则排成一个队列,每次调度时,把CPU分配给队首 进程,并令其执行一个时间片。当执行的时间片用完 时,产生中断,将该程序送往就绪队列的队尾,并把 处理机分配给新的队首进程,同时让它也执行一个时 间片。这样就保证就绪队列中的所有进程在一给定的 时间内均能获得一时间片的处理机执行时间。
P2
2
P3
10ห้องสมุดไป่ตู้
P4
4
P5
12
P1 P2 P3 P4 P5 P1 P3 P5 P3 P5
0 4 6 10 14 18 20 24 28 30 34
分析
P1 P2 P3 P4 P5
轮转法调度
到达时间 0 0 0 0 0
开始时间 0 4 6 10 14
完成时间 20 6 30 14 34
周转时间 20 6 30 14 34
轮转法调度
性能指标
★ 周转时间
周转时间=作业完成时间-作业到达时间
★ 平均周转时间
平均带权周转时间=总周转时间/总作业数
例 假设:有作业P1,P2,P3,P4,P5,作业长度依次为 6,2,10,4,12,到达时刻都为0。时间片大小为4。
轮转法调度
例-运行图(时间片大小为4)
进程 P1
运行时间 6
平均周转时间: (20+6+30+14+34)/5=20.8
轮转法调度
思考影响性能的因素
作业调度顺序?
在时间片轮转法中,每个作业依次运行相同大小的 时间片,用完之后将CPU让给下一个,对每个作业都 是公平的,因此性能与作业调度顺序无关。
时间片大小?
在回答这个问题之前,先 认识一个问题:在实际情 况下,作业在切换时是会 消耗系统资源的
相关文档
最新文档