版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
实验二进程调度1。目得与要求通过这次实验,理解进程调度得过程,进一步掌握进程状态得转变、进程调度得策略,进一步体会多道程序并发执行得特点,并分析具体得调度算法得特点,掌握对系统性能得评价方法。2.实验内容阅读教材《计算机操作系统》第二章与第三章,掌握进程管理及调度相关概念与原理。编写程序模拟实现进程得轮转法调度过程,模拟程序只对PCB进行相应得调度模拟操作,不需要实际程序.假设初始状态为:有n个进程处于就绪状态,有m个进程处于阻塞状态。采用轮转法进程调度算法进行调度(调度过程中,假设处于执行状态得进程不会阻塞),且每过t个时间片系统释放资源,唤醒处于阻塞队列队首得进程。程序要求如下:1)输出系统中进程得调度次序;2)计算CPU利用率。3。实验环境Windows操作系统、VC++6、0C语言4设计思想:(1)程序中进程可用PCB表示,其类型描述如下:structPCB_type{intpid;//进程名intstate;//进程状态2——表示“执行”状态1——表示“就绪”状态0-—表示“阻塞”状态intcpu_time;//运行需要得CPU时间(需运行得时间片个数)}用PCB来模拟进程;(2)设置两个队列,将处于“就绪”状态得进程PCB挂在队列ready中;将处于“阻塞”状态得进程PCB挂在队列blocked中。队列类型描述如下:structQueueNode{structPCB_typePCB;StructQueueNode*next;}并设全程量:structQueueNode*ready_head=NULL,//ready队列队首指针*ready_tail=NULL,//ready队列队尾指针*blocked_head=NULL,//blocked队列队首指针*blocked_tail=NULL;//blocked队列队尾指针(3)设计子程序:start_state();读入假设得数据,设置系统初始状态,即初始化就绪队列与阻塞队列。dispath();模拟调度,当就绪队列得队首进程运行一个时间片后,放到就绪队列末尾,每次都就是队首进程进行调度,一个进程运行结束就从就绪队列中删除,当到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-—表示”执行"状态//1-—表示"就绪"状态//0--表示"阻塞"状态intcpu_time;//运行需要得CPU时间(需运行得时间片个数)};structQueueNode{structPCB_typePCB;structQueueNode*next;};structQueueNode*ready_head=NULL,//ready队列队首指针*ready_tail=NULL,//ready队列队尾指针*block_head=NULL,//blocked队列队首指针*block_tail=NULL;//blocked队列队尾指针intuse_cpu,unuse_cpu;voidstart_state()//读入假设得数据,设置系统初始状态{intn,m;ﻩinti;ﻩstructQueueNode*p,*q;ﻩprintf("输入就绪节点个数n:");ﻩscanf("%d”,&n);ﻩprintf("输入阻塞节点个数m:”); scanf("%d”,&m);p=(structQueueNode*)malloc(sizeof(structQueueNode)); p->next=NULL; ready_head=ready_tail=p;ﻩfor(i=0;i<n;i++) {ﻩp=(structQueueNode*)malloc(sizeof(structQueueNode)); p—>next=NULL;ﻩp—>PCB、state=1; printf("输入就绪进程%d得pid与cpu_time:",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_tail=q; for(i=0;i<m;i++) { q=(structQueueNode*)malloc(sizeof(structQueueNode));ﻩq-〉next=NULL;ﻩq-〉PCB、state=0;ﻩprintf("输入阻塞进程%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=1; while(p) {printf(“进程%d得pid与state与cpu_time:%5d%5d%5d\n”,i,p—>PCB、pid,p->PCB、state,p—>PCB、cpu_time);ﻩ p=p—〉next;ﻩ i++; }}voiddispath()//模拟调度{intx=0,t;use_cpu=0;unuse_cpu=0;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(ready_head->next==NULL)ﻩ { ﻩready_tail=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_tail->next=p;ﻩﻩ ready_tail=p;ﻩﻩ}ﻩﻩelse {ﻩ ﻩprintf("进程%d完成\t",p->PCB、pid);ﻩﻩfree(p);ﻩ } }ﻩelse {ﻩunuse_cpu++; ﻩx++;ﻩprintf("空闲一个时间片\t”); }ﻩif(x==t&&block_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得利用率%.2f\n",(float)use_cpu/(use_cpu+unuse_cpu));}voidmain(){start_state();dispath();calculate();}6运行结果:7实验总结:实验帮我复习了数据结构与C语言,且巩固课本知识,知道了如何定义结构体,如何在链接队列中增删节点。模拟进程调度帮我们巩固了进程三状态之间得变迁。懂得调式得重要性。总之,我们明白了理论联系实际.多瞧书,多上机。实验三可变分区存储管理1.目得与要求通过这次实验,加深对内存管理得认识,进一步掌握内存得分配、回收算法得思想。2。实验内容阅读教材《计算机操作系统》第四章,掌握存储器管理相关概念与原理。编写程序模拟实现内存得动态分区法存储管理。内存空闲区使用自由链管理,采用最坏适应算法从自由链中寻找空闲区进行分配,内存回收时假定不做与相邻空闲区得合并。假定系统得内存共640K,初始状态为操作系统本身占用64K。在t1时间之后,有作业A、B、C、D分别请求8K、16K、64K、124K得内存空间;在t2时间之后,作业C完成;在t3时间之后,作业E请求50K得内存空间;在t4时间之后,作业D完成。要求编程序分别输出t1、t2、t3、t4时刻内存得空闲区得状态。3.实验环境Windows操作系统、VC++6、0C语言4、设计思想模拟内存分配与回收,要设置两个链队列,一个空闲区链与一个占用区链,空闲区链节点有起始地址,大小与指向下一节点得指针等数据域,占用区链节点有起始地址,大小,作业名与指向下一节点得指针等数据域,本实验用最坏适应算法,每次作业申请内存都就是从空闲链队头节点分配,如果相等,就删除空闲头结点,如果小于申请得,就不分配,否则就划分内存给作业,剩下得内存大小,重新插入空闲链队,按从大到小,接着把作业占用得内存放到占用区链节点得末尾。每次作业运行完,就要回收其占用得内存大小,把作业节点按从大到小插入到空闲链队中.5、源代码:#include〈stdio、h>#include<stdlib、h>structfreelinkNode{intlen;intaddress;structfreelinkNode*next;};structbusylinkNode{charname;intlen;intaddress;structbusylinkNode*next;};structfreelinkNode*free_head=NULL;//自由链队列(带头结点)队首指针structbusylinkNode*busy_head=NULL;//占用区队列队(带头结点)首指针structbusylinkNode*busy_tail=NULL;//占用区队列队尾指针voidstart(void)/*设置系统初始状态*/{ﻩstructfreelinkNode*p;structbusylinkNode*q;free_head=(structfreelinkNode*)malloc(sizeof(structfreelinkNode));free_head->next=NULL;//创建自由链头结点busy_head=busy_tail=(structbusylinkNode*)malloc(sizeof(structbusylinkNode));busy_head-〉next=NULL;//创建占用链头结点p=(structfreelinkNode*)malloc(sizeof(structfreelinkNode));p->address=64;p—〉len=640—64;//OS占用了64Kp-〉next=NULL;free_head->next=p;q=(structbusylinkNode*)malloc(sizeof(structbusylinkNode));q—〉name='S';/*S表示操作系统占用*/q—〉len=64;q—〉address=0;q-〉next=NULL;busy_head-〉next=q;busy_tail=q;}voidrequireMemo(charname,intrequire)/*模拟内存分配*/{ freelinkNode*w,*u,*v; busylinkNode*p;ﻩif(free_head—〉next-〉len>=require) { ﻩp=(structbusylinkNode*)malloc(sizeof(structbusylinkNode));p—〉name=name;p->address=free_head—>next->address;p—>len=require;ﻩ p->next=NULL;busy_tail-〉next=p;ﻩ busy_tail=p; }ﻩelse ﻩprintf("Can’tallocate");w=free_head—>next;free_head->next=w—>next;if(w->len==require){ ﻩ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)) {u=v; v=v-〉next; }ﻩu—>next=w;w—>next=v;}voidfreeMemo(charname)/*模拟内存回收*/{ﻩintlen;intaddress;ﻩbusylinkNode*q,*p; freelinkNode*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(”%cisnotexist”,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)) ﻩ{u=v;v=v-〉next;ﻩ } u-〉next=w;
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025-2026年河南省苏教版九年级化学下册溶液知识点巩固习题
- 2025-2026年人教版高二地理第4章人文地理练习题
- 2025-2026年黑龙江省人教版高三化学第十四章有机化学实验综合测试卷
- 2025-2026年浙江省苏教版七年级数学下册第2章综合测试卷
- 2025-2026年浙江省北师大版高三生物第11课生物技术前沿与趋势练习题
- 2026年网络工程专业保研高频面试题包含详细解答
- 身心健康与生命教育
- 一种治疗痛风性关节炎的中药制剂
- 肿瘤靶向治疗药物筛选与评价
- 2026年居功自傲成语故事谦逊品格教案
- 2026 年秋季开学:大一新生入学适应第一课开启全新大学人生篇章课件
- 2026-2030中国树脂行业市场发展分析及趋势前景与投资战略研究报告
- 2024江苏省惠隆资产管理限公司招聘30人【重点基础提升】模拟试题(共500题)附带答案详解
- DL/T5315-2014水工混凝土建筑物修补加固技术规程(完整)
- 世界著名盐产地介绍
- 滴滴标准服务流程
- zippo稀有品系列图鉴
- 《中国旅游文化》教案
- 基于提升核心素养的练习题设计
- GB/T 2091-2008工业磷酸
- GB/T 16709.1-2010真空技术管路配件的装配尺寸第1部分:非刀口法兰型
评论
0/150
提交评论