当前位置:文档之家› 采用静态优先权优先算法的进程调度程序

采用静态优先权优先算法的进程调度程序

采用静态优先权优先算法的进程调度程序
采用静态优先权优先算法的进程调度程序

采用静态优先权优先算法的进程调度程序

学号:

姓名:

专业:

指导教师:

日期:

目录

第1部分课设简介 (3)

1.1 课程设计题目 (3)

1.2 课程设计目的 (3)

1.3 课程设计内容 (3)

1.4 时间安排 (3)

第2部分实验原理分析 (3)

2.1问题描述 (3)

2.2解决方法 (4)

第3部分主要的功能模块 (5)

3.1主要的函数 (5)

3.2 测试用例及运行结果 (7)

第4部分源代码 (9)

第5部分总结及参考文献 (16)

5.1 总结 (16)

5.2 参考文献 (17)

第1部分课设简介

1.1 课程设计题目

采用静态优先权优先算法的进程调度程序

1.2 课程设计目的

操作系统课程设计是计算机专业重要的教学环节,它为学生提供了一个既动手又动脑,将课本上的理论知识和实际有机的结合起来,独立分析和解决实际问题的机会。

1)进一步巩固和复习操作系统的基础知识。

2)培养学生结构化程序、模块化程序设计的方法和能力。

3)提高学生调试程序的技巧和软件设计的能力。

4)提高学生分析问题、解决问题以及综合利用C语言进行程序设计的能力。

1.3 课程设计内容

设计并实现一个采用静态优先权算法的进程调度演示程序

1.4 时间安排

1)分析设计贮备阶段(1 天)

2)编程调试阶段(7 天)

3)写课程设计报告、考核(2 天)

第2部分实验原理分析

2.1问题描述

(1)每一个进程有一个PCB,其内容可以根据具体情况设定。

(2)进程数、进入内存时间、要求服务时间、优先级等均可以在界面上设定(3)可读取样例数据(要求存放在外部文件中)进行进程数、进入内存时间、时间片长度、作业大小、进程优先级的初始化

(4)可以在运行中显示各进程的状态:就绪、执行(由于不要求设置互斥资源与进程间的同步关系,故只有两种状态)

(5)采用可视化界面,可在进程调度过程中随时暂停调度,查看当前进程的状态以及相应的阻塞队列

(6)有性能比较功能,可比较同一组数据在不同调度算法下的平均周转时间(7)具有一定的数据容错性

2.2程序设计流程图

2.3解决方法

通过数组容纳所有数据,根据冒泡排序把数据按从小到大顺序排列,在分析a[0]和其他数据的大小,如果a[0]的完成时间大于其他数据就按照冒泡的排列顺序,如果小,就比较其他数据的优先级,按优先级大小排序。

第3部分主要的功能模块3.1主要的函数

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;

}

}

操作系统综合实验

华北科技学院计算机学院综合性实验实验报告 课程名称《计算机操作系统》 实验学期2015 至2016 学年第一学期学生所在系部计算机系 年级2013 专业班级计科B133 学生姓名谢培旗学号201307014319 任课教师王祥仲 实验成绩

计算机学院制 华北科技学院计算机学院综合性实验报告 》课程综合性实验报告《计算机操作系统年 12 月 4 日 2015 基础二开课实验室:

页1 第 华北科技学院计算机学院综合性实验报告 (5)分析程序运行的结果,谈一下自己的认识。

四、实验结果及分析 本实验设计到三个进程调度,分别是:先来先服务调度算法,非抢占式短进程调度算法,最高响应比优先调度算法。以下为本次实验结果截图及分析: 程序运行界面截图: 先来先服务调度算法1.

页2 第 华北科技学院计算机学院综合性实验报告 分析: 当在进程调度中采用FCFS算法时,每次调度是从就绪的进程队列中选择一个最先进入该队列的进程,为之分配处理机,使之投入运行。该进程一直运行到完成或发生某事件而阻塞后,进程调度才将处理机分配给其它进程。 程序计算结果如图,设有5个进程:a、b、c、d、e在不同时间到达,按其到达时间排序则为:a->b->c->d->e,即调用先来先服务算法以后进程运行的顺序是:a->b->c->d->e。 2.非抢占式短进程调度算法 算法是以作业的长短来计算优先级,作业越短,其优先级越高。作业的长短是以作业所SJF算法可以分别用于作业调度和进程调度。在把短作业优先调度算SJF要求的运行时间来衡量的。优先将法用于作业调度时,它将从外存的作业后备队列中选择若干个估计运行时间最短的作业,它们调入内存运行。在不同时间到达,按其所需服务时间长ed、ca程序计算结果如图,设有5个进程:、b、、,即调用非抢占式短进程优先调度算法以后进程运行的顺序是:短排序则为: a->b->e->c->d 。a->b->e->c->d 页3 第

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

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

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

(高优先权流程图) (按时间片轮转调度) 程序说明及实现: 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;

动态高优先权优先

《操作系统》课程实验报告实验名称:动态高优先权优先算法 姓名:王智昆 学号:541407110243 地点:4#302 指导老师:张旭 专业班级:运维1402

