操作系统实验报告70416_第1页
操作系统实验报告70416_第2页
操作系统实验报告70416_第3页
已阅读5页,还剩9页未读 继续免费阅读

下载本文档

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

文档简介

1、实验二进程调度1. 目的和要求通过这次实验,理解进程调度的过程,进一步拿握进程状态的转变、进程调 度的策略,进一步体会多道程序并发执行的特点,并分析具体的调度算法的特点, 掌握对系统性能的评价方法。2. 实验内容阅读教材计算机操作系统第二章和第三章,掌握迸程管理及调度相关概 念和原理。编写程序模拟实现进程的轮转法调度过程,模拟程序只对PCB进行相应的 调度模拟操作,不需要实际程序。假设初始状态为:有n个进程处于就绪状态, 有m个进程处于阻塞状态。采用轮转法进程调度算法迸行调度(调度过程中,假 设处于执行状态的进程不会阻塞),且每过t个时间片系统释放资源,唤醒处于阻 塞队列队首的进程。程序要求如

2、下:1)输出系统中进程的调度次序;2)计算CPU利用率。3. 实验环境Windows 操作系统、VC+6.0C语言4设计思想:(1) 程序中进程可用PCB表示,其类型描述如下:struct PCB_typeint pid;/迸程名int state ;/进程状态2示"执行"状态1示“就绪”状态0示“阻塞”状态int cpu.time ; 运行需要的CPU时间(需运行的时间片个数)用PCB来模拟进程;(2) 设置两个队列,将处于“就绪”状态的迸程PCE挂在队列ready中;将处于“阻塞”状态的进程PCB挂在队列blocked中。队列类型描述如下: struct QueueNo

3、destruct PCB.type PCB;Struct QueueNode *next;并设全程量:struct QueueNode *ready_head=NULL,/ready 队列队首指针*ready_tail=NULL, /ready 队列队尾指针*blocked.head=NULL,/blocked 队列队首针*blockcd_tail=NULL; /blocked 队列队尾指针(3) 设计于程序:starCstateQ;读入假设的数据,设置系统初始状态,即初始化就绪队列和阻塞队列。dispathO;模拟调度,当就绪队列的队首进程运行一个时间片后,放到就绪队列 末尾,每次都是队首进

4、程迸行调度,一个进程运行结束就从就绪队列 中删除,当到t个时间片后,唤醒阻塞队列队首进程。calculateQ;就绪进程运行一次,usccpii加1,当就绪队列为空时unusccpu加1,CPU 利用率为 usc_cpu/(usc_cpu+unusc_cpu)05源代码:#includc < s tdio .h >#includc<stdlib.h> struct PCB_typuint pid ;/进程若int state ;/迸程状态/2-表示"执行"状态/I-表示”就绪"状态/0-表示”阻塞'状态int cpu.iimc ;

5、运行雲要的CPU时间(需运行的时间片个数) ;struct QucucNodcstruct PCB_typu PCB;struct QucucNodc *ncxt;/ready队列队首指针/ready队列队尾指针/blocked队列队首指针*block_tail=Nl;LL;/blocked队列队尾指针struct QucucNodc *rcady_hcad=NCILL, *rcady_tail=NU LL, *block_hcad=NULL>mt us jepgunus jepu;void start_statcO /读入假设的数据,设宣系统初始状态int n,m;int i;stru

