篇一 :进程调度算法实验报告

操作系统实验报告(二)

实验题目:进程调度算法

实验环境:C++

实验目的:编程模拟实现几种常见的进程调度算法,通过对几组进程分别使用不同的调度算法,计算进程的平均周转时间和平均带权周转时间,比较各种算法的性能优劣。

实验内容:编程实现如下算法:

1.先来先服务算法;

2.短进程优先算法;

3.时间片轮转调度算法。

设计分析

程序流程图

1.先来先服务算法

2.短进程优先算法

3.时间片轮转调度算法

实验代码

1. 先来先服务算法

#include <iostream.h>

#define n 20

typedef struct

{

 int id;          //进程名

 int atime;         //进程到达时间

 int runtime;       //进程运行时间

}fcs;

void main()

{

 int amount,i,j,diao,huan;

    fcs f[n];

 cout<<"请输入进程个数:"<<endl;

 cin>>amount;

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

 {

  cout<<"请输入进程名,进程到达时间,进程运行时间:"<<endl;

  cin>>f[i].id;

…… …… 余下全文

篇二 :操作系统进程调度算法模拟实验报告

进程调度算法模拟

专业:XXXXX

学号:XXXXX

姓名:XXX

实验日期:20XXXXXX


一、实验目的

通过对进程调度算法的模拟加深对进程概念和进程调度算法的理解。

二、实验要求

编写程序实现对5个进程的调度模拟,要求至少采用两种不同的调度算法分别进行模拟调度。

三、实验方法内容

1.      算法设计思路

将每个进程抽象成一个控制块PCB, PCB用一个结构体描述。

构建一个进程调度类。将进程调度的各种算法分装在一个类中。类中存在三个容器,一个保存正在或未进入就绪队列的进程,一个保存就绪的进程,另一个保存已完成的进程。还有一个PCB实例。主要保存正在运行的进程。类中其他方法都是围绕这三个容器可以这个运行中的PCB展开。

主要用到的技术是STL中的vector以维护和保存进程容器、就绪容器、完成容器。

当程序启动时,用户可以选择不同的调度算法。然后用户从控制台输入各个进程的信息,这些信息保存到进程容器中。进程信息输入完毕后,就开始了进程调度,每调度一次判断就绪队列是否为空,若为空则系统时间加一个时间片。判断进程容器中是否有新的进程可以加入就绪队列。

2.      算法流程图

主程序的框架:

进程调度过程:

3.      算法中用到的数据结构

struct fcfs{   //先来先服务算法从这里开始

       char name[10];   

       float arrivetime;   

…… …… 余下全文

篇三 :5种进程调度算法实验报告

操作系统教程

——进程调度算法

进程调度算法的模拟实现

● 实验目的

1.本实验模拟在单处理机情况下的处理机调度问题,加深对进程调度的理解。

2.利用程序设计语言编写算法,模拟实现先到先服务算法FCFS、轮转调度算法RR、最短作业优先算法SJF、优先级调度算法PRIOR、最短剩余时间优先算法SRTF。

3.进行算法评价,计算平均等待时间和平均周转时间。

● 实验内容及结果

1.先来先服务算法

https://upload.fanwen118.com/wk-img/img100/3436862_2.jpghttps://upload.fanwen118.com/wk-img/img100/3436862_3.jpghttps://upload.fanwen118.com/wk-img/img100/3436862_4.jpg

2.轮转调度算法

https://upload.fanwen118.com/wk-img/img100/3436862_5.jpg

3. 优先级调度算法

https://upload.fanwen118.com/wk-img/img100/3436862_6.jpg

4. 最短时间优先算法

https://upload.fanwen118.com/wk-img/img100/3436862_7.jpg

5. 最短剩余时间优先算法

https://upload.fanwen118.com/wk-img/img100/3436862_8.jpg

● 实验总结

在此次模拟过程中,将SRTF单独拿了出来用指针表示,而其余均用数组表示。

● 完整代码

【Srtf.cpp代码如下:】

//最短剩余时间优先算法的实现

#include <stdio.h>

#include <stdlib.h>

#include <time.h>

typedef struct

{

int remain_time; //进程剩余执行时间

int arrive_time; //进程到达时间

int Tp; //进入就绪队列的时间

int Tc; //进入执行队列的时间

int To; //进程执行结束的时间

int number; //进程编号

}Process_Block; //定义进程模块

typedef struct _Queue

{

Process_Block PB;

struct _Queue *next;

}_Block,*Process; //定义一个进程模块队列中结点

typedef struct

…… …… 余下全文

篇四 :进程调度算法 实验报告

操作系统实验报告

实验一: 进程调度算法

学 生:

学 号:

学 院:

系 别:

专 业:

实验时间:

报告时间:

进程调度算法实验报告

进程调度算法实验报告

一、实验内容

按优先数调度算法实现处理器调度。 二、实验目的

在采用多道程序设计的系统中,往往有若干个进程同时处于就绪状态。当就绪进程个数大于处理器数时,就必须依照某种策略来决定哪些进程优先占用处理器。本实验模拟在单处理器情况下的处理器调度,帮助学生加深了解处理器调度的工作。

三、实验原理

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

(1) 假定系统有五个进程,每一个进程用一个进程控制块PCB来代表,进程控制块的格式为:

进程调度算法实验报告

其中,进程名——作为进程的标识,假设五个进程的进程名分别为P1,P2,P3,P4,P5。

指针——按优先数的大小把五个进程连成队列,用指针指出下一个进程的进程控制块的首地址,最后一个进程中的指针为“0”。

要求运行时间——假设进程需要运行的单位时间数。

优先数——赋予进程的优先数,调度时总是选取优先数大的进程先执行。 状态——可假设有两种状态,“就绪”状态和“结束”状态。五个进程的初始状态都为“就绪”,用“R”表示,当一个进程运行结束后,它的状态为“结束”,用“E”表示。

(2) 在每次运行你所设计的处理器调度程序之前,为每个进程任意确定它的“优先数”和“要求运行时间”。

(3) 为了调度方便,把五个进程按给定的优先数从大到小连成队列。用一单元指出队首进程,用指针指出队列的连接情况。例:

队首标志

进程调度算法实验报告

进程调度算法实验报告

进程调度算法实验报告

进程调度算法实验报告

进程调度算法实验报告

K2

K3

K4

K5

(4) 处理器调度总是选队首进程运行。采用动态改变优先数的办法,进程每运行一次优先数就减“1”。由于本实验是模拟处理器调度,所以,对被选中的进程并不实际的启动运行,而是执行:

优先数-1 要求运行时间-1

…… …… 余下全文

篇五 :进程调度实验报告[1]

实验一 进程调度

一.实验题目:

(1)、编写并调试一个模拟的进程调度程序,采用“最高优先数优先”调度算法对五个进程进行调度。

2)、编写并调试一个模拟的进程调度程序,采用“轮转法”调度算法对五个进程进行调度。

二:实验目的

用高级语言编写和调试一个进程调度程序,以加深对进程的概念及进程调度算法的理解.

三.实验内容:

<一>最高优先级优先调度算法

1)优先级简介

动态优先数是指在进程创建时先确定一个初始优先数, 以后在进程运行中随着进程特性的改变不断修改优先数,这样,由于开始优先数很低而得不到CPU的进程,就能因为等待时间的增长而优先数变为最高而得到CPU运行。

例如:在进程获得一次CPU后就将其优先数减少1。或者,进程等待的时间超过某一时限时增加其优先数的值,等等。

2)详细设计