一、实验目的: 1、熟悉并掌握动态高优先权优先算法。 2、用C语言编程实现动态高优先权优先算法 二、实验内容:用高级语言模拟实现动态分区存储管理,要求: 模拟实现动态高优先权优先(若数值越大优先权越高,每运行一个时间单位优先权-n,若数值越小优先权越高,没运行一个时间单位优先权+n),具体如下: 设置作业体:作业名,作业的到达时间,服务时间,初始优先权,作业状态(W ——等待,R——运行,F——完成),作业间的链接指针 作业初始化:由用户输入作业名、服务时间、初始优先权进行初始化,同时,初始化作业的状态为W。 显示函数:在作业调度前、调度中和调度后进行显示。 排序函数:对就绪状态的作业按照优先权排序。优先权相同时进入等待队列时间早的作业在前。注意考虑到达时间 调度函数:每次从等待队列队首调度优先权最高的作业执行,状态变化。并在执行一个时间单位后优先权变化,服务时间变化,状态变化。当服务时间为0时,状态变为F。 删除函数:撤销状态为F的作业。 #include #include struct PCB{ charp_name[20]; intp_priority; intp_needTime; intp_runTime; charp_state; struct PCB* next; }; voidHighPriority(); void Information(); char Choice(); struct PCB* SortList(PCB* HL); int main() { printf(" 《演示最高优先数优先算法》\n\n"); HighPriority(); return 0; } voidHighPriority()

操作系统进度调度算法实验

华北科技学院计算机系综合性实验 实验报告 课程名称操作系统C 实验学期 2012 至 2013 学年第 2 学期学生所在系部计算机学院 年级 10级专业班级网络B102 学生姓名刘状学号 201007024205 任课教师杜杏菁 实验成绩 计算机系制

《操作系统C》课程综合性实验报告 开课实验室:基础六机房2013年6月3日 实验题目进程调度算法模拟 一、实验目的 通过对进程调度算法的模拟,进一步理解进程的基本概念,加深对进程运行状态和进程调度过程、调度算法的理解。 二、设备与环境 1. 硬件设备:PC机一台 2. 软件环境:安装Windows操作系统或者Linux操作系统,并安装相关的程序开发环境,如C \C++\Java 等编程语言环境。 三、实验内容 (1)用C语言(或其它语言,如Java)实现对N个进程采用某种进程调度算法(如动态优先权调度)的调度。 (2)每个用来标识进程的进程控制块PCB可用结构来描述,包括以下字段: ?进程标识数ID。 ?进程优先数PRIORITY,并规定优先数越大的进程,其优先权越高。 ?进程已占用CPU时间CPUTIME。 ?进程还需占用的CPU时间ALLTIME。当进程运行完毕时,ALLTIME变为0。 ?进程的阻塞时间STARTBLOCK,表示当进程再运行STARTBLOCK个时间片后,进程将进 入阻塞状态。 ?进程被阻塞的时间BLOCKTIME,表示已阻塞的进程再等待BLOCKTIME个时间片后,将 转换成就绪状态。 ?进程状态STATE。 ?队列指针NEXT,用来将PCB排成队列。 (3)优先数改变的原则: ?进程在就绪队列中呆一个时间片,优先数增加1。 ?进程每运行一个时间片,优先数减3。 (4)为了清楚地观察每个进程的调度过程,程序应将每个时间片内的进程的情况显示出来,包括正在运行的进程,处于就绪队列中的进程和处于阻塞队列中的进程。 (5)分析程序运行的结果,谈一下自己的认识。

动态优先权算法模拟-操作系统课程设计

实用标准文档 东北大学分校 计算机与通信工程学院 操作系统课程设计 设计题目动态优先权算法模拟 专业名称计算机科学与技术 班级学号 学生 指导教师 设计时间

课程设计任务书 专业:计算机科学与技术学号:学生(签名): 设计题目:动态优先权算法模拟 一、设计实验条件 综合楼808 二、设计任务及要求 模拟单处理机环境下的进程调度模型,调度采用基于动态优先权的调度算法。 三、设计报告的容 1.设计题目与设计任务 设计题目:动态优先权算法模拟 设计任务:模拟单处理机环境下的进程调度模型,调度采用基于动态优先权的调度算法。 2.前言(绪论) 在操作系统中调度算法的实质是一种资源的分配,因而调度算法是指“根据系统资源分配策略所规定的资源分配算法”。对于不同的操作系统和系统目标,通

