天津理工大学操作系统实验报告实验一_第1页
天津理工大学操作系统实验报告实验一_第2页
天津理工大学操作系统实验报告实验一_第3页
天津理工大学操作系统实验报告实验一_第4页
天津理工大学操作系统实验报告实验一_第5页
全文预览已结束

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、实验报告学院(系)名称:计算机与通信工程学院姓名nasta学号nasta专业计算机科学与技术班级2010级2班实验项目实验一:处理机调度算法的实现课程名称操作系统课程代码0668036实验时间2012 年12月3日 第3、4节实验地点软件实验室7-216批改意见成绩教师签字: 实验内容:1 设定系统中有五个进程,每一个进程用一个进程控制块表示。2 输入每个进程的“优先数”和“要求运行时间”。3 为了调度方便,将五个进程按给定的优先数从大到小连成就绪队列。用一单元指出队列首进程,用指针指出队列的连接情况。4 处理机调度总是选队首进程运行。采用动态优先数算法,进程每运行一次优先数就减“1”,同时将

2、运行时间减“1”。5 若某进程运行时间为零,则将其状态置为“结束”,且退出队列。6 运行所设计程序,显示或打印逐次被选中进程的进程名,以及进程控制块的动态变化过程。实验要求:1 详细描述实验设计思想、程序结构及各模块设计思路;2 详细描述程序所用数据结构及算法;3 明确给出测试用例和实验结果;4 为增加程序可读性,在程序中进行适当注释说明;5 认真进行实验总结,包括:设计中遇到的问题、解决方法与收获等;6 实验报告撰写要求结构清晰、描述准确逻辑性强;7 实验过程中,同学之间可以进行讨论互相提高,但绝对禁止抄袭。【实验过程记录(源程序、测试用例、测试结果及心得体会等)】设计思想:1. 模拟单cp

3、u系统时间片切换、进程切换。2. 使用优先队列,让优先级高的进程位于队列顶端。在每次时钟周期时,从优先队列队首取出优先级最高的进程,并使其运行一个时钟周期,然后将其优先级减1,已运行时间加1。然后判断程序是否完成,如果未完成,则重新加入优先队列,参与时钟周期。数据结构:使用优先队列,以获得优先级最高程序。源代码:#include #include using namespace std;/ 进程控制块pcbstruct pcb unsigned int pid;/进程idunsigned int priority;/进程优先级unsigned int claimtime;/需要运行时间unsi

4、gned int runtime;/已经运行时间/构造函数pcb(unsigned int id, unsigned int p, unsigned int ct) pid=id;priority=p;claimtime=ct;runtime=0;/运行当前进程一个时钟周期,并使进程优先级减1,已运行时间加1void run() runtime+;if(priority0)priority-;/判断进程是否完成bool isfinished() if(claimtime=runtime)return true;else return false;/重载运算符,以使用stl中的priority_

5、queuebool operator (const pcb& p)const if(priority!=p.priority)return priorityp.priority;/比较优先级else/优先级相同的话快完成的任务先执行return claimtime-runtimep.claimtime-p.runtime;int main(int argc, char *argv) int clock=0;priority_queue q;/优先队列for(int i=0; i5; i+) int p, t;printf(请输入pid=%u的进程的优先级(非负数):n, i);scanf(%u

6、, &p);printf(请输入pid=%u的进程的要求运行时间(非负数):n, i);scanf(%u, &t);printf(pid = %u, 优先级 = %u, 要求运行时间 = %unn, i, p, t);q.push(pcb(i, p, t);while(!q.empty() /模拟单cpuprintf(当前时钟%2dt, clock+);pcb t = q.top();q.pop();printf(pid = %u进程运行, 优先级 = %u, 已运行时间 = %un, t.pid, t.priority, t.runtime);t.run();printf(执行过后:tpid = %u, 优先级 = %u, 已运行时间 = %un, t.pid, t.priority, t.runtime);if(!t.isfinished()q.push(t);elseprintf(pid=%d进程结束n, t.pid);printf(程序结束n);return 0;测试用例:进程pid优先级需要运行时间043114254336422执行结果:实验问题:1. 在进程优先级相同时,调度结果不确定。原因:在优先级相同时,未进行相关处理。解决:添加优先级相同时判断逻辑,快结束的进程先调度2. 程序陷入死循环。原因:当忘记判断进程是否结束就加入队列。

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论