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

下载本文档

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

文档简介

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

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

3、eueNodestructPCB_typePCB;StructQueueNode*next;)并设全程量:structQueueNode*ready_head=NULL, /ready 队列队首指针*ready_tail=NULL, /ready 队列队尾指*blocked_head=NULL, /blocked 队列队首指针*blocked_tai 1=NULL; /blocked 队列队 尾指针(3)设计子程序:start_state ();读入假设的数据,设置系统初始状态,即初始化就绪队列和阻塞队 列。di spath ();模拟调度,当就绪队列的队首进程运行一个时间片后,放到 就绪队列

4、末尾,每次都是队首进程进行调度,一个进程运行 结束就从就绪队列中删除,当到t个时间片后,唤醒阻塞队 列队首进程。calculate ();就绪进程运行一次,usecpu加1,当就绪队列为空时unusecpu加 1» CPU 利用率为 use_cpu/ (use_cpu+unuse_cpu)。5源代码:#include<stdio. h>#include<stdlib. h>structPCB_type intpid; 进程名intstate; 进程状态2一表示执行状态-表示就绪状态/0一表示阻塞状态intcpjtime;运行需要的CPU时间(需运行的时间片个数

5、);structQueueNodestructPCB_typePCB;structQueueNode*next;);structQueueNode*ready_head=NULL, ready 队列队首指针*ready_tai 1=NULL, /ready 队列队尾指针*block_head=NULL, /blocked 队列队首指针*block_tail=NULL;/blocked 队列队尾指针intuse_cpu, unuse_cpu;voidstart_state()读入假设的数据,设置系统初始状态(intn, m;inti;structQueueNode*p, *q;printf (输

6、入就绪节点个数n: );scanf(%d,&n);printf (输入阻塞节点个数m: );scanf(%d, &m);p=(structQueueNode*)malloc(sizeof(structQueueNode);p->next=NULL;ready_head=ready_tai l=p;for(i=0;i<n;i+)(p=(structQueueNode*)malloc(sizeof(structQueueNode);p->next=NULL;p->PCB. state=l;printf (输入就绪进程%d 的 pid 和 cpu_time:

7、,i+1);scanf(%d%d,&p->PCB. pid,&p->PCB.cpu_time);ready_tail->next=p;ready_tail=p;q=(structQueueNode*)malloc(sizeof(structQueueNode);q->next=NULL;block_head=block_tai1=q;for(i=0;i<m;i+)(q=(structQueueNode*)malloc(sizeof(structQueueNode);q->next=NULL;q->PCB. state=O;printf

8、("输入阻塞进程%d 的 pid 和 cpu_time: i+1);scanf (,%d%d,, &q->PCB. pid, &q->PCB. cpu_time);block_tail->next=q;block_tail=q;)printf (n处于就绪状态的进程有:n);p=ready_head->next;i=l;while(p)printf (“进程/d 的 pid 和 state 和cpu_time :%5d%5d%5dn,> i, p->PCB. pid, p->PCB. state, p->PCB. cpu

9、_time);p=p->next;i+;)voiddispath () 模拟调度(intx=0, t;use_cpu=0;unuse_cpu=O;printf (输入 t: );scanf (%d”, &t);printf (开始调度n);while(ready_head!=ready_tail block_head!=block_tail)(structQueueNode*p, *q;if(ready_head!=ready_tail)(p=ready_head-next;ready_head->next=p->next;p->next=NULL;if(rea

10、dy_head->next二二NULL)(ready_tai1=ready_head;p->PCB. state=2;printf ("进程缶d 调度t,p->PCB. pid);use_cpu+;x+;p->PCB. cpu_time;if(p->PCB. cpu_time)ready_tai1-next=p;ready_tail=p;)else(printf ("进程外d 完成t,p->PCB. pid);free(p);)else(unuse_cpu+;x+;printf (空闲一个时间片t);if(x=t&&blo

11、ck_head!=block_tail)(q=block_head->next;block_head-next=q->next;q->next二NULL;if (block head->next=NULL)block_tail=block_head;)ready_tail->next=q;ready_tail=q;x=0;)voidcalculate () 计算 CPU 利用率(printf (ncpu 的利用率先. 2fn,(float) use_cpu/ (use_cpu+unuse_cpu);voidmain ()start_state ();dispath

12、();calculate ();6运行结果:7实验总结:实验帮我复习了数据结构和C语言,且巩固课本知识,知道了如何定义 结构体,如何在链接队列中增删节点。模拟进程调度帮我们巩固了进程 三状态之间的变迁。懂得调式的重要性。总之,我们明白了理论联系实 际。多看书,多上机。实验三可变分区存储管理1 .目的和要求通过这次实验,加深对内存管理的认识,进一步掌握内存的分配、回 收算法的思想。2 .实验内容阅读教材计算机操作系统第四章,掌握存储器管理相关概念和原 理。编写程序模拟实现内存的动态分区法存储管理。内存空闲区使用自由 链管理,采用最坏适应算法从自由链中寻找空闲区进行分配,内存回收 时假定不做与相邻

13、空闲区的合并。假定系统的内存共640K,初始状态为操作系统本身占用64K。在tl 时间之后,有作业A、B、C、D分别请求8K、16K、64K、124K的内存空 间;在t2时间之后,作业C完成;在t3时间之后,作业E请求50K的 内存空间;在t4时间之后,作业D完成。要求编程序分别输出tl、t2、 t3、t4时刻内存的空闲区的状态。3 .实验环境Windows 操作系统、VC+6. 0C语言4 .设计思想 模拟内存分配和回收,要设置两个链队列,一个空闲区链和一个占用区 链,空闲区链节点有起始地址,大小和指向下一节点的指针等数据域, 占用区链节点有起始地址,大小,作业名和指向下一节点的指针等数据

14、域,本实验用最坏适应算法,每次作业申请内存都是从空闲链队头节点 分配,如果相等,就删除空闲头结点,如果小于申请的,就不分配,否 则就划分内存给作业,剩下的内存大小,重新插入空闲链队,按从大到 小,接着把作业占用的内存放到占用区链节点的末尾。每次作业运行 完,就要回收其占用的内存大小,把作业节点按从大到小插入到空闲链 队中。5 .源代码:#include<stdio. h>#include<stdlib. h>structfreelinkNodeintlen;intaddress;structfreelinkNode*next;);structbusylinkNodech

15、arname;intlen;intaddress;structbusy1inkNode*next;);structfreelinkNode*free_head=NULL;自由链队列(带头结点)队首指针structbusylinkNode*busy_head=NULL;占用区队列队(带头结点)首指针structbusyl inkNode*busy_tai 1 = NULL; 占用区队列队尾指针 voidstart (void) /*设置系统初始状态*/(struetfreelinkNode*p;structbusylinkNode*q;free_head=(structfreelinkNode*

16、)malloc (sizeof(structfreelinkNode );free_head->next=NULL;创建自由链头结点busy_head=busy_tai1=(structbusylinkNode*)malloc(sizeof (structbu sylinkNode);busy_head->next=NULL ;创建占用链头结点p=(structfreelinkNode*)malloc(sizeof(structfreelinkNode);p->address=64;p->len=640-64;/0S 占用了 64Kp->next=NULL;fre

17、e_head->next=p;q=(structbusylinkNode*)malloc(sizeof(structbusylinkNode); q-name='S' ;/*S表示操作系统占用*/q->len=64;q->address=O;q-next二NULL;busy_head->next=q;busy_tai1=q;voidrequireMemo (charname, intrequire)/* 模拟内 存分配*/(freelinkNode*w, *u, *v;busy1inkNode*p;if(free_head->next->le

18、n>=require)(p=(structbusylinkNode*)malloc(sizeof(structbusylinkNode); p->name=name;p->address=free_head-next->address;p->len=require;p->next=NULL;busy_tai1->next=p;busy_tail=p;)elseprintf (Can' tallocatez,);w=free head->next;free_head->next=w->next;if (w->len=:zr

19、equire)(free(w);)else(w->address=w->address+require;w->len=w->len-require;)u=free_head;v=free_head->next;while(v!=NULL)&&(v->len>w->len)"V;v=v->next;u->next=w;w->next=v;)voidfreeMemo (charname) / * 模拟内存回收*/intlen;intaddress;busy1inkNode*q, *p;freelinkNod

20、e*w, *u, *v;q=busy_head;p=busy_head->next;while(p!=NULL)&&(p->name!=name)q=p;p=p->next;if(p二二NULL)(printf (机isnotexist”, name);)else(if (p-busy_tail)busy_tail=q;else(q">next=p->next;len=p->len;address=p->address;free(p);w=(structfreelinkNode*)malloc(sizeof(structfreelinkNode);w->len=len;w-address=address;u=free_head;v=free_head->next;while(v!=NULL)&&(v->len>len)"V;v二v->next;)u->next=w;w->next=v;)voidpast (inttime)/*模拟系统过了 time 时间*/print

温馨提示

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

评论

0/150

提交评论