好文档 - 专业文书写作范文服务资料分享网站

操作系统进程调度实验报告

天下 分享 时间: 加入收藏 我要投稿 点赞

精品文档

一、 实验目的

无论是批处理系统、分时系统还是实时系统,用户进程数一般都大于处理机数,这将导致用户进程互相争夺处理机。这就要求进程调度程序按一定的策略,动态地把处理机分配给处于就绪队列中的某一进程,以使之执行。进程调度是处理机管理的核心内容。本实验要求采用调度算法编写和调试一个简单的进程调度程序。通过本实验可以加深理解有关进程控制块、进程队列、阻塞队列、就绪队列等的概念。并了解CPU分配资源的方式。

二、 实验要求

调试一个进程调度程序,对程序进行注释,理解每条语句的用意,掌握CPU对进城进程分配资源的方式,以加深对进程概念及进程调度算法的理解。

三、 实验内容

1.进程调度算法:

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

每个进程有一个进程控制块( PCB)表示。进程控制块可以包含如下信息:进程ID、进程IP、进程指令(优先级数)、运行时间、阻塞时间、阻塞状况、占用资源情况等。

进程的优先数及需要的运行时间可以事先人为地指定,即输入进程的执行指令。 进程的运行时间以时间片为单位进行计算。

每个进程的状态可以是就绪 、运行和阻塞三种状态之一。 3.资源

资源包括资源ID、资源状态(是否被占用)、使用资源的进程ID、进程指针以及使用时间。

程序规定CPU资源数为1,既所有进程只能请求同一资源,如果所请求资源已被占用,则进程进入阻塞队列等待资源。 4.CPU

CPU包括执行中的进程指针、就绪队列、阻塞队列、CPU资源、进程数、阻塞进程数以及CPU运行时间。

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

进行调度程序后打印进程所有运行的进程的进程信息,以便进行检查。

四、 实验算法流程

文档下载后可复制编辑

精品文档

开始 输入进程指令 初始化进程ID 进程阻塞 进程加入就绪队列 就绪队列空 进程加入阻塞队列 资源占用 结束 进程运行 进程运行时间结束 进程到达释放进程 进程加入就绪队列

五、 实验程序清单

#include #include #include #include #include using namespace std;

const int MAXCOMMANDLEN =50;

文档下载后可复制编辑

精品文档

///////////////////////////////////////////////////////////////////////////////////// //

// PROCESS //

///////////////////////////////////////////////////////////////////////////////////// class Process {

friend class CPU; protected:

static int init_ID; int ID;

char runText[MAXCOMMANDLEN]; //进程指令 int IP; //进程IP

bool ISuseSource; //进程是否占用资源 bool ISblocked; //进程是否阻塞 int unitTime; //CPU执行时间 int blockTime; //进程阻塞时间 public:

static void RandID(); //初始化静态成员变量init_ID() Process(); //构造函数 int getID(); //获取进程ID int getIP(); //获取进程IP void setIP(int); //设置进程IP void Runed(); //输出进程IP int getUnittime(); //获得单位时间 int getBlcoktime(); //获得阻塞时间 void setBlocktime(int); //设置阻塞时间 void setUnittime(int); //设置单位执行时间 char getResult(int); //获得进程执行结果 char* getRuntext(); //获得进程执行指令 void setBlockstate(bool); //设置阻塞状态 bool getBlockstate(); //获得阻塞状态 bool getISusesource(); //获得资源转台 void setISusesource(bool); //设置资源状态 };

int Process::init_ID;

void Process::RandID() {

srand( (unsigned)time( NULL ) ); //函数调用time()函数为随机数种子初始化,使每次调用srand()函数产生变值

init_ID=rand(); //自动调用srand((unsigned)time(NULL))初始化init_ID,使每次初始值都不同 }

Process::Process()

文档下载后可复制编辑

精品文档

{

ID=init_ID++; int commandLen; IP=0;

cout<<\ cin>>runText; //输入命令

if( (commandLen=strlen(runText) ) > MAXCOMMANDLEN ) exit(0);

runText[commandLen]='#'; runText[commandLen+1]='\\0'; ISuseSource=false; ISblocked=false; unitTime=1; blockTime=0; }

void Process::Runed() {

cout<

int Process::getID() {

return ID; }

int Process::getIP() {

return IP; }

void Process::setIP(int ip) {

IP=ip; }

bool Process::getISusesource() {

return ISuseSource; }

void Process::setISusesource(bool s) {

ISuseSource=s;

文档下载后可复制编辑

//放入runText的命令添加结束符

//设置资源未使用 //设置进程为未阻塞 //设置单位时间为1 //设置快时间为0 //获得下一个地址IP 精品文档 } char* Process::getRuntext() {

return runText; }

int Process::getUnittime() {

return unitTime; }

int Process::getBlcoktime() {

return blockTime; }

void Process::setBlocktime(int BT) {

blockTime=BT; }

void Process::setUnittime(int UT) {

unitTime=UT; }

void Process::setBlockstate(bool state) {

ISblocked=state; }

bool Process::getBlockstate() {

return ISblocked; }

char Process::getResult(int k) {

return runText[k]; }

///////////////////////////////////////////////////////////////////////////////////// //

// SOURCE //

/////////////////////////////////////////////////////////////////////////////////////

文档下载后可复制编辑

操作系统进程调度实验报告

精品文档一、实验目的无论是批处理系统、分时系统还是实时系统,用户进程数一般都大于处理机数,这将导致用户进程互相争夺处理机。这就要求进程调度程序按一定的策略,动态地把处理机分配给处于就绪队列中的某一进程,以使之执行。进程调度是处理机管理的核心内容。本实验要求采用调度算法编写和调试一个简单的进程调度程序。通过本实验可以加深理解有关进程控制块、进程队列、阻塞队列、
推荐度:
点击下载文档文档为doc格式
87rq680f1j0a0pl1szsm0n19a8hr9t00gu6
领取福利

微信扫码领取福利

微信扫码分享