操作系统-单处理器的进程调度实验报告_第1页
操作系统-单处理器的进程调度实验报告_第2页
操作系统-单处理器的进程调度实验报告_第3页
操作系统-单处理器的进程调度实验报告_第4页
操作系统-单处理器的进程调度实验报告_第5页
已阅读5页,还剩2页未读 继续免费阅读

下载本文档

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

文档简介

1、实验二 单处理器系统的进程调度年级 2009级 学号 姓名 郭占强 成绩 专业 生物信息学 实验地点 生科楼409 指导教师 王硕 实验项目 单处理器系统的进程调度 实验日期 2011年11月25日 一、实验目的 加深对进程概念的理解,明确进程和程序的区别;深入了解系统如何组织进程、创建进程;进一步认识如何实现处理器调度。二、实验要求编写程序完成单处理机系统中的进程调度,要求采用时间片轮转调度算法。实验具体包括:首先确定进程控制块的内容,进程控制块的组成方式;然后完成进程创建原语和进程调度原语;最后编写主函数对所作工作进程测试。三、实验原理:单处理器系统的进程调度四、实验程序设计#includ

2、e#include#define RUNNING 1/用RUNNING 表示进程处于运行态#define WAIT 2/用wait表示进程处于就绪态#define FINISH 3/用FINISH表示进程已经执行完毕#define TIME_PIECE 5/用TIME_PIECE表示时间片大小#define MAX_PROCESS_NUM 10/假定系统允许进程个数为10int AX,BX,CX,DX,PC,PSW,TIME;/模拟寄存器int run;/定义指向正在运行进程的进程控制块的指针int pfree;/定义指向空闲进程控制块队列的指针structint head;int tail;

3、ready;/定义指向就绪队列的头指针head和尾指针tailstructint name;/进程标识符int status;/进程状态int ax, bx, cx,dx;/进程现场信息,通用寄存器内容int pc;/进程现场信息,程序计数器内容int psw;/进程现场信息,程序状态字寄存器内容int time;/进程每次申请的时间片大小int totalTime;/执行进程需要的总时间int remainingTime;/进程剩余的执行时间int next;/下一个进程控制块的位置pcbareaMAX_PROCESS_NUM;/定义模拟进程控制块区域的数组/进程控制块初始化void Ini

4、t()int i;run=ready.head=ready.tail=-1;/运行指针、就绪指针清空pfree=0;/空闲指针指向第一个进程for(i=0;iMAX_PROCESS_NUM-1;+i) pcbareai.next=i+1;pcbareaMAX_PROCESS_NUM-1.next=-1;/创建进程void Create(int process_name,int ax,int bx,int cx,int dx,int pc,int psw,int totalTime)int i;if(pfree=-1) /空闲进程控制块队列为空 printf(无空闲进程控制块,进程创建失败n);

5、 return;i=pfree;/取空闲进程控制块队列的第一个pfree=pcbareapfree.next;/pfree后移/填写该进程控制块内容=process_name;pcbareai.status=WAIT;pcbareai.ax=ax;pcbareai.bx=bx;pcbareai.cx=cx;pcbareai.dx=dx;pcbareai.pc=pc;pcbareai.psw=psw;pcbareai.time=TIME_PIECE;pcbareai.totalTime=totalTime;pcbareai.remainingTime=totalTime

6、;if(ready.head!=-1) /就绪队列不空时,置入就绪队列 pcbareaready.tail.next=i; ready.tail=i; pcbareaready.tail.next=-1;else /就绪队列空时,置入就绪队列 ready.head=i; ready.tail=i; pcbareaready.tail.next=-1;printf(n);/进程调度函数void Sheduling()getchar();if(ready.head=-1) /空闲进程控制块队列为空,退出 printf(进程调度完毕!nnn); return;run=ready.head;/就绪队列

7、头指针赋给run,即让就绪队列的队头运行ready.head=pcbareaready.head.next;/就绪队列头指针后移if(ready.head=-1) ready.tail=-1;/就绪队列为空,修正尾指针ready.tailpcbarearun.status=RUNNING;/修改进程控制块状态/恢复该进程现场信息AX=pcbarearun.ax;BX=pcbarearun.bx;CX=pcbarearun.cx;DX=pcbarearun.dx;PC=pcbarearun.pc;PSW=pcbarearun.psw;TIME=pcbarearun.time;/设置相对时钟寄存器

8、的时间片/打印进程以及系统的状态信息printf(n进程编号:%dn,);printf(进程状态:运行n);printf(寄存器内容:n);printf(AX: %dn,AX);printf(BX: %dn,BX);printf(CX: %dn,CX);printf(DX: %dn,DX);printf(PC: %dn,PC);printf(PSW: %dn,PSW);printf(TIME:%dnn,TIME);printf(n*时间片用完*n);AX=BX=CX=DX=PC=PSW=TIME=0;/时间片用完立即归还CPU资源/若进程执行完毕,则回收进程控制块

9、if(pcbarearun.remainingTime0) printf(请输入该进程中ax、bx、cx、dx、pc、psw的初始现场信息:); scanf(%d%d%d%d%d%d,&ax,&bx,&cx,&dx,&pc,&psw); printf(请输入该进程运行所需的总时间:); scanf(%d,&totalTime); Create(process_name,ax,bx,cx,dx,pc,psw,totalTime); if(i0) -i; printf(输入一个进程的编号(现在还可以创建%d个进程):,i); scanf(%d,&process_name); system(cls); printf(请按回车开始调度); getchar(); Sheduling(); printf(退出请按0,重新测试请按任意键:); quit=getch

温馨提示

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

评论

0/150

提交评论