处理器调度时间片轮转法实验报告(C和C含源代码)

实验2处理器调度学院:计算机与软件专业:软件工程日期:2014年5月18日姓名:学号:指导老师:

一、实验题目

按时间片轮转法实现处理器调度的模拟设计与实现

二、实验目的

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

三、实验内容:

(1)实验思想

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

指针

要求运行时间

已运行时间

状态

其中,进程名——作为进程的标识,假设五个进程的进程名分别为Q1,Q2,Q3,Q4,Q5。每次运行所设计的处理器调度程序前,为每个进程任意确定它的“要求

运行时间”

把五个进程按顺序排成循环队列,用指针指出队列连接情况。另用一标志单元记录轮到运行的进程。例如,当前轮到P2执行,则有:

标志单元

K1Q1K2

2

1

R

PCB1K2Q2K330RPCB2K3Q3K410RPCB3K4Q4K520RPCB4K5Q5K140RPCB5

处理器调度总是选择标志单元指示的进程运行。由于本实验是模拟处理器调

度的功能,所以,对被选中的进程并不实际的启动运行,而是执行:

已运行时间+1

来模拟进程的一次运行,表示进程已经运行过一个单位的时间。

进程运行一次后,应把该进程的进程控制块中的指针值送到标志单元,以指示下一个轮到运行的进程。同时,应判断该进程的要求运行时间与已运行时间,若该进程的要求运行时间已运行时间,则表示它尚未执行结束,应待到下一轮时再运行。若该进程的要求运行时间=已运行时间,则表示它已经执行结束,应指导它的状态修改成“结束”(E)且退出队列。此时,应把该进程的进程控制块中的指针值送到前面一个进程的指针位置。若“就绪”状态的进程队列不为空,则重复上面步骤,直到所有的进程都成为“结束”状态。

(2)流程图

(3)总体设计

(4)详细设计

四、实验结果

1、实验截图

2、实验代码

#include

#include

#include

#include

#definenum5

structPCB

{

charname;//进程名

inttime;//要求运行时间

intpriority;//优先数

charstate;//状态R就绪,E结束

};

voidinit(PCB*p)//PCB初始化子程序

