天津理工大学操作系统实验报告实验一.doc

上传人:wj 文档编号:601042 上传时间:2023-04-29 格式:DOC 页数:6 大小:259.50KB
下载 相关 举报
天津理工大学操作系统实验报告实验一.doc_第1页
第1页 / 共6页
天津理工大学操作系统实验报告实验一.doc_第2页
第2页 / 共6页
天津理工大学操作系统实验报告实验一.doc_第3页
第3页 / 共6页
天津理工大学操作系统实验报告实验一.doc_第4页
第4页 / 共6页
天津理工大学操作系统实验报告实验一.doc_第5页
第5页 / 共6页
天津理工大学操作系统实验报告实验一.doc_第6页
第6页 / 共6页
亲,该文档总共6页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

天津理工大学操作系统实验报告实验一.doc

《天津理工大学操作系统实验报告实验一.doc》由会员分享,可在线阅读,更多相关《天津理工大学操作系统实验报告实验一.doc(6页珍藏版)》请在冰点文库上搜索。

天津理工大学操作系统实验报告实验一.doc

实验报告

学院(系)名称:

计算机与通信工程学院

姓名

nasta

学号

nasta

专业

计算机科学与技术

班级

2010级2班

实验项目

实验一:

处理机调度算法的实现

课程名称

操作系统

课程代码

0668036

实验时间

2012年12月3日第3、4节

实验地点

软件实验室7-216

批改意见

成绩

教师签字:

实验内容:

1.设定系统中有五个进程,每一个进程用一个进程控制块表示。

2.输入每个进程的“优先数”和“要求运行时间”。

3.为了调度方便,将五个进程按给定的优先数从大到小连成就绪队列。

用一单元指出队列首进程,用指针指出队列的连接情况。

4.处理机调度总是选队首进程运行。

采用动态优先数算法,进程每运行一次优先数就减“1”,同时将运行时间减“1”。

5.若某进程运行时间为零,则将其状态置为“结束”,且退出队列。

6.运行所设计程序,显示或打印逐次被选中进程的进程名,以及进程控制块的动态变化过程。

实验要求:

1.详细描述实验设计思想、程序结构及各模块设计思路;

2.详细描述程序所用数据结构及算法;

3.明确给出测试用例和实验结果;

4.为增加程序可读性,在程序中进行适当注释说明;

5.认真进行实验总结,包括:

设计中遇到的问题、解决方法与收获等;

6.实验报告撰写要求结构清晰、描述准确逻辑性强;

7.实验过程中,同学之间可以进行讨论互相提高,但绝对禁止抄袭。

【实验过程记录(源程序、测试用例、测试结果及心得体会等)】

设计思想:

1.模拟单CPU系统时间片切换、进程切换。

2.使用优先队列,让优先级高的进程位于队列顶端。

在每次时钟周期时,从优先队列队首取出优先级最高的进程,并使其运行一个时钟周期,然后将其优先级减1,已运行时间加1。

然后判断程序是否完成,如果未完成,则重新加入优先队列,参与时钟周期。

数据结构:

使用优先队列,以获得优先级最高程序。

源代码:

#include

#include

usingnamespacestd;

//进程控制块PCB

structPCB{

unsignedintpid; //进程id

unsignedintpriority; //进程优先级

unsignedintclaimTime; //需要运行时间

unsignedintrunTime; //已经运行时间

//构造函数

PCB(unsignedintid,unsignedintp,unsignedintct){

pid=id;

priority=p;

claimTime=ct;

runTime=0;

}

//运行当前进程一个时钟周期,并使进程优先级减1,已运行时间加1

voidrun(){

runTime++;

if(priority>0)priority--;

}

//判断进程是否完成

boolisFinished(){

if(claimTime==runTime)

returntrue;

elsereturnfalse;

}

//重载<运算符,以使用STL中的priority_queue

booloperator<(constPCB&p)const{

if(priority!

=p.priority)

returnpriority

else

//优先级相同的话快完成的任务先执行

returnclaimTime-runTime

}

};

intmain(intargc,char**argv){

intclock=0;

priority_queueq; //优先队列

for(inti=0;i<5;i++){

intp,t;

printf("请输入pid=%u的进程的优先级(非负数):

\n",i);

scanf("%u",&p);

printf("请输入pid=%u的进程的要求运行时间(非负数):

\n",i);

scanf("%u",&t);

printf("pid=%u,优先级=%u,要求运行时间=%u\n\n",i,p,t);

q.push(PCB(i,p,t));

}

while(!

q.empty()){//模拟单CPU

printf("当前时钟%2d\t",clock++);

PCBt=q.top();

q.pop();

printf("pid=%u进程运行,优先级=%u,已运行时间=%u\n",t.pid,t.priority,t.runTime);

t.run();

printf("执行过后:

\tpid=%u,优先级=%u,已运行时间=%u\n",t.pid,t.priority,t.runTime);

if(!

t.isFinished())

q.push(t);

else

printf("pid=%d进程结束\n",t.pid);

}

printf("程序结束\n");

return0;

}

测试用例:

进程pid

优先级

需要运行时间

0

4

3

1

1

4

2

5

4

3

3

6

4

2

2

执行结果:

实验问题:

1.在进程优先级相同时,调度结果不确定。

原因:

在优先级相同时,未进行相关处理。

解决:

添加优先级相同时判断逻辑,快结束的进程先调度

2.程序陷入死循环。

原因:

当忘记判断进程是否结束就加入队列。

解决:

判断进程是否结束,如果未结束,则继续参与调度,否则不参与。

实验总结:

要根据调度算法,选择合适的数据结构,以实现相应的调度程序。

在调度时,应明确:

哪个程序被调度,调度后优先级有什么变化,该进程是否还参与调度等问题。

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 农林牧渔 > 林学

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2