6、ct QucucNodc *p,*q;priniff输入就绪节点个数n:“);scanF(”d”,&n);printfC*输入阻塞节点个数m:u);scanf(M%dl&m);p=(struct QucucNodc *)mall()c(sizcof(struct QucucNodc); p->ncxt =NULL;ready_head=ready_tail=p;f(>r(i=0;i<n;计+)p=(struct QucucNodc *)malk)c(sizcof(stnict QucucNodc); p->ncxt =NULL;p->PCB.sta

7、tc=l;printff,输入就绪进程d 的 pid 和 cpu_time:"j+l); scanf("%d%d",&p>PCBpid、&p>PCB.cpu_timu); rcady_tail->ncxt=p;rcady_tail=p;q= (struct QucucNodc *)mall()c(sizcof(struct QucucNodc); q->ncxt =NULL;block_hcad=block_tail=q;f(>r(i=0;i<m3+)q=(struct QucucNodc *)malloc(si

8、zc(>f(struct QucucNodc); q->ncxt=NULL;q->PCB.statc=O;printff'输入阻塞进程d 的 pid 和 cpu_time:M,i+l); scanf(M%d%d,&q->PCB.pid>&q->PCB.cpu_rimc); block_tail->ncxt=q;block_tail=q;printfCn处于就绪状态的进程有:);p=rcady_hcad->ncxt;i=l;whilc(p)printf("进 程 d的pid和slatecpu_timc:%5d%5d

9、%5dn,i>p->PCB.pid,p->PCB.statc,p->PCB.cpu_timc);p=p->ncxt;i+;void dispath()模拟调度int x=O,t;usc_cpu=O;unusc_cpu=O;printf(”输入匕”);scanf(H%dH,&t);printf(”开始调度眄;whilc(rcady_hcad!=rcady_tail | | bk>ck_hcad!=bk)ck_tai 1)struct QucucNodc *p,*q;i f(rcady_hcad!=re ady_tail)p=rcadv_hcad->

10、;ncxt; rcady_hcad->ncxt=p->ncxt; p->ncxt=NULL;i f(re ady_hcad - > ncxt=N U LL)rcady_tail=rcady_hcad; p->PCB.statc=2;primf(”迸程d 调度tH,p->PCB.pid); usc_cpu+;x+;p->PCB.cpu_timc-; if(p->PCB.cpu_timc) rcady_tail->ncxt=p; rcadv_tail=p;elseprintfC 进程<1 完成tp->PCB.pid); frcc(p

11、);elseunusc_cpu+;x+;printf(”空闲一个时间片门;if(x=t&&bl()ck_hcad!=block_tail)q=block_hcad->ncxt;bl(x:k_hcad:q->ncxt=NULL;if(block_hcad->ncxi=NULL)block Uiil=block hcad;rcady_Uiil-> ilex t=q;rcady_tail=q;x=0;void calculatcO/计算 CPU 利用率printff'Xncpu 的利用%.2fnM,(fl(>at)usc_cpu/(usc_cpu

12、+unusc_cpu);void main() start_statc();dispathQ; calculatcQ;6运行结果:tine :1 2tine:2 3tine:3 4tine:4 5tine:5 6u u u u u p p p p p c c c c c THM CTZTT 2 3禾禾木禾木> d d d d dn m 工nF<rl .1敷疑Jpp p p pXV/1/_1 12 12 3点卄卫理进逬进进 MM緒 4OW nV IV HV IV V .V V*1度度度2 3-45进进空进进*1成度度成闊完13- 455进进空进进讲片间 褊成度度度1-3455 Hi

13、进空进进进讲e emm1 1tzt pupu hr c c rn D 呈禾苏 XT- e e 4b- t t 龙adt t g s s 态和和 状idld 七-flp p6亠和1 2 t 1 2 3 4 4 5勺 ses 处进进输开进进进进进进lopFy片间度成度高度ue 调调in illon 进进进进空进 CO3 t y5Ke 支度度度度成度恥ny備利a 12 3 4 4 5 nV s7实验总结:实验帮我复习了数据结构和c语言,且巩固课本知识,知道了如何定义结构体,如何在链 接队列中増删节点。模拟进程调度帮我们巩固了进程三状态之间的变迁。僮得调式的重要性。 总之,我们明白了理论联系实际。多看

14、书,多上机。实验三 可变分区存储管理1. 目的和要求通过这次实验,加深对内存管理的认识,进一步拿握内存的分配、回收算法 的思想。2. 实验内容阅读教材计算机操作系统第四章,掌握存储器管理相关槪念和原理。编写程序模拟实现内存的动态分区法存储管理。内存空闲区使用自由链管 理,采用最坏适应算法从自由链中寻找空闲区进行分配,内存回收时假定不做与 相邻空闲区的合并。假定系统的内存共640K,初始状态为操作系统本身占用64K。在tl时间之 后,有作业A、E、C、D分别请求8K、16K、64K、124K的内存空间;在i2时 间之后,作业C完成;在1-3时间之后,作业E请求50K的内存空间;在蚪时间 之后,作

15、业D完成。要求编程序分别输岀讨、12、13、t4时刻内存的空闲区的状 态。3. 实验环境Windows 操作系统、VC+6.0C语言4 设计思想模拟内存分配和回收,要设晝两个植队列,一个空闲区链和一个占用区链,空闲区链节点有 起始地址,大小和指向下一节点的指针等敌据域,占用区链节点有起始地址,大小,作业名 和指向下一节点的指针等敖据域,本实验用杲坏适应算法,每次作业申请内存都是从空闲链 队头节点分配,如果相等,就删除空闲头结点,如果小于申请的,就不分配,否则就划分内存给作业,剩下的内存大小,重新插入空闲链队,按从大到小, 接着把作业占用的内存放到占用区链节点的末尾。每次作业运行完,就要回收其占

16、用的内存 大小,把作业节点按从大到小插入到空闲链队中。5 源代码:#includc<stdio.h>#includc<stdlib.h>struct frcclinkNodcint lcn;int address;struct frcclinkNodc *ncxt;struct busyliiikNodcchar name;int len;int address;struct busyliiikNodc *ncxt;struct frcclinkNodc *frcc_hcad=NL LL; /自由链队列(带头结点)队首指针struct busylinkNodc *bus

17、y_hcad=NC1LL; /占用区队列队(带头结点)首指针 struct busyliiikNodc 或busy_sil=NULL;/ 占用区队列队尾指针void slart(void) /*设直系统初始状态*/struct frcclinkNodc *p;struct busylinkNodc *q;frcc_hcad=(struet frcclinkNodc*)mall()c(sizcof(struct frcclinkNodc);frcc_hcad.>ncxt=NULL; /创逹自由链头结点busy_hcad=busy_tail=(struct busylinkNodc*)mal

18、l()c(sizcof(struct busyliiikNodc); busy_hcad->ncxt=NULL; /创建占用链头结点p=(struct frcclinkNodc *)malloc(sizcof(struct frcclinkNodc);p->addrcss=64;p->len=640-64;/OS 占用了 64Kp->ncxt=NULL;frcc_hcad->ncxt=p;q=(struct busylinkNodc *)malloc(sizcof(struct busylinkNodc);q->namc='S,; /* S表示操作系

19、统占用*/q->lcn=64; q->addrcss=O; q->ncxt=NU LL; busy_hcad->ncxt=q; busy_tail=q;void rcquircMcmo(char name, int require) /*模拟内存分配*7frcclinkNodcbusylinkNodc *p;if(frcc_hcad ncxt->lcn>=require)p=(struct busylinkNodc*)mall()c(sizcof(struct busylinkNodc); p->namc=namc;>addrcss=frcc_h

20、cad->ncxt->addrcss;p->ncxt=NULL;busy_tail->ncxt=p; busy_tail=p;printfCan allocate11);w=frcc_hcad->ncxt; frcc_hcad->ncxt=w->ncxt;i f(w->lcn=require)frcc(w);w->addrcss=w->addrcss+rcquirc; w->lcn=w->lcn-require;u=frcc_hcad;v= frcc_hcad->ncxt;whilc(v!=NULL) &&a

21、mp;(v-> len>w-> len) u=v;v=v->ncxt;u->ncxv=w;w->ncxt=v;void frccMcmo(char name) /* 模拟內存回收來/ int len;int address;busylinkNodc *q,*p;frcclinkNodcq=busy_hcad;p=busy_hcad->ncxt;while(p!=NU LL)&&(p->namc!=namc)p=p->ncxt;if(p=NULL)printf(M%c is not cxistnamc);elseif(p=bu

22、sy_tail) busy_tail=q;else q->ncxt=p->ncxt;lcn=p->lcn;addrcss=p >"ddruss;frce(p);w= (struct frcclinkN()dc*)malk)c(sizcof(struct frccliiikNodc); w->lcn=lcn;>2ddruss=2ddrc:ss;u=frcc_hcad;v= frcc_hcad->ncxt;whilc(v!=NULL) && (v->lcn>lcn) u=v;v=v->ncxt;u->ncxt=w;w->ncxt=v;void past(int time) /* 模拟系统过了 time 时间*/printfC过丁时间3 后:n",timc);void printliiikO /*输出内存空闲情况(自由链的结点)*/frcclinkNodc *p;printff内存的空闲情况为:n”);p=(struct frcclinkNodc *)m<dloc(sizcof(struct frcclinkNodc); p=frcc_hcad->ncxt;whilc(p!=N

温馨提示

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

评论

0/150

提交评论