常采用不同的调度算法。 为了照顾紧迫作业,使之在进入系统后便获得优先处理,引入了最高优先权先调度算法。在作为进程调度算法时,该算法是把处理机分配给就绪队列优先权最高的进程。这可以分为抢占式优先权算法和非抢占式优先权算法。 对于最高优先权优先调度算法,其关键在于:它是使用静态优先权还是动态优先权,以及如何确定进程的优先权。本次课程设计所实现的算法就是动态优先权算法的抢占式优先权调度算法和非抢占式动态优先权算法。 动态优先权拥有其特有的灵活优点,同时,若所有的进程都具有相同的优先权初值,则显然是最先进入就绪队列的进程,将因其动态优先权变得高而优先获得处理机,此即FCFS算法。若所有的就绪进程具有各不相同优先权初值,那么,对于优先权初值低的进程,在等待了足够长的时间后,其优先权便可能升为最高,从而获得处理机。当采用抢占式优先权调度算法时,如果规定当前进程的优先权以一定速率下降,则可防止一个长作业长期垄断处理机。 这里,我们采用高响应比来决定每个进程的优先权。 3.设计主体(各部分设计容、分析、结论等) 【设计容】 动态优先权是指在创建进程时所赋予的优先权,是可以随进程的推进或随其等待时间的增加而改变的,以便获得更好的调度性能。 非抢占式优先权调度算法。在这种方式下,系统一旦把处理机分配给就绪队

常用的分组调度算法

[编辑本段]常用的分组调度算法 对于调度算法有两个重要的设计参数:一个是吞吐量,另一个是公平性。调度算法是数据业务系统的一个特色,目的是充分利用信道的时变特性,得到多用户分集增益,提高系统的吞吐量。吞吐量一般用小区单位时间内传输的数据量来衡量。公平性指小区所有用户是否都获得一定的服务机会,最公平的算法是所有用户享有相同的服务机会。奸的调度算法应该兼顾吞吐量和公平性,根据算法的特点,调度算法主要可分为:轮询(Round Robin, RR)算法;最大C/I算法(MaxC/1);正比公平(Proportional Fair,PP)算法。 (1)轮询算法 在考虑公平性时,一般都把循环调度算法作为衡量的标准。这种算法循环地调用每个用户,即从调度概率上说,每个用户都以同样的概率占用服务资源(时隙、功率等)。循环调度算法每次调度时,与最大C/I算法相同,并不考虑用户以往被服务的情况,即是无记忆性方式。循环调度算法是最公平的算法,但算法的资源利用率不高,因为当某些用户的信道条件非常恶劣时也可能会得到服务,因此系统的吞吐量比较低。 图7-35给出了以时分方式使用高速下行共享信道(High Speed Downlink Share CHannel, HS-DSCH)信道的一种可能的资源分配方式。从图中可以看出,尽管UEl和UE2的信道环境不同(与基站的距离不同),但是分配了相同的信道使用时间给UEl和UE2。 (2)最大C/I算法 最大C/I算法在选择传输用户时,只选择最大载干比C/I的用户,即让信道条件最好的用户占用资源传输数据,当该用户信道变差后,再选择其他信道最好的用户。基站始终为该传输时刻信道条件最好的用户服务。 最大C/I算法获取的吞吐量是吞吐量的极限值,但在移动通信中,用户所处的位置不同,其所接收的信号强度不一样,最大C/I算法必然照顾了离基站近、信道好的用户,而其他离基站较远的用户则无法得到服务,基站的服务覆盖范围非常小。这种调度算法是最不公平的。 图7-36给出了以时分方式使用HS-DSCH信道的一种可能的资源分配方式。该图假定了服务过程中UEl的信道条件始终好于UE2。从图中可以看出,只有当信道条件较好的UEI缓冲区数据全部传输完毕,系统才调度UE2服务。

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

操作系统编程进程或作业先来先服务、高优先权、按时间 片轮转调度算法 湖南农业大学科学技术师范学院 学生实验报告 姓名: 汤黎波年级专业班级 06级计算机教育班日期 2008 年 12 月 8 日 成绩 验证设计编程进程或作业先来先服务、 综合创新实验类型课程名称计算机操作系统实验名称高优先权、按时间片轮转调度 算法(4学时) 【实验目的、要求】 实验目的:(1)通过编写程序实现进程或作业先来先服务、高优先权、按时间片轮转调度算法,使学生进一步掌握进程调度的概念和算法,加深对处理机分配的理解。 (2)了解Windows2000/XP中进程(线程)的调度机制。 (3)学习使用Windows2000/XP中进程(线程)调度算法,掌握相应的与调度有关的Win32 API 函数。 实验要求:(1)经调试后程序能够正常运行。 (2)采用多进程或多线程方式运行,体现了进程或作业先来先服务、高优先权、按时间片轮转 调度的关系。 (3)程序界面美观。

【实验内容】 在Windows XP、Windows 2000等操作系统下,使用C语言,利用相应的WIN32 API函数,编写程序实现进程或作业先来先服务、高优先权、按时间片轮转调度算法。 【实验环境】(含主要设计设备、器材、软件等) Pc电脑一台 【实验步骤、过程】(含原理图、流程图、关键代码,或实验过程中的记录、 数据等) 定义: 1)先来先服务算法:如果早就绪的进程排在就绪队列的前面,迟就绪的进程排 在就绪队列的后面, 那么先来先服务(FCFS:first come first service)总是把当前处于就绪队列 之首的那个进程 调度到运行状态。 2)轮转法就是按一定时间片(记为q)轮番运行各个进程。如果q是一个定值,则轮转法是一种对各 进程机会均等的调度方法。 3)优先级调度的基本思想是,把当前处于就绪队列中优先级最高的进程投入运行,而不管各进程的 下一个CPU周期的长短和其他因素。 实验步骤: (1)需求分析:了解基本原理,确定程序的基本功能,查找相关资料,画出基本的数据流图; (2)概要设计:确定程序的总体结构、模块关系和总体流程; (3)详细设计:确定模块内部的流程和实现算法;

