版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、实验报告学院(系)名称:计算机与通信工程学院姓名赵云鹏学号20091931专业计算机科学与技术班级2009级3班实验项目实验一:处理机调度算法的实现课程名称操作系统课程代码0668036实验时间2011 年11月17日 第3、4节2011 年11月21日 第7、8节2011 年11月24日 第3、4节实验地点软件实验室7-216批改意见成绩教师签字: 实验内容:1 设定系统中有五个进程,每一个进程用一个进程控制块表示。2 输入每个进程的“优先数”和“要求运行时间”。3 为了调度方便,将五个进程按给定的优先数从大到小连成就绪队列。用一单元指出队列首进程,用指针指出队列的连接情况。4 处理机调度总
2、是选队首进程运行。采用动态优先数算法,进程每运行一次优先数就减“1”,同时将运行时间减“1”。5 若某进程运行时间为零,则将其状态置为“结束”,且退出队列。6 运行所设计程序,显示或打印逐次被选中进程的进程名,以及进程控制块的动态变化过程。实验要求:1 详细描述实验设计思想、程序结构及各模块设计思路;2 详细描述程序所用数据结构及算法;3 明确给出测试用例和实验结果;4 为增加程序可读性,在程序中进行适当注释说明;5 认真进行实验总结,包括:设计中遇到的问题、解决方法与收获等;6 实验报告撰写要求结构清晰、描述准确逻辑性强;7 实验过程中,同学之间可以进行讨论互相提高,但绝对禁止抄袭。【实验过
3、程记录(源程序、测试用例、测试结果及心得体会等)】源程序#include <stdlib.h> #include <stdio.h>#include <conio.h> #define getpch(type) (type*)malloc(sizeof(type) /* 动态分配内存空间*/#define NULL 0 struct pcbchar name10; /* 定义进程名*/char state; /* 定义进程状态*/int super; /* 定义优先数*/int ntime; /* 定义需要运行时间*/int rtime; /* 定义以运行时
4、间*/struct pcb* next; /* 定义下一个指针*/ ;struct pcb *link=NULL,*p;/* 定义队首指针及全局变量p*/ typedef struct pcb PCB;void sort() /* 建立对进程进行优先级排列函数*/ PCB *first, *second; /* 定义2指针 */int insert=0; /* 判断数 */if(link=NULL)|(p->super)>(link->super) /*优先级最大者,插入队首*/ p->next=link; /* p插在队首前 */link=p; /* 队首指向p */
5、 else /* 进程比较优先级,插入适当的位置中*/ first=link; /* first指向队首 */second=first->next; /* second指向队首的下一个 */while(second!=NULL) if(p->super)>(second->super) /*若插入进程比当前进程优先数大,*/ /*插入到当前进程前面*/ p->next=second; /* p插在比他优先数小的进程前 */first->next=p; second=NULL; insert=1; /* 判断数置一 */ else /*若插入进程比当前进程优先
6、数大,则first和second后移*/ first=first->next; second=second->next; if(insert=0) first->next=p; /* 插入进程优先数最低,则插入到队尾*/ void input() /* 建立进程控制块函数*/ int i; printf("n 请输入5个进程: "); for(i=1;i<=5;i+) printf("n 进程号No.%d:n",i);p=getpch(PCB); printf("n 输入进程名:"); scanf("
7、%s",p->name); printf("n 输入进程优先数:"); scanf("%d",&p->super); printf("n 输入进程运行时间:"); scanf("%d",&p->ntime); printf("n"); p->rtime=0;p->state='W' p->next=NULL; sort(); /* 调用sort函数*/ void disp(PCB * pr) /* 输出形式函数 */p
8、rintf("n 进程名t 状态t 需要运行时间t 已经运行时间n");printf("|%st",pr->name);printf("|%ct",pr->state);printf("|%dt",pr->super);printf("|%dt",pr->ntime);printf("|%dt",pr->rtime);printf("n");void check() /* 输出正在运行和就绪 */PCB* pr; printf
9、("n*当前正在运行的进程是:n");disp(p); /* p为队首作为正在运行 */pr=link; /* pr作为队首 */printf("n*当前就绪状态为:n");while (pr!=NULL) /* 就绪队列循环输出 */disp(pr); pr=pr->next;void destroy() /*建立进程撤消函数(进程运行结束,撤消进程)*/ printf("n 进程 %s 已完成.n",p->name); free(p); /* 退出队列 */ void running() /* 运行时间与状态关系的函数
10、 */(p->rtime)+;if (p->rtime=p->ntime) /* 运行完(以运行时间等于需要时间) */destroy(); /* 调运进程取消函数 */else(p->super)-; /* 优先数自减一 */p->state='W' /* 状态为等待 */sort(); /* 进行优先级排序 */void main()int h=0;char ch;input();while (link!=NULL) /* 队首不为空就循环调用输出 */ch=getchar(); h+;printf("o()o|o()o|o()o|o
11、()o|");printf("n 现在第%d次运行:",h);p=link; /* p为队首*/link=p->next; /* 队首指向p的下一个节点*/ p->next=NULL; p->state='R' /* p为正在运行的进程表示“R”*/check(); /* 循环输出语句 */running(); /* 运行时间与状态关系的函数 */printf("n 按任意键继续.n");printf("nn 进程已完成。n");测试用例及实验结果: 中间省略13次运行。心得体会:运用主函数调用执行各个功能的函数的结构,子函数包括建立对进程进行优先级排列函数,建立进程控制块函数,输出形式函数,建立进程撤消函数,运行时间与状态关系的函数,设计思路都在程序中注释,这里不再赘述,赛用队列的数据结构动态分配内存空间,定义指针等设计中遇
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026年高纯镉行业分析报告及未来发展趋势报告
- 2025年模拟地铁考试题及答案
- 2026年广州安居集团招聘面试题及答案
- 2026年卫生洁具安装工培训试题及答案解析版
- 大名县(2026年)公务员考试公共基础知识试题库(含答案)
- 2026年基础护理大赛题库问卷星及答案解析
- 2026年中医试题及答案护理
- 2025年汽车维修与装饰知识试卷及答案
- 吉林省和龙市遴选试题及答案
- 2025年二级建造师《矿业工程管理与实务》试题卷含答案
- 兰州大学《分析化学》19秋平时作业2(参考)
- 酒店保洁协议样本
- DB11-T 2021-2022 12345市民服务热线服务与管理规范
- DL∕T 5754-2017 智能变电站工程调试质量检验评定规程
- 2024年山东省高中学业水平合格考生物试卷试题(含答案详解)
- 报价单-通用模板
- 双管高压旋喷桩施工方案
- 运用PDCA降低血管内导管相关血流感染发生率(NPICU)
- 2024贵州贵阳中考物理试题及答案 2024年中考物理试卷
- 特发性肺纤维化急性加重AEIPF诊治指南
- 2023年广州市黄埔区中医院护士招聘考试历年高频考点试题含答案解析
评论
0/150
提交评论