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

上传人:小** 文档编号:88104853 上传时间:2019-04-19 格式:DOC 页数:9 大小:1.74MB
返回 下载 相关 举报
宋雅楠的实验1:处理机调度_第1页
第1页 / 共9页
宋雅楠的实验1:处理机调度_第2页
第2页 / 共9页
宋雅楠的实验1:处理机调度_第3页
第3页 / 共9页
宋雅楠的实验1:处理机调度_第4页
第4页 / 共9页
宋雅楠的实验1:处理机调度_第5页
第5页 / 共9页
点击查看更多>>
资源描述

《宋雅楠的实验1:处理机调度》由会员分享,可在线阅读,更多相关《宋雅楠的实验1:处理机调度(9页珍藏版)》请在金锄头文库上搜索。

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

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

3、e 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; L

4、IST_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_

5、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;/

6、* 按优先级对队列调整顺序* 优先级高在队首*/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; ifront-next; /* 第一个有效结点 */ while (tmp-next != NULL) for (bef=queue-front; bef-next != tmp; bef=bef-next); /* 定位 */ if (tmp-data-prior next-data-pr

7、ior) bef-next = tmp-next; tmp-next = tmp-next-next; bef-next-next = tmp; else tmp = tmp-next; /* 入队函数*/void In_List_Queue(LIST_QUEUE *queue, PCB *element) QUEUE_NODE *tmp; tmp = (QUEUE_NODE*)malloc(sizeof(QUEUE_NODE); tmp-data = (PCB*)malloc(sizeof(PCB); *(tmp-data) = *element; tmp-next = NULL; queu

8、e-rear-next = tmp; queue-rear = tmp; /Adjust_List_Queue(queue);/* 出队函数* 成功 返回 1* 失败 返回 0*/int Out_List_Queue(LIST_QUEUE *queue, PCB *element) QUEUE_NODE *tmp; if(Is_Empty_List_Queue(queue) printf(The queue is EMPTY!n); return 0; else tmp = queue-front-next; queue-front-next = tmp-next; element = tmp

9、-data; free(tmp); if (queue-front-next = NULL) queue-rear = queue-front; /队空后的处理 return 1; /* 遍历链式队列*/void Print_List_Queue(LIST_QUEUE *queue) int size = Size_Of_List_Queue(queue); QUEUE_NODE *tmp = queue-front-next; for (int i = 0; i data-pid, tmp-data-need_time, tmp-data-prior); tmp = tmp-next; /*

10、 模拟进程运行* 优先数 -1* 需要时间 -1*/void run(PCB *pcb) if(pcb-prior 0) pcb-prior -; pcb-need_time -;/* 判断进程是否运行完成* 是 返回 1* 否 返回 0*/int Is_Finsihed(PCB *pcb) return (pcb-need_time front-next-data-pid); printf(PIDtPriortTimen); printf(%dt%dt%dn, queue-front-next-data-pid, queue-front-next-data-prior, queue-fron

11、t-next-data-need_time); run(queue-front-next-data); if (Is_Finsihed(queue-front-next-data) printf(P%d is finished!n, queue-front-next-data-pid); Out_List_Queue(queue, del); free(del); /* * 优先级发生变化,调整队列顺序 */ Adjust_List_Queue(queue);/* 主函数*/int main() LIST_QUEUE *process_pool = Init_List_Queue(); PCB *pcb; int

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 商业/管理/HR > 管理学资料

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号