使用动态优先权与时间片轮转的进程调度算法的模拟

计算机与信息工程学院设计性实验报告 一、实验目的 通过动态优先权调度算法的模拟加深进程概念和进程调度过程的理解。二、实验仪器或设备 虚拟机 三、总体设计(设计原理、设计方案及流程等) 实验内容 (1)在Linux下用C语言编程模拟N个进程采用高优先权优先(要求采用 动态优先权)和简单时间片轮转两种进程调度算法。为了清楚地观察每 个进程的调度过程,程序应将每个时间片内的进程情况显示出来; (2)进程控制块是进程存在的唯一标志,因此,在模拟算法中每一个进程用 一个进程控制块PCB来代表,PCB用一结构体表示。包括以下字段: ●进程标识数id,或者进程的名称name; ●进程优先数priority,并规定优先数越大的进程,其优先权越高; ●进程需要运行的CPU时间ntime; ●进程的运行时间rtime; ●进程状态state; ●队列指针next,用来将PCB排成队列。 (3)进程在运行过程中其状态将在就绪、执行、阻塞(可选)、完成几种状态 之间转换,同时进程可能处于不同的队列中,如就绪队列、阻塞队列(可 选)。在两种调度算法中,考虑分别可以选择什么样的队列及如何实现进 程的入队、出队操作; (4)为了便于处理,优先权调度每次也仅让进程执行一个时间片,若在一个 时间片内未运行结束,调整进程优先级将其插入就绪队列,进行新一轮

调度; (5)优先数改变原则: ●进程每运行若一个时间单位,优先数减3; ●进程在就绪队列中呆一个时间片,优先数增加1。(仅供参考,合理 即可) (6)优先权调度中,对于遇到优先权一致的情况,可采用FCFS策略解决; (7)由于是模拟进程调度,所以,对被选中的进程并不实际启动运行,而是 修改进程控制块的相关信息来模拟进程的一次运行; (8)为了清楚地观察诸进程的调度过程,程序应将每个时间片内的进程的情 况显示出来,参照格式如下: id cputime needtime priority(count) state 0 0 2 48 ready 1 0 3 47 ready 2 0 6 44 ready 3 0 5 45 ready 4 0 4 46 ready 简单时间片轮转调度模拟程序见roundrobin.c,优先权调度大家请参考时间片轮转自行实现,有自己想法的同学可以按照自己的思路独立完成实验,而不用参考roundrobin.c程序。 四、实验步骤(包括主要步骤、代码分析等) #include "stdio.h" #include #define getpch(type) (type*)malloc(sizeof(type)) struct pcb { char name[10]; char state; int count; int ntime; int rtime; int priority; struct pcb* link; }*ready=NULL,*tail=NULL,*p; typedef struct pcb PCB; int slice;

优先级调度算法实验报告

优 先 级 调 度 算 法 实 验 报 告 院系:****************学院班级:*********** 姓名:*** 学号:************

一、实验题目:优先级调度算法 二、实验目的 进程调度是处理机管理的核心内容。本实验要求用高级语言编写模拟进程调度程序,以便加深理解有关进程控制快、进程队列等概念,并体会和了解优先级算法的具体实施办法。 三、实验内容 1.设计进程控制块PCB的结构,通常应包括如下信息: 进程名、进程优先数(或轮转时间片数)、进程已占用的CPU时间、进程到完成还需要的时间、进程的状态、当前队列指针等。 2.编写优先级调度算法程序 3.按要求输出结果。 四、实验要求 每个进程可有三种状态;执行状态(RUN)、就绪状态(READY,包括等待状态)和完成状态(FINISH),并假定初始状态为就绪状态。(一)进程控制块结构如下: NAME——进程标示符 PRIO/ROUND——进程优先数 NEEDTIME——进程到完成还需要的时间片数 STATE——进程状态 NEXT——链指针 注: 1.为了便于处理,程序中进程的的运行时间以时间片为单位进行

计算; 2.各进程的优先数或,以及进程运行时间片数的初值,均由用户在程序运行时给定。 (二)进程的就绪态和等待态均为链表结构,共有四个指针如下:RUN——当前运行进程指针 READY——就需队列头指针 TAIL——就需队列尾指针 FINISH——完成队列头指针 五、实验结果:

六、实验总结: 首先这次实验的难度不小,它必须在熟悉掌握数据结构的链表和队列的前提下才能完成,这次实验中用了三个队列,就绪队列,执行队列和完成队列,就绪队列中的优先级数是有序插入的,当进行进程调度的时候,需要先把就绪队列的队首节点(优先级数最大的节点)移入执行队列中,当执行进程结束后,判断该进程是否已经完成,如果已经完成则移入完成队列,如果没有完成,重新有序插入就绪队列中,这就是这次实验算法的思想。 附录(算法代码):

