网站大量收购闲置独家精品文档,联系QQ:2885784924

操作系统实验报告--n个进程的进程调度.doc

操作系统实验报告--n个进程的进程调度.doc

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

操作系统课程设计 实验报告 学院:信息学院 班级:计1109班 姓名:林海慧 学号:XXXXXXXXXXXXX 指导老师:XXXX 实验一:设计一个有 N个进程进程调度程序 ??? 通过一个简单的进程调度模拟程序的实现,加深对进程调度算法,进程切换的理解。 进程调度算法:采用最高优先数优先的调度算法(即把处理机分配给优先数最高的进程)。 每个进程有一个进程控制块( PCB)表示。进程控制块可以包含如下信息:进程名优先数到达时间进程的到达时间为进程输入的时间。、 需要运行时间已用CPU时间、进程状态—PCB排成队列。 进程的优先数及需要的运行时间可以事先人为地指定(也可以由随机数产生)。进程的到达时间为进程输入的时间。 进程的运行时间以时间片为单位进行计算。 优先数  每个进程的状态可以是就绪 ()、运行R(Run)、或完成F(Finish)种状态之一。   就绪进程获得 CPU后都只能运行一个时间片。用已占用CPU时间加1来表示。   如果运行一个时间片后,进程的已占用CPU时间已达到所需要的运行时间,则撤消该进程,如果运行一个时间片后进程的已占用CPU时间还未达所需要的运行时间,也就是进程还需要继续运行,此时应将进程的优先数减,然后把它插入就绪队列等待CPU。   每进行一次调度程序都打印一次运行进程、就绪队列、以及各个进程的 PCB,以便进行检查。    重复以上过程,直到所要进程都完成为止。 ????完成验内容并写出实验报告,报告应具有以下内容: ????1.实验目的。 2.实验内容。 3.程序及运行情况。 4.实验过程中出现的问题及解决方法。 #include stdio.h #include stdlib.h #define STARTBLOCK_TIME 3 #define BLOCKTIME_TIME 3 #define N sizeof(PCB) struct PCB // 定义进程控制块PCB / { int ID;//进程标志 //int PID;//进程号 int PRIORITY;//优先数 int ALLTIME;//运行时间ALLTIME,进程运行完毕ALLTIME=0 int CPUTIME;//已用CPU时间 char STATE[10];//进程状态—STATE int STARTBLOCK;//表示当进程在运行STARTBLOCK个时间片后,进程将进入阻塞状态 int BLOCKTIME;//表示当进程阻塞BLOCKTIME个时间片后,进程将进入就绪状态 PCB* NEXT;//队列指针NEXT }; PCB *ready=NULL,*p=NULL,*block=NULL; //p为当前进程 ready为就绪链表表头 block为阻塞链表表头 //插入等待表 void insert_ready(PCB *pcb) { PCB *pp; sprintf(pcb-STATE,ready); int flag=0;//标志进程是否插入 /*就绪队列为空*/ if(ready==NULL) { pcb-NEXT=ready; ready=pcb; } /* 比较进程优先级*/ else { pp=ready; while(pp-NEXT!=NULL) { if((pcb-PRIORITY)(pp-PRIORITY)) /*若插入进程比当前进程优先数大,*/ { pcb-NEXT=pp; ready=pcb;//表头 flag=1; } else { pp=pp-NEXT; } } if(flag==0)//此时进程优先数最低,插入到队尾 { pcb-NEXT=NULL; pp-NEXT=pcb; } } } //插入阻塞表 void insert_block(PCB *pcb) //采用在队列最前插入结点 { sprintf(pcb-STATE,阻塞); if(block==NULL) { block=pcb; } else { pcb-NEXT=block; block=pcb; } } //初始化进程PCB void input_pcb() { int num; printf(\n 请输入进程个数: ); scanf(%d,num); for(int i=0;inum;i++) { printf(\n 初始化第%d个进程信息

您可能关注的文档

文档评论(0)

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

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

1亿VIP精品文档

相关文档