优先权调度算法:

1、设定系统中有五个进程,每一个进程用一个进程控制块( PCB)表示,进程队列采

用链表数据结构。

2、 进程控制块包含如下信息:进程名、优先数、需要运行时间、已用CPU时间、进程状态等等。

3、 在每次运行设计的处理调度程序之前,由终端输入五个进程的“优先数”和“要求运行时间”。

4、 进程的优先数及需要的运行时间人为地指定.进程的运行时间以时间片为单位进行计算。

5、 采用优先权调度算法,将五个进程按给定的优先数从大到小连成就绪队列。用头指针指出队列首进程,队列采用链表结构。

6、 处理机调度总是选队列首进程运行。采用动态优先数办法,进程每运行一次优先数减“1”,同时将已运行时间加“1”。

7、 进程运行一次后,若要求运行时间不等于已运行时间,则再将它加入就绪队列;否则将其状态置为“结束”,且退出就绪队列。

…… …… 余下全文

篇六 :进程调度算法实验报告

计算机操作系统实验报告

                                 实验二  进程调度算法

一、实验名称进程调度算法

二、实验内容:编程实现如下算法:

1.先来先服务算法;

                    2.短进程优先算法;

                    3.时间片轮转调度算法。

三、问题分析与设计:

 1.先来先服务调度算法