实验二——动态高优先权优先调度算法

《操作系统》课程实验报告实验名称:动态分区存储管理 姓名:王子瑜 学号: 541413450235 地点:四教楼 指导老师:刘放美 专业班级:软件工程(测试技术14-02) 实验成绩:

一、实验要求: 熟悉并掌握动态分区分配的各种算法。 熟悉并掌握动态分区中分区回收的各种情况,并能够实现分区合并。 二、实验内容: 用高级语言模拟实现动态分区存储管理,要求: 1、分区分配算法至少实现首次适应算法、最佳适应算法和最坏适应算法中的至 少一种。熟悉并掌握各种算法的空闲区组织方式。 2、分区的初始化——可以由用户输入初始分区的大小。(初始化后只有一个空 闲分区,起始地址为0,大小是用户输入的大小) 3、分区的动态分配过程:由用户输入作业号和作业的大小,实现分区过程。 4、分区的回收:用户输入作业号,实现分区回收,同时,分区的合并要体现出 来。(注意:不存在的作业号要给出错误提示!) 5、分区的显示:任何时刻,可以查看当前内存的情况(起始地址是什么,大小 多大的分区时空闲的,或者占用的,能够显示出来) 要求考虑:(1)内存空间不足的情况,要有相应的显示; (2)作业不能同名,但是删除后可以再用这个名字; (3)作业空间回收是输入作业名,回收相应的空间,如果这个作业名不存在,也要有相应的提示。 三、实验代码 #include #include #define SIZE 640 // 内存初始大小 #define MINSIZE 5 // 碎片最小值 enum STATE { Free, Busy }; struct subAreaNode { int addr; // 起始地址 int size; // 分区大小

经典调度算法的实现

经典调度算法的实现 学院: 专业: 姓名: 学号: 指导老师: 2014-3-18

目录 一、课设简介 (3) 1. 课程设计题目 (3) 2. 课程设计目的 (3) 3. 课程设计的内容 (3) 4. 课程设计要求 (3) 二、原理分析 (4) 1. 先来先服务算法介绍与分析 (4) 2. 短作业优先算法介绍与分析 (4) 3. 高响应比优先调度算法介绍与分析 (4) 4. 流程图 (5) 三、主要功能模块 (7) 1. 先来先服务算法实现代码 (7) 2. 短作业优先算法实现代码 (8) 3. 高响应比优先调度算法实现代码 (8) 四、测试与运行结果 (9) 1. 主界面 (9) 2. 先来先服务算法测试 (10) 3. 短作业优先算法测试 (11)

4. 高响应比优先调度算法测试 (13) 五、总结 (16) 六、参考文献 (16) 七、附录 (16)

一、课设简介 1.课程设计题目 经典调度算法的实现 2.课程设计目的 操作系统课程设计是计算机专业重要的教学环节,它为学生提供了一个既动手又动脑,将课本上的理论知识和实际有机的结合起来,独立分析和解决实际问题的机会。 ●进一步巩固和复习操作系统的基础知识。 ●培养学生结构化程序、模块化程序设计的方法和能力。 ●提高学生调试程序的技巧和软件设计的能力。 ●提高学生分析问题、解决问题以及综合利用 C 语言进行程序设计的能力。 3.课程设计的内容 实现以下几种调度算法 1 FCFS 2 SJF 3 高响应比优先调度算法。 4.课程设计要求 1.不同的功能使用不同的函数实现(模块化),对每个函数的功能和调用接口要注释清楚。对程序其它部分也进行必要的注释。 2.对系统进行功能模块分析、画出总流程图和各模块流程图。 3.用户界面要求使用方便、简洁明了、美观大方、格式统一。所有功能可以反复使用,最好使用菜单。 4.通过命令行相应选项能直接进入某个相应菜单选项的功能模块。 5.所有程序需调试通过。

操作系统-第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、若当期运行进程( C )后,系统将会执行进程调度原语。 A 执行了一个转移指令 B 要求增加主存空间,经系统调用银行家算法进行测算认为是安全的。 C 执行了一条I/O指令要求输入数据。 D 执行程序期间发生了I/O完成中断。 5、当系统中( C )时,系统将不会执行进程调度原语。 A.一个新进程被创建 B.当前进程执行了P操作。 C.在非抢占调度中,进程A正在运行而进程B恰好被唤醒。 D.分时系统中时间片用完。 6、在分时系统中,若当期运行的进程连续获得了两个时间片,原因可能是( B )。 A 该进程的优先级最高 B 就绪队列为空 C 该进程最早进入就绪队列 D 该进程是一个短进程 7、实时系统中采用的调度算法可以有如下几种:

