宋雅楠的实验1:处理机调度.doc

  1. 1、本文档共10页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
宋雅楠的实验1:处理机调度

实验报告 学院(系)名称:计算机与通信工程学院 姓名 宋雅楠 学号 专业 计算机科学与技术 班级 中加1 实验项目 实验一:处理机调度算法的实现 课程名称 操作系统 课程代码 0668036 实验时间 实验地点 7-215 批改意见 成绩 教师签字: 实验内容: 设定系统中有五个进程,每一个进程用一个进程控制块表示。 输入每个进程的“优先数”和“要求运行时间”。 为了调度方便,将五个进程按给定的优先数从大到小连成就绪队列。用一单元指出队列首进程,用指针指出队列的连接情况。 处理机调度总是选队首进程运行。采用动态优先数算法,进程每运行一次优先数就减“1”,同时将运行时间减“1”。 若某进程运行时间为零,则将其状态置为“结束”,且退出队列。 运行所设计程序,显示或打印逐次被选中进程的进程名,以及进程控制块的动态变化过程。 实验要求中遇到收获 #include stdio.h #include sys/malloc.h #include stdlib.h #define NUM_OF_PROCESS? 5 /* ?* 进程控制块数据结构 ?*/ typedef struct __PCB__ { ? ? int pid;? ? ? ? ? ? ? ? //进程ID ? ? int need_time;? ? ? ? ? //进程需要的运行时间 ? ? int prior;? ? ? ? ? ? ? //进程优先级 } PCB; /* ?* ?* 存放一个PCB?*? ? ? 和指向下一个PCB的指针 ?*/ typedef struct __QUEUE_NODE__ { ? ? PCB *data; ? ? struct __QUEUE_NODE__ *next; } QUEUE_NODE; /* ?* ?*/ typedef struct __LIST_QUEUE__ { ? ? QUEUE_NODE *front, *rear; } LIST_QUEUE; /* ?* 创建带头结点的空链式队列 ?*/ LIST_QUEUE *Init_List_Queue() { ? ? LIST_QUEUE *q; ? ? QUEUE_NODE *p; ? ? q = (LIST_QUEUE*)malloc(sizeof(LIST_QUEUE)); ? ? //申请头尾指针结点 ? ? p = (QUEUE_NODE*)malloc(sizeof(QUEUE_NODE)); ? ? //申请链式队列头结点 ? ? p-next = NULL; ? ? q-front = q-rear = p; ?? ? ? ? return q; } /* ?* 判断队列是否为空 ?* 是 返回 1?* 否 返回 0 ?*/ int Is_Empty_List_Queue(LIST_QUEUE *queue) { ? ? if (queue-front == queue-rear) ? ? ? ? return 1; ? ? else ? ? ? ? return 0; } /* ?* ?*/ int Size_Of_List_Queue(LIST_QUEUE *queue) { ? ? int i = 0;? //节点个数 ? ? QUEUE_NODE *tmp; ? ? if (Is_Empty_List_Queue(queue)) ? ? ? ? return i; ? /* 空队列 */ ? ? tmp = queue-front; ? /* 尾结点不计数,头结点补 */ ? ? while (tmp-next != NULL) ? ? { ? ? ? ? i ++; ? ? ? ? tmp = tmp-next; ? ? } ? ? return i; } /* ?* 按优先级对队列调整顺序 ?* 优先级高在队首 ?*/ void Adjust_List_Queue(LIST_QUEUE *queue) { ? ? QUEUE_NODE *tmp; ? ? QUEUE_NODE *bef; ?? ? ? ? int size = Size_Of_List_Queue(queue); ? ? int i; ? ? for(i=0; isize; i++) ? ? { ? ? ? ? tmp = queue-front-next; ? /* 第一个有效结点 */ ? ? ? ? while (tmp-next != NULL) ? ? ? ? { ? ? ? ? ? ? for (bef=queue-front; bef-next != tmp; bef=bef-n

文档评论(0)

jiaoyuguanliji + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档