宋雅楠的实验1:处理机调度_第1页
宋雅楠的实验1:处理机调度_第2页
宋雅楠的实验1:处理机调度_第3页
宋雅楠的实验1:处理机调度_第4页
宋雅楠的实验1:处理机调度_第5页
已阅读5页,还剩5页未读 继续免费阅读

下载本文档

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

文档简介

第6页共9页实验报告学院(系)名称:计算机与通信工程学院姓名宋雅楠学号20152578专业计算机科学与技术班级中加1实验项目实验一:处理机调度算法的实现课程名称操作系统课程代码0668036实验时间实验地点7-215批改意见成绩教师签字:实验内容:设定系统中有五个进程,每一个进程用一个进程控制块表示。输入每个进程的“优先数”和“要求运行时间”。为了调度方便,将五个进程按给定的优先数从大到小连成就绪队列。用一单元指出队列首进程,用指针指出队列的连接情况。处理机调度总是选队首进程运行。采用动态优先数算法,进程每运行一次优先数就减“1”,同时将运行时间减“1”。若某进程运行时间为零,则将其状态置为“结束”,且退出队列。运行所设计程序,显示或打印逐次被选中进程的进程名,以及进程控制块的动态变化过程。实验要求:详细描述实验设计思想、程序结构及各模块设计思路;详细描述程序所用数据结构及算法;明确给出测试用例和实验结果;为增加程序可读性,在程序中进行适当注释说明;认真进行实验总结,包括:设计中遇到的问题、解决方法与收获等;实验报告撰写要求结构清晰、描述准确逻辑性强;实验过程中,同学之间可以进行讨论互相提高,但绝对禁止抄袭。【实验过程记录(源程序、测试用例、测试结果及心得体会等)】#include<stdio.h>#include<sys/malloc.h>#include<stdlib.h>#defineNUM_OF_PROCESS

5/*

*进程控制块数据结构

*/typedefstruct__PCB__{

intpid;

//进程ID

intneed_time;

//进程需要的运行时间

intprior;

//进程优先级}PCB;/*

*链式队列结点

*存放一个PCB

*

和指向下一个PCB的指针

*/voidPrint_List_Queue(LIST_QUEUE*queue){

intsize=Size_Of_List_Queue(queue);

QUEUE_NODE*tmp=queue->front->next;

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

printf("pid:%d,time:%d,prior:%d\n",tmp->data->pid,tmp->data->need_time,tmp->data->prior);

tmp=tmp->next;

}}/*

*模拟进程运行

*优先数-1

*需要时间-1

*/voidrun(PCB*pcb){

if(pcb->prior>0)

pcb->prior--;

pcb->need_time--;}/*

*判断进程是否运行完成

*是返回1

*否返回0

*/intIs_Finsihed(PCB*pcb){

return(pcb->need_time<=0);}/*

*进程调度

*/voidschedul(LIST_QUEUE*queue){

PCB*del=NULL;

printf("\n");

printf("P[%d]isrunning...",queue->front->next->data->pid);

printf("PID\tPrior\tTime\n");

printf("%d\t%d\t%d\n",

queue->front->next->data->pid,

queue->front->next->data->prior,

queue->front->next->data->need_time);

run(queue->front->next->data);

if(Is_Finsihed(queue->front->next->data))

{

printf("P[%d]isfinished!\n",queue->front->next->data->pid);

Out_List_Queue(queue,del);

free(del);

}

/*

*优先级发生变化,调整队列顺序

*/

Adjust_List_Queue(queue);}/*

*主函数

*/intmain(){

LIST_QUEUE

*process_pool=Init_List_Queue();

PCB

*pcb;

inti;

/*

*获取测试数据

*/

for(i=0;i<NUM_OF_PROCESS;i++){

pcb=(PCB*)malloc(sizeof(PCB));

pcb->pid=i+1;

printf("P[%d].prior=",i+1);

scanf("%d",&(pcb->prior));

printf("P[%d].needTime=",i+1);

scanf("%d",&(pcb->need_time));

In_List_Queue(process_pool,pcb);

free(pcb);

}

Adjust_List_Queue(process_pool);

/*

*进程调度

*/

while(!Is_Empty_List_Queue(process_pool))

{

schedul(process_pool);

}

//

温馨提示

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

评论

0/150

提交评论