1、非抢占优先权调度算法 2、立即抢占优先权调度算法 3、时间片轮转调度算法 4、基于时钟中断抢占的优先权调度算法 按实时要求的严格程度由低到高的顺序( B )。 A 1-3-2-4 B 3-1-4-2 C 3-1-2-4 D 1-3-4-2 8、三种主要类型的OS 中都必须配置的调度( C )。 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 无法预计 注:可以这样理解 N个进程,都需要M个资源,最坏的一种情况是: 每个进程都占有M-1个资源,都得不到M个资源,总共资源数(m-1)*n。 (m-1)*n加上一个资源后,就至少有一个进程拥有M个资源,不会发生死锁。 10、死锁的预防方法中,不太可能的一种方法使( A )。 A 摈弃互斥条件 B摈弃请求和保持条件 C摈弃不剥夺条件 D摈弃环路等待条件 11、某系统采用了银行家算法,则下列叙述正确的使( B ) A 系统处于不安全状态时一定会发生死锁 B 系统处于不安全状态时可能会发生死锁 C 系统处于安全状态时可能会发生死锁 D 系统处于安全状态时一定会发生死锁 12、下列进程调度算法中,( A )可能会出现进程长期得不到调度的情况。A.静态优先权法 B 抢占式调度中采用动态优先权调度 C 分时处理中的时间片轮转调度算法 D 非抢占调度中采用FIFO算法 13、采用动态优先权的调度算法中,如果所有的进程都具有相同优先权初值,则此时的优先权调度算法实际上和( A )相同。 A 先来先服务调度算法 B 短作业优先调度算法 C时间片轮转调度算法 D 长作业优先调度算法

CPU调度算法

一、设计目的 通过CPU调度相关算法的实现,了解CPU调度的相关知识,通过实现CPU调度算法,理解CPU的管理,以及不同的CPU调度算法实现过程。体会算法的重要性。 二、设计要求 1、编写算法,实现FCFS、非抢占SJF、可抢占优先权调度 2、针对模拟进程,利用CPU调度算法进行调度 3、进行算法评估,计算平均周转时间和平均等待时间 4、调度所需的进程参数由输入产生(手工输入或者随机数产生) 5、输出调度结果 6、输出算法评价指标 三、设计说明 1、采用数组、指针 2、FCFS 先来先服务调度算法是一种最简单的调度算法,当作业调度中采用该算法时,每次调度都是从后备作业队列中选择一个最先进入该队列的作业 3、非抢占SJF 短作业优先调度算法,是指对短作业有限调度算法。是从后备队列中选择一个估计运行时间最短的作业将他们调入内存。 4、可抢占优先权调度 在这种方式下,系统把处理机分配给优先权最高的进程,使之执行。但在其执行期间,只要出现另一个其优先权更高的进程,进程调度程序就立即停止当前进程(原优先权最高的进程)的执行,重新将处理及分配给新到的优先权最高的进程。 四、程序流程图。 1、可抢占优先权调度算法

2、FCFS 3、非抢占SJF 五、程序部分 1、FCFS #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;

设计一个按优先数调度算法实现处理器调度的程序 改

题目:设计一个按优先数调度算法实现处理器调度的程序 提示: (1)假定系统有5个进程,每个进程用一个PCB来代表。PCB的格式为: 进程名、指针、要求运行时间、优先数、状态。 进程名——P1~P5。 指针——按优先数的大小把5个进程连成队列,用指针指出下一个进程PCB的首地址。 要求运行时间——假设进程需要运行的单位时间数。 优先数——赋予进程的优先数,调度时总是选取优先数大的进程先执行。 状态——假设两种状态,就绪,用R表示,和结束,用E表示。初始状态都为就绪状态。 (2) 每次运行之前,为每个进程任意确定它的“优先数”和“要求运行时间”。 (3) 处理器总是选队首进程运行。采用动态改变优先数的办法,进程每运行1次,优先 数减1,要求运行时间减1。 (4) 进程运行一次后,若要求运行时间不等于0,则将它加入队列,否则,将状态改为“结 束”,退出队列。 (5) 若就绪队列为空,结束,否则,重复(3)。 2.程序中使用的数据结构及符号说明: #define num 5//假定系统中进程个数为5 struct PCB{ char ID;//进程名 int runtime;//要求运行时间 int pri;//优先数 char state; //状态,R-就绪,F-结束 }; struct PCB pcblist[num];//定义进程控制块数组 3.流程图: (1)主程序流程图: (2)子程序init()流程图:

(3) 子程序max_pri_process()流程图:

(4)子程序show()流程图:

(5)子程序run()流程图:

优先级调度算法

优先级调度算法 1、调度算法 考虑到紧迫型作业进入系统后能得到优先处理,引入了高优先级优先调度算法。 优先级调度的含义: (1)当该算法用于作业调度时,系统从后背作业队列中选择若干个优先级最高的,且系统能满足资源要求的作业装入内存运行;(2)当该算法用于进程调度时,将把处理机分配给就绪进行队列中优先级最高的进程。 2、调度算法的两种方式 非抢占式优先级算法:在这种调度方式下,系统一旦把处理机分配给就绪队列中优先级最高的进程后,该进程就能一直执行下去,直至完成;或因等待某事件的发生使该进程不得不放弃处理机时,系统才能将处理机分配给另一个优先级高的就绪队列。 抢占式优先级调度算法:在这种调度方式下,进程调度程序把处理机分配给当时优先级最高的就绪进程,使之执行。一旦出现了另一个优先级更高的就绪进程时,进程调度程序就停止正在执行的进程,将处理机分配给新出现的优先级最高的就绪进程。常用于实时要求比较严格的实时系统中,以及对实时性能要求高的分时系统。 3、优先级的类型 进程的优先级可采用静态优先级和动态优先级两种,优先级可由用户自定或由系统确定。

