博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
进程调度
阅读量:4634 次
发布时间:2019-06-09

本文共 1818 字,大约阅读时间需要 6 分钟。

进程调度

  一,设计目的:    

  进程管理是操作系统中的重要功能,用来创建进程、撤消进程、实现进程状态转换,它提供了在可运行的进程之间复用CPU的方法。在进程管理中,进程调度是核心,因为在采用多道程序设计的系统中,往往有若干个进程同时处于就绪状态,当就绪进程个数大于处理器数目时,就必须依照某种策略决定哪些进程优先占用处理器。本设计模拟在单处理器情况下的进程调度,目的是加深对进程调度工作的理解,掌握不同调度算法的优缺点。

二,设计内容

设计程序模拟单处理机系统中的进程调度算法,在短作业优先调度算法、时间片轮转调度、最高优先级优先算法三种算法中选择两种实现。

每个进程由一个进程控制块(PCB)表示。进程控制块可以包含如下信息:进程名、优先数、到达时间、需要运行时间、已用CPU时间、进程状态等。

进程的优先数及需要的运行时间可以事先人为地指定(也可以由随机数产生)。进程的到达时间为进程输入的时间。

进程的运行时间以时间片为单位进行计算。

每个进程的状态可以是就绪W(Wait)、运行R(Run)或完成F(Finish)3中状态之一。

三、开发环境

windows环境,VC6.0平台。

四,分析设计

<一>实验原理

(1)最高优先级优先算法思想

   将进程按照优先级由高到低排序

就绪进程获得CPU后都只能运行一个时间片,用已占用CPU时间加1来表示。

如果运行一个时间片后,进程的已占用CPU时间已达到所需要的运行时间,则撤销该进程,如果运行一个时间片后进程的已占用CPU时间还未达到所需要的运行时间,也即进程还需要继续运行,此时应将进程的优先数减1(即降低一级),然后把它插入就绪队列等待CPU。

每进行一次调度程序都打印一次运行进程、就绪队列以及各个进程的PCB,以便进行检查。

重复以上过程,直到所有进程都完成为止。

(2)时间片轮转调度

系统将所有的就绪进程按先来先服务的原则,排成一个队列,每次调度时,CPU分配给队首进程,并令其执行一个时间片.时间片的大小从几ms到几百ms.当执行的时间片用完时,由一个计时器发出时钟中断请求,调度程序便据此信号来停止该进程的执行,并将它送往就绪队列的末尾;然后,再把处理机分配给就绪队列中新的队首进程,同时也让它执行一个时间片.这样就可以保证就绪队列中的所有进程,在一给定的时间内,均能获得一时间片的处理机执行时间.

<二>程序结构

(1)最高优先级优先

  1.按照优先级排序

for(i=0;i<n-1;i++)      //按照优先级排序

    {

        for(j=n-2;j>=i;j--)

        {

            if(pcb[j+1].priority>pcb[j].priority)

            {

                temp=pcb[j];

                pcb[j]=pcb[j+1];

                pcb[j+1]=temp;

            }

        }

    }

2.按照排序运行时间片

3.判断程序是否完成

if((pcb[0].needtime-pcb[0].usedtime)>pTime)   //判断进程剩余的运行时间是否大于时间片

        {

            pcb[0].usedtime+=pTime;

            pcb[0].priority--;

            pcb[0].state='W';

        }

        else                       //已完成的进程

        {

            pcb[0].usedtime=pcb[0].needtime;

            pcb[0].priority=-1;

            pcb[0].state='F';

 

4.完成退出

(2)时间片轮转调度

1按照先来先服务原则排序

struct pro* creatList()   //创建链表,按照进程的到达时间排列,记录所有进程的信息

void insert(struct pro *head,struct pro *s)   //插入节点

{

struct pro *p=searchByAT(head,s->arriveTime);

s->next=p->next;

p->next=s;

 

2.按照先来先服务原则排序好队列之后按照输入的时间片运行。

3.进程运行完成退出就绪队列

程序流程图

(1)最高优先级优先

 

 

2时间片轮转调度

 

 

 

 

 

 

 

 

五.结果分析

(1)最高优先级优先

 

 

 

 

 

 

1.输入四个进程后按照优先级排序:2 1 3 4

2.按照时间片运行,每次运行后进程优先级减一。

3.每当进程运行完进程状态显示为F

转载于:https://www.cnblogs.com/Anei/p/7862999.html

你可能感兴趣的文章
libcurl 客户端实例
查看>>
由Node.js事件驱动模型引发的思考
查看>>
easyUI样式之easyui-switchbutton
查看>>
在raspberry的jessie版系统上安装opencv3.0
查看>>
codeforces水题100道 第二十七题 Codeforces Round #172 (Div. 2) A. Word Capitalization (strings)...
查看>>
maven笔记学习
查看>>
关于学习编程的一些看法
查看>>
oracle操作
查看>>
AngularJS $eval $parse
查看>>
electron 创建窗口2
查看>>
zookeeper
查看>>
MySql的四种事务隔离级别
查看>>
隐藏Nginx版本号的安全性与方法
查看>>
基础知识:页面div始终浮在浏览器顶部
查看>>
Notification和KVO有什么不同
查看>>
开源组件websocket-sharp中基于webapi的httpserver使用体验
查看>>
HDU 4135 Co-prime(容斥原理)
查看>>
c语言常用数据类型转换整理
查看>>
Iframe上传文件
查看>>
Probabilistic Graphical Models 1: Introduction
查看>>