流程图: 终止: 开始                       先来先服务调度算法是一种最简单的调度算法,该算法既可以用于作业调度,也可用于进程调度。当在作业调度中采用该算法时,每次调度都是从后备作业队列中选择一个或多个最先进入该队列的作业,将他们调入内存,为它们分配资源、创建进程,然后放入就绪队列。在进程调度中采用FCFS算法时,则每次调度是从就绪队列中选择一个最先进入该队列的进程,为之分配处理机,使之投入运行。该进程一直运行到完成或发生某事件而阻塞后才放弃处理机。FCFS算法比较有利于长作业(进程),而不利于短作业(进程)。

文本框: 流程图  

…… …… 余下全文

篇七 :计算机操作系统进程调度实验报告

操作系统实验题:设计一若干并发进程的进程调度程序

一、实验目的

无论是批处理系统、分时系统还是实时系统,用户进程数一般都大于处理机数,这将导致用户进程互相争夺处理机。这就要求进程调度程序按一定的策略,动态地把处理及分配给处于就绪队列中的某一进程,以使之执行。进程调度是处理机管理的核心内容。本实验要求采用最高优先数优先的调度算法(即把处理机分配给优先数最高的进程)和先来先服务算法编写和调试一个简单的进程调度程序。通过本实验可以加深理解有关进程控制块、进程队列的概念。并体会了优先数和先来先服务调度算法的具体实施办法。

二、实验要求

用高级语言编写和调试一个进程调度程序,以加深对进程的概念及进程调度算法的理解.

三、实验内容

 进程调度算法:采用最高优先数优先的调度算法(即把处理机分配给优先数最高的进程)和先来先服务算法(将用户作业和就绪进程按提交顺序或变为就绪状态的先后排成队列,并按照先来先服务的方式进行调度处理)。

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

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

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

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

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

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

…… …… 余下全文

篇八 :进程调度实验报告

一、     实验目的

用高级语言编写和调试一个进程调度程序,以加深对进程的概念及进程调度算法的理解。

二、实验内容和要求

编写并调试一个模拟的进程调度程序,采用“简单时间片轮转法”调度算法对五个进程进行调度。

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

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

每个进程的状态可以是就绪 W(Wait)、运行R(Run)两种状态之一。

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

如果运行一个时间片后,进程的已占用 CPU时间已达到所需要的运行时间,则撤消该进程,如果运行一个时间片后进程的已占用CPU时间还未达所需要的运行时间,也就是进程还需要继续运行,此时应分配时间片给就绪队列中排在该进程之后的进程,并将它插入就绪队列队尾。 每进行一次调度程序都打印一次运行进程、就绪队列、以及各个进程的 PCB,以便进行检查。

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

三、实验主要仪器设备和材料

硬件环境:IBM-PC或兼容机

软件环境:C语言编程环境

四、实验原理及设计方案

1、进程调度算法:采用多级反馈队列调度算法。其基本思想是:当一个新进程进入内在后,首先将它放入第一个队列的末尾,按FCFS原则排队等待高度。当轮到该进程执行时,如能在该时间片内完成,便可准备撤离系统;如果它在一个时间片结束时尚为完成,调度程序便将该进程转入第二队列的末尾,再同样地按FCFS原则等待调度执行,以此类推。

2、实验步骤:

(1)按先来先服务算法将进程排成就绪队列。

(2)检查所有队列是否为空,若空则退出,否则将队首进程调入执行。

…… …… 余下全文