静态优先级调度算法 含义:静态优先级是在创建进程时确定进程的优先级,并且规定它在进程的整个运行期间保持不变。 确定优先级的依据: 1)进程的类型。 2)进程对资源的需求。 3)根据用户的要求。 优点:简单易行;系统开销小。 缺点:不太灵活,很可能出现低优先级的作业,长期得不到调度而等待的情况;静态优先级法仅适合于实时要求不太高的系统。 动态优先级调度算法 含义:动态优先级是创建进程时赋予该进程一个初始优先级,然后其优先级随着进程的执行情况的变化而改变,以便获得更好的调度性能。 优点:使相应的优先级调度算法比较灵活、科学,可防止有些进程一直得不到调度,也可防止有些进程长期垄断处理机。 缺点:需要花费相当多的执行程序时间,因而花费的系统开销比较大。 4、实时调度算法 由于在任何一个实时系统中毒存在着若干个实时进程或任务,用来反应或控制相应的外部事件,并往往具有某种程度的紧迫性,所以对实时系统中的调度算法提出了某些特殊要求。 对实时系统的要求

短作业优先调度算法

短作业优先调度算法 学院计算机科学与技术 专业 学号 学生姓名 指导教师姓名 2014-3-18 目录 九参考文献……………………………………………………………………………………………………… 实验题目 采用短作业优先算法的进程调度程序 课程设计的目的 操作系统课程设计是计算机专业重要的教学环节,它为学生提供了一个既动手又动脑,将课本上的理论知识和实际有机的结合一起,独立分析和解决实际问题的机会。 进一步巩固和复习操作系统的基础知识。 培养学生结构化程序、模块化程序设计的方法和能力。 提高学生调试程序的技巧和软件设计的能力。

提高学生分析问题、解决问题以及综合利用C语言进行程序设计的能力。设计内容 设计并实现一个采用短作业优先算的进程调度算法演示程序 设计要求 1. 每一个进程有一个PCB,其内容可以根据具体情况设定。 2. 进程数、进入内存时间、要求服务时间、优先级等均可以在界面上设定 3. 可读取样例数据(要求存放在外部文件中)进行进程数、进入内存时间、时间片长度、进程优先级的初始化 4. 可以在运行中显示各进程的状态:就绪、执行(由于不要求设置互斥资源与进程间同步关系,故只有两种状态) 5. 具有一定的数据容错性 主要数据结构及其说明 算法的简要说明:短作业(进程)优先调度算法SJ(P)F,是指对短作业或短进程优先调度的算法。它们可以分别用于作业调度和进程调度。短作业优先(SJF)的调度算法是从后备队列中选择一个或若干个估计运行时间最短的作业,将它们调入内存运行。而短进程(SPF)调度算法则是从就绪队列中选出一个估计运行时间最短的进程,将处理机分配给它,使它立即执行并一直执行到完成,或发生某事件而被阻塞放弃处理机再重新调度。优点是SJ(P)F 调度算法能有效地降低作业(进程)的平均等待时间,提高系统吞吐量。缺点是该算法对长作业不利;完全未考虑作业的紧迫程度,因而不能保证紧迫性作业(进程)长期不被调度;由于作业(进程)的长短只是根据用户所提供的估计执行时间而定的,而用户又可能会有意或无意地缩短其作业的估计运行时间,致使该算法不一定能真正做到短作业游戏那调度。 该程序定义了一个进程数据块(struct spf),该数据块有进程名(name)、到达时间(arrivetime)、服务时间(servicetime)、开始执行时间(starttime)、完成时间(finishtime)、周转时间(zztime)、带权周转时间(dqzztime)。用到的公式有:完成时间=到达时间+服务时间;周转时间=完成时间-到达时间;带权周转时间=周转时间/服务时间;(第一次执行的进程的完成时间=该进程的到达时间;下一个进程的开始执行时间=上一个进程的完成时间)。运行进程的顺序需要对进程的到达时间和服务时间进行比较。如果某一进程是从0时刻到达的,那么首先执行该进程;之后就比较进程的服务时间,谁的服务时间短就先

操作系统短作业优先调度算法

课程设计 采用短作业优先调度算法调度程序 学号: 姓名: 专业: 指导老师: 日期:

目录 一、实验题目 (3) 二、课程设计的目的 (3) 三、设计内容 (3) 四、设计要求 (3) 五、主要数据结构及其说明 (4) 六、程序运行结果 (5) 七、流程图 (7) 八、源程序文件 (9) 九、实验体会 (13) 十、参考文献 (13)