{

printf("\n请分别输入:\n");

for(inti=0;i

{

//为每个进程输入信息

printf("\n输入PCB%d:\n",i+1);

scanf("%s%d%d",&p[i].name,&p[i].priority,&p[i].time);

p[i].state='R';//假设进程初始状态均为就绪R

getchar();

}

}

voidrun(PCB*p)//进程运行子程序

{

intt=0;//t为运行次数

for(intj=0;j

{

t+=p[j].time;

}//运行次数即为各个进程运行时间之和

printf("\n");

printf("\n");

printf("\n运行前进程状态显示:\n");

printf("\n执行前进程信息显示:\n");

printf("********************************************\n");

printf("进程名进程优先级进程运行时间进程状态:\n");

for(inti=0;i

{

printf("\n%s%d%d%c\n"

,&p[i].name

,p[i].priority

,p[i].time

,p[i].state);

}

printf("********************************************\n");

printf("按任意键继续执行:\n");

getchar();//等待输入回车符

while(t>0)

{

for(i=0;i

{

if(p[i].time)//具有最大优先数的进程没有运行完,让其运行

{

p[i].state='r';//将其状态置为r,表示其正在运行

printf("\n子进程信息显示:\n");

printf("********************************************\n");

printf("进程名进程优先级进程运行时间进程状态:\n");

for(j=0;j

{

if(i==j)

{

printf("\n%s%6d%8d%c----->该进程正在

执行\n"

,&p[j].name,p[j].priority,p[j].time,p[j].state);

if(p[j].priority>0)

p[j].priority-=1;//将当前运行进程的优先数减1

p[j].time--;//要求运行时间减1

t--;

if(p[j].time==0)

p[j].state='E';//运行完则将该进程状态置为结束

else

p[j].state='R';//未运行完将其状态置为就绪

}

else

printf("\n%s%6d%8d%c\n",&p[j].name,p[j].priority,p[j].time,p[j].state);

}

printf("********************************************\n");

printf("\n进程正在进行............\n");

}

}

}

printf("\n执行后进程信息显示:\n");

printf("********************************************\n");printf("进程名进程优先级进程运行时间进程状态:\n");for(i=0;i

{

printf("\n%s%d%d%c\n"

,&p[i].name

,p[i].priority

,p[i].time

,p[i].state);

}

printf("********************************************\n");printf("\n进程执行完成\n");

}

voidmain()//按动态优先数调度主程序

{

structPCBp[num];

init(p);

//初始化各个进程PCB

run(p);//进程调度模拟

}

实验2处理器调度学院:计算机与软件专业:软件工程日期:2014年5月18日姓名:学号:指导老师:

一、实验题目

按时间片轮转法实现处理器调度的模拟设计与实现

二、实验目的

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

三、实验内容:

(1)实验思想

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

指针

要求运行时间

已运行时间

状态

其中,进程名——作为进程的标识,假设五个进程的进程名分别为Q1,Q2,Q3,Q4,Q5。每次运行所设计的处理器调度程序前,为每个进程任意确定它的“要求

运行时间”

把五个进程按顺序排成循环队列,用指针指出队列连接情况。另用一标志单元记录轮到运行的进程。例如,当前轮到P2执行,则有:

标志单元

K1Q1K2

2

1

R

PCB1K2Q2K330RPCB2K3Q3K410RPCB3K4Q4K520RPCB4K5Q5K140RPCB5

处理器调度总是选择标志单元指示的进程运行。由于本实验是模拟处理器调

度的功能,所以,对被选中的进程并不实际的启动运行,而是执行:

已运行时间+1

来模拟进程的一次运行,表示进程已经运行过一个单位的时间。

进程运行一次后,应把该进程的进程控制块中的指针值送到标志单元,以指示下一个轮到运行的进程。同时,应判断该进程的要求运行时间与已运行时间,若该进程的要求运行时间已运行时间,则表示它尚未执行结束,应待到下一轮时再运行。若该进程的要求运行时间=已运行时间,则表示它已经执行结束,应指导它的状态修改成“结束”(E)且退出队列。此时,应把该进程的进程控制块中的指针值送到前面一个进程的指针位置。若“就绪”状态的进程队列不为空,则重复上面步骤,直到所有的进程都成为“结束”状态。

(2)流程图

(3)总体设计

(4)详细设计

四、实验结果

1、实验截图

2、实验代码

#include

#include

#include

#include

#definenum5

structPCB

{

charname;//进程名

inttime;//要求运行时间

intpriority;//优先数

charstate;//状态R就绪,E结束

};

voidinit(PCB*p)//PCB初始化子程序

{

printf("\n请分别输入:\n");

for(inti=0;i

{

//为每个进程输入信息

printf("\n输入PCB%d:\n",i+1);

scanf("%s%d%d",&p[i].name,&p[i].priority,&p[i].time);

p[i].state='R';//假设进程初始状态均为就绪R

getchar();

}

}

voidrun(PCB*p)//进程运行子程序

{

intt=0;//t为运行次数

for(intj=0;j

{

t+=p[j].time;

}//运行次数即为各个进程运行时间之和

printf("\n");

printf("\n");

printf("\n运行前进程状态显示:\n");

printf("\n执行前进程信息显示:\n");

printf("********************************************\n");

printf("进程名进程优先级进程运行时间进程状态:\n");

for(inti=0;i

{

printf("\n%s%d%d%c\n"

,&p[i].name

,p[i].priority

,p[i].time

,p[i].state);

}

printf("********************************************\n");

printf("按任意键继续执行:\n");

getchar();//等待输入回车符

while(t>0)

{

for(i=0;i

{

if(p[i].time)//具有最大优先数的进程没有运行完,让其运行

{

p[i].state='r';//将其状态置为r,表示其正在运行

printf("\n子进程信息显示:\n");

printf("********************************************\n");

printf("进程名进程优先级进程运行时间进程状态:\n");

for(j=0;j

{

if(i==j)

{

printf("\n%s%6d%8d%c----->该进程正在

执行\n"

,&p[j].name,p[j].priority,p[j].time,p[j].state);

if(p[j].priority>0)

p[j].priority-=1;//将当前运行进程的优先数减1

p[j].time--;//要求运行时间减1

t--;

if(p[j].time==0)

p[j].state='E';//运行完则将该进程状态置为结束

else

p[j].state='R';//未运行完将其状态置为就绪

}

else

printf("\n%s%6d%8d%c\n",&p[j].name,p[j].priority,p[j].time,p[j].state);

}

printf("********************************************\n");

printf("\n进程正在进行............\n");

}

}

}

printf("\n执行后进程信息显示:\n");

printf("********************************************\n");printf("进程名进程优先级进程运行时间进程状态:\n");for(i=0;i

{

printf("\n%s%d%d%c\n"

,&p[i].name

,p[i].priority

,p[i].time

,p[i].state);

}

printf("********************************************\n");printf("\n进程执行完成\n");

}

voidmain()//按动态优先数调度主程序

{

structPCBp[num];

init(p);

//初始化各个进程PCB

run(p);//进程调度模拟

}


相关文章

  • 实验一处理器调度
  • 操作系统实验 (第一次) 一.实验内容 选择一个调度算法,实现处理器调度. 二.实验目的 在采用多道程序设计的系统中,往往有若干个进程同时处于就绪状态.当就绪状态进程 个数大于处理器数时,就必须依照某种策略来决定哪些进程优先占用处理器.本实 ...查看


  • 课程设计进程实验报告
  • 学年论文(课程设计) 操作系统课程设计 学 院 数学与计算机学院 学科门类 工 学 专 业 网络工程 学 号 姓 名 指导教师 年 月 日 题目: 河北大学2010届本科生毕业论文(设计) 河北大学学年论文(课程设计)任务书 (指导教师用表 ...查看


  • 进程调度模拟设计--先来先服务.最高响应比优先调度算法
  • 课 程 设 计 题 目 学 院 专 业 班 级 姓 名 指导教师 进程调度模拟设计-先来先服务.最高响应比优先调度算法 计算机科学与技术学院 计算机科学与技术专业 计算机科学与技术0902班 庞竞强 郭羽成 2011 年 01 月 12 日 ...查看


  • 嵌入式实时系统中的关键技术.doc
  • JIU JIANG UNIVERSITY 毕业 综合技能测试 题 目 嵌入式实时系统中的关键技术 院 系 信息科学与技术学院 专 业 计算机应用技术 姓 名 江源泉 班级学号 B123113 指导教师 二○一四年十二月 摘 要 本文介绍了嵌 ...查看


  • 处理机调度参考
  • 实验原理: 时间片轮转调度算法和优先权调度算法本质上是一致的,只是在调度时选择的策略不一样而已,其程序的流程图是一致的,所以在此仅给出了一个流程图.具体算法流程图如图1所示. 图1 处理机调度算法流程图 1. 时间片轮转调度算法 当系统按时 ...查看


  • 职位说明书范本-各岗位
  • 1.总经理(总裁) 职位名称 总经理(总裁) 职位代码 所属部门 职 系 职等职级 直属上级 董事会 薪金标准 填写日期 核 准 人 职位概要: 制定和实施公司总体战略与年度经营计划: 建立和健全公司的管理体系与组织结构: 主持公司的日常经 ...查看


  • WinCE的实时性
  • 提到WinCE及工业控制,也许有人对WinCE的实时性能否满足工业控制要求产生疑问.诚然,WinCE的实时性不如QNX,也不如VxWOrks,但是大量文献表明WinCE的确是嵌入式实时操作系统,也在工业控制市场占有相当的份额.究其原因,离不 ...查看


  • 运输管理系统操作实验报告
  • 实验项目三 TMS 运输管理系统操作实验报告 淮安信息职业技术学院 2012年4月 目录 一.引言----------------------------------------------- 二.什么是TMS运输管理系统 -------- ...查看


  • 第三章处理机调度与死锁(2)
  • 考点一 调度的基本概念和基本准则 一.单项选择题 1.假设就绪队列中有10个进程,系统将时间片设为200ms,CPU进行进程切换要花费10ms.则系统开销所占的比率约为( ). A.1% B.5% C.10% D.20% 2.下面关于进程的 ...查看


热门内容