摘要 在多道程序环境下,主存中有着多个进程,其数目往往多于处理机数目。这就要求系统能按某种算法,动态地把处理机分配给就绪队列中的一个进程,使之执行。分配处理机的任务是由处理机调度程序完成的。由于处理机是最重要的计算机资源,提高处理机的利用率及改善系统性能(吞吐量、响应时间),在很大程度上取决于处理机调度性能的好坏,因而,处理机调度便成为操作系统设计的中心问题之一。在多道程序系统中,一个作业被提交后必须经过处理机调度后,方能获得处理机执行。对于批量型作业而言,通常需要经历作业调度和进程调度两个过程后方能获得处理机。作业调度是对成批进入系统的用户作业,根据作业控制块的信息,按一定的策略选取若干个作业使它们可以去获得处理器运行的一项工作。而对每个用户来说总希望自己的作业的周转时间是最小的,短作业优先(SJF)便是其中一种调度方法。本次课程设计主要是模拟短作业优先(SJF)调度算法。

一、实验题目 采用短作业优先算法的的进程调度程序 二、课程设计的目的 ●操作系统课程设计是计算机专业重要的教学环节,它为学生提供了一个既动 手又动脑,将课本上的理论知识和实际有机的结合一起,独立分析和解决实际问题的机会。 ●进一步巩固和复习操作系统的基础知识。 ●培养学生结构化程序、模块化程序设计的方法和能力。 ●提高学生调试程序的技巧和软件设计的能力。 ●提高学生分析问题、解决问题以及综合利用C语言进行程序设计的能力。 三、设计内容 设计并实现一个采用短作业优先算的进程调度算法演示程序 四、设计要求 1. 每一个进程有一个PCB,其内容可以根据具体情况设定。 2. 进程数、进入内存时间、要求服务时间、优先级等均可以在界面上设定 3. 可读取样例数据(要求存放在外部文件中)进行进程数、进入内存时间、时间片长度、进程优先级的初始化 4. 可以在运行中显示各进程的状态:就绪、执行(由于不要求设置互斥资源与进程间同步关系,故只有两种状态) 5. 采用可视化界面,可在进程调度过程中随时暂停调度,查看当前进程的状态以及相应的阻塞队列

非抢占式高优先级调度算法

/* 非抢占式高优先级调度算法(优先数越大级别越高) 算法思想:在按进程达到时间由小到大的顺序输入进程信息后,先对其优先数进行排列,将最先到达的进程的到达时间设为开始时间,计算结束时间, 然后对后面到达的时间与该进程的结束时间进行比较,如若小于该进程的结束时间,记录进程的个数,再对其优先数逐个进行比较,将优 先数最大的提到前面,每次进程结束都要进行比较,得到执行序列,在依次输出结果 */ #include<> #define MAX 100 struct hrfs { char name[10]; float arrvitetime; float starttime; float servietime; float finishtime; int priority;riority; j=1; while((jp[i].priority){ max_priority=p[j].priority; i=j; } j++; } k=i; p[k].starttime=p[k].arrvitetime;inishtime=p[k].starttime+p[k].servietime; p[k].run_flag=1; temp_time=p[k].finishtime; p[k].order=1; temp_count=1; while(temp_countmax_priority){ max_priority=p[j].priority; k=j; } } p[k].starttime=temp_time; p[k].finishtime=p[k].starttime+p[k].servietime;

UCOS优先级调度算法最详解

UCOS优先级调度算法最详解 经过一个上午时间,终于明白UCOS系统的按优先级调度就绪任务的算法,以个人见解展示给各位,希望各位提出意见uponzw630@https://www.doczj.com/doc/694144550.html,。 首先说明,解释两个表格的含义。 说明 OSMapTbl就是0-7这8个数值用二进制的BIT位来表示。 OSUnMapTbl就是将0x00-0xff每个数据中最低位为1的位号全部列举出来 INT8U const OSMapTbl[] = {0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80}; INT8U const OSUnMapTbl[] = { 0, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0, /* 0x00 to 0x0F*/ 4, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0, /* 0x10 to 0x1F*/ 5, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0, /* 0x20 to 0x2F*/ 4, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0, /* 0x30 to 0x3F*/ 6, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0, /* 0x40 to 0x4F*/ 4, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0, /* 0x50 to 0x5F*/ 5, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0, /* 0x60 to 0x6F*/ 4, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0, /* 0x70 to 0x7F*/ 7, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0, /* 0x80 to 0x8F*/ 4, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0, /* 0x90 to 0x9F*/ 5, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0, /* 0xA0 to 0xAF*/ 4, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0, /* 0xB0 to 0xBF*/ 6, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0, /* 0xC0 to 0xCF*/ 4, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0, /* 0xD0 to 0xDF*/ 5, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0, /* 0xE0 to 0xEF*/ 4, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0 /* 0xF0 to 0xFF*/ }; Y处于BIT5-BIT3,X处于BIT2-BIT0。 我们知道优先级prio的值越小,prio的优先级越高。 X和Y的范围均为000-111,十进制数里0-7,更8个级别,为了判断X或Y的大小,我们就引入了表格OSMapTbl[]= {0x01, 0x02, 0x04, 0x08, 0x10, 0x20,

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