版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、 综合实验报告名 称:操作系统原理综合实验院 系:计算机系 班 级:计科0901 学 号:6 学生姓名: 指导教师:赵文清 成 绩: 日期:2011年 11月 9日1、 实验名称 单处理器系统的进程调度2、 实验目的在采用多道程序设计的系统中,往往有若干个进程同时处于就绪状态。当就绪进程个数大于处理器数时,就必须依照某种策略来决定哪些进程优先占用处理器。本实验模拟在单处理器情况下的处理器调度,帮助学生加深了解处理器调度的工作。3、 实验内容与要求 1、设计多个进程并发执行的模拟调度程序,每个程序由一个PCB表示。2、模拟调度程序选择优先数调度算法实现。3、程序执行中应能在屏幕上显示出各进程的状
2、态变化,以便于观察调度的整个过程。四、实验原理及说明1、假定系统有五个进程,每一个进程用一个进程控制块PCB来代表。进程控制块的格式为:进程名指针要求运行时间已运行时间状态其中,进程名作为进程的标识,假设五个进程的进程名分别为Q1,Q2,Q3,Q4,Q5。指针进程按顺序排成循环队列,用指针指出下一个进程的进程控制块的首地址,最后一个进程的指针指出第一个进程的进程控制块首地址。要求运行时间假设进程需要运行的单位时间数。已运行时间假设进程已经运行的单位时间数,初始值为“0”。状态有两种状态,“就绪”和“结束”,初始状态都为“就绪”,用“R”表示。当一个进程运行结束后,它的状态为“结束”,用“E”表
3、示。2、每次运行所设计的处理器调度程序前,为每个进程任意确定它的“要求运行时间”。3、 把五个进程按顺序排成循环队列,用指针指出队列连接情况。另用一标志单元记录轮到运行的进程。例如,当前轮到P2执行,则有:标志单元 K2 K1Q1 K2Q2 K3Q3 K4Q4 K5Q5K2K3K4K5K12312410000RRRRRPCB1PCB2PCB3PCB4PCB54、处理器调度总是选择标志单元指示的进程运行。由于本实验是模拟处理器调度的功能,所以,对被选中的进程并不实际的启动运行,而是执行:已运行时间+1来模拟进程的一次运行,表示进程已经运行过一个单位的时间。在实际的系统中,当一个进程被选中运行时,
4、必须置上该进程可以运行的时间片值,以及恢复进程的现场,让它占有处理器运行,直到出现等待事件或运行满一个时间片。在这时省去了这些工作,仅用“已运行时间+1”来表示进程已经运行满一个时间片。5、进程运行一次后,应把该进程的进程控制块中的指针值送到标志单元,以指示下一个轮到运行的进程。同时,应判断该进程的要求运行时间与已运行时间,若该进程的要求运行时间已运行时间,则表示它尚未执行结束,应待到下一轮时再运行。若该进程的要求运行时间=已运行时间,则表示它已经执行结束,应指导它的状态修改成“结束”(E)且退出队列。此时,应把该进程的进程控制块中的指针值送到前面一个进程的指针位置。6、若“就绪”状态的进程队
5、列不为空,则重复上面的(4)和(5)的步骤,直到所有的进程都成为“结束”状态。7、在所设计的程序中应有显示或打印语句,能显示或打印每次选中进程的进程名以及运行一次后进程队列的变化。8、为五个进程任意确定一组“要求运行时间”,启动所设计的处理器调度程序,显示或打印逐次被选中的进程名以及进程控制块的动态变化过程。五、实验流程六、实验结果七、实验总结本实验实现了在单处理器情况下的进程调度,我采用了按时间轮转法实现处理器调度,程序编写的比较简单,基本达到实验目的。本实验的成功完成加深了我对进程调度算法的理解,这为后面的作业调度等实验的完成打下了坚实的基础,让我有信心去完成后面的实验设计。程序如下:#i
6、ncludetypedef struct pcbchar name10;int ntime;int rtime;char estate;struct pcb *next;*pointer;void Creatlist(pointer &head,pointer &f,pointer &l,pointer q)pointer p;head=new pcb;head-next=NULL;f=head;for(int i=1;inext=NULL;coutname:p-name;coutneed time:p-ntime;p-rtime=0; p-estate=R;f-next=p;f=f-next
7、;qi=p;f=head-next;l=p;l-next=f;void Cout(pointer &head,pointer q)for(int i=1;i=5;i+)cout标识符:name 要求运行时间:ntime 已运行时间:rtime状态:estate;coutendl;coutnext; while(p-next!=p)|(p-ntime!=p-rtime) p-rtime=p-rtime+1; coutname已运行时间+1。ntime=p-rtime) p-estate=E; coutname已结束。next=p-next; p=q-next; else p=p-next; q=
8、q-next; Cout(head,r); void main()pointer h,f,l,q5;Creatlist(h,f,l,q);Cout(h,q);suanfa(h,f,l,q);1、 实验名称 批处理系统中作业调度2、 实验目的通过本实验算法的设计加深对作业调度的认识,清楚作业调度的全过程。3、 实验内容与要求 此实验模拟批处理系统中的作业调度,并采用响应比高者优先算法作为作业调度算法。4、 实验原理及说明1、 从输入井中选择作业读入内存,使其获得处理器,得到运行的机会,即为作业调度。输入井中的作业用“作业控制块”(JCB,如下所示)标识,为了进行作业调度,将作业控制块组成一个队列
9、,这个队列称为后备队列。 2、模拟实验中没有实际作业,作业控制块中的信息内容只使用了模拟实验中需要的数据。作业控制块中包括作业名、作业大小、所需打印机台数、所需磁带机数量、作业估计执行时间、作业等待时间、指向下一个作业控制块的指针等内容。将作业控制块组成一个队列,实验中采用动态链表的方式模拟作业的后备队列。作业控制块采用结构型数据模拟。3、模拟实验中,主存采用可移动的可变分区管理方法,即只要主存空闲区总和比作业大就可以满足作业对主存的需求。对打印机和磁带机这两种独占设备采用静态分配法,即作业执行前必须获得所需资源,并且执行完才归还。4、实验中作业的调度采用响应比高者优先算法。响应比为作业的等待
10、时间和作业估计执行时间之比。首先计算出输入井中满足条件的作业的响应比,从中选择响应比最高的一个作业装入主存储器,分配资源。由于是模拟实验,可将作业控制块出队装入主存储器的工作用输出作业名模拟,同时修改系统的资源数量。5、模拟实验时,可以首先假设系统的资源情况。假设系统资源只有主存200MB、磁带机10台、打印机10台,然后手工输入某个时刻输入井中的各个作业情况,最后进行作业调度到就绪队列,按先来先服务进程调度进行进程调度,输出调用情况。6、批处理系统中的作业调度模拟程序主要由创建作业队列的程序段、作业调度函数组成和进程调用函数组成。五、实验流程六、实验结果七、实验总结本实验是完成批处理系统作业
11、调度,我采用的是高响应比优先调度算法,总体来说本实验还算成功,基本达到实验目的。实验的基本原理比较简单,但是仍然遇到了一些问题,让我我明白了实际编程和理论知识间的差异,明白了在学习课本的基础上我们还需要很多的时间才能真正学好这门课程。程序如下:#includetypedef struct jcbchar name4;int length;int nprinter;int ntape;double ntime;double wtime;struct jcb *next;*Pointer;int tape=2,printer=4,memory=64;void Creatlist(Pointer &
12、head)Pointer p,q;head=new jcb;head-next=NULL;q=head;for(int i=1;inext=NULL;coutp-name;coutp-length;coutp-nprinter;coutp-ntape;coutp-ntime;coutp-wtime;q-next=p;q=q-next;Pointer Findmax(Pointer &head)double x,temp=-1.0; Pointer p,q;p=head; doif(head-next!=NULL)p=p-next;x=p-wtime/p-ntime;if(xtemp)temp=
13、x;q=p;while(p-next!=NULL);return q;void Deletejcb(Pointer &head,Pointer &q)Pointer p;p=head;while(p-next!=q)p=p-next;p-next=q-next;void suanfa(Pointer &head)Pointer p,q;double temp;for(int i=1;i=3;i+)p=head;q=Findmax(head);coutname运行。wtime;Deletejcb(head,q);while(p-next!=NULL)p=p-next;p-wtime=temp+(
14、p-wtime);void main()Pointer head;Creatlist(head);suanfa(head);一、 实验名称 银行家算法二、 实验目的和要求银行家算法是避免死锁的一种重要方法,要求编写和调试一个简单的银行家算法程序。加深了解有关资源申请、避免死锁等概念,并体会和了解死锁和避免死锁的具体实施方法。三、 实验内容1设计进程对各类资源最大申请表示及初值确定。2设定系统提供资源初始状况。3设定每次某个进程对各类资源的申请表示。4编制程序,依据银行家算法,决定其申请是否得到满足。四、实验原理及说明 1数据结构假设有M个进程N类资源,则有如下数据结构:MAXM*NM个进程对N
15、类资源的最大需求量AVAILABLEN系统可用资源数ALLOCATIONM*NM个进程已经得到N类资源的资源量NEEDM*NM个进程还需要N类资源的资源量2银行家算法设进程I提出请求RequestN,则银行家算法按如下规则进行判断。(1)如果RequestN=NEEDI,N,则转(2);否则,出错。(2)如果RequestN=AVAILABLE,则转(3);否则,出错。(3)系统试探分配资源,修改相关数据:AVAILABLE=AVAILABLE-REQUESTALLOCATION=ALLOCATION+REQUESTNEED=NEED-REQUEST(4)系统执行安全性检查,如安全,则分配成立
16、;否则试探险性分配作废,系统恢复原状,进程等待。3安全性检查(1)设置两个工作向量WORK=AVAILABLE;FINISHM=FALSE(2)从进程集合中找到一个满足下述条件的进程,FINISHi=FALSENEED=WORK如找到,执行(3);否则,执行(4)(3)设进程获得资源,可顺利执行,直至完成,从而释放资源。WORK=WORK+ALLOCATIONFINISH=TRUEGOTO2(4)如所有的进程FinishM=true,则表示安全;否则系统不安全。五、实验流程六、实验结果 七、实验总结本实验是采用银行家算法避免死锁,本次实验基本达到实验目的。银行家算法是避免死锁的一种有效方法,上
17、课的时候老师花费了很多精力让我们能够充分理解银行家算法的内涵,上课时虽然理论理解的还算透彻,但是编程实现还是需要一定的编程经验积累。实验不允许有一点差错,需要认真去对待。程序如下:#include#define M 5 /总进程数#define N 3 /总资源数#define false 0#define true 1int MaxMN=7,5,3,3,2,2,9,0,2,2,2,2,4,3,3;int AvailableN=3,3,2;int AllocationMN=0,1,0,2,0,0,3,0,2,2,1,1,0,0,2;int NeedMN=7,4,3,1,2,2,6,0,0,0,
18、1,1,4,3,1;int Find(int WorkN,bool FinishM)/m为false个数int i=0,k,x=0;for(int n=0;nM;n+)if(Finishi=0) k=0; for(int j=0;j3;j+) if(Needij=Workj) k+; else break; if(k=3) x=1; break; else i+; else i+;if(x=0)return 111;/未找到else return i;char safety()int i,m=5;/false个数int WorkN;bool FinishM=0,0,0,0,0;for(int
19、i1=0;i1N;i1+) Worki1=Availablei1;for(int j=0;jM;j+)i=Find(Work,Finish);if(i!=111)for(int i2=0;i2N;i2+)Worki2=Worki2+Allocationii2;Finishi=1;couti ;m-;elsebreak;if(m=0)return y;elsereturn n;void bank() int i,m,n; char x; int RequestiN; couti; cout请输入请求资源:; for(int j=0;jRequestij; m=0; for(int i1=0;i1
20、N;i1+) if(Requestii1=Needii1) m+; else break; if(m=3) n=0; for(int i2=0;i2N;i2+) if(Requestii2=Availablei2) n+; else break; if(n=3) for(int i3=0;i3N;i3+) Availablei3=Availablei3-Requestii3; Allocationii3=Allocationii3+Requestii3; Needii3=Needii3-Requestii3; x=safety(); if(x=y) cout安全状态,资源已分配; else c
21、out不安全状态,资源不分配; for(int i4=0;i4N;i4+) Availablei3=Availablei4+Requestii4; Allocationii4=Allocationii4-Requestii4; Needii4=Needii4+Requestii4; else cout不分配。; else cout不分配.;void main()bank();一、 实验名称 主存储器空间的分配和回收二、 实验目的 一个好的计算机系统不仅要有一个足够容量的、存取速度高的、稳定可靠的主存储器,而且要能合理地分配和使用这些存储空间。当用户提出申请存储器空间时,存储管理必须根据申请者的
22、要求,按一定的策略分析主存空间的使用情况,找出足够的空闲区域分配给申请者。当作业撤离或主动归还主存资源时,则存储管理要收回作业占用的主存空间或归还部分主存空间。主存的分配和回收的实现虽与主存储器的管理方式有关的,通过本实验帮助学生理解在不同的存储管理方式下应怎样实现主存空间的分配和回收。三、 实验内容 本实验模拟在两种存储管理方式下的主存分配和回收。四、 实验原理及说明 可变分区方式是按作业需要的主存空间大小来分割分区的。当要装入一个作业时,根据作业需要的主存量查看是否有足够的空闲空间,若有,则按需要量分割一个分区分配给该作业;若无,则作业不能装入。随着作业的装入、撤离,主存空间被分成许多个分
23、区,有的分区被作业占用,而有的分区是空闲的。例如:05k10k14k26k32k128k操作系统作业1作业3空闲区作业2空闲区为了说明哪些区是空闲的,可以用来装入新作业,必须要有一张空闲区说明表,格式如下:起 址长 度状 态第一栏14 K12 K未 分 配第二栏32 K96 K未 分 配MM空 表 目空 表 目MM其中,起址指出一个空闲区的主存起始地址。 长度指出从起始地址开始的一个连续空闲的长度。 状态有两种状态,一种是“未分配”状态,指出对应的由起址指出的某个长度的区域是空闲区;另一种是“空表目”状态,表示表中对应的登记项目是空白(无效),可用来登记新的空闲区(例如,作业撤离后,它所占的区
24、域就成了空闲区,应找一个“空表目”栏登记归还区的起址和长度且修改状态)。由于分区的个数不定,所以空闲区说明表中应有适量的状态为“空表目”的登记栏目,否则造成表格“溢出”无法登记。上述的这张说明表的登记情况是按提示1、中的例所装入的三个作业占用的主存区域后填写的。2、 当有一个新作业要求装入主存时,必须查空闲区说明表,从中找出一个足够大的空闲区。有时找到的空闲区可能大于作业需要量,这时应把原来的空闲区变成两部分:一部分分给作业占用;另一部分又成为一个较小的空闲区。为了尽量减少由于分割造成的空闲区,而尽量保存高地址部分有较大的连续空闲区域,以利于大型作业的装入。为此,在空闲区说明表中,把每个空闲区
25、按其地址顺序登记,即每个后继的空闲区其起始地址总是比前者大。为了方便查找还可使表格“紧缩”,总是让“空表目”栏集中在表格的后部。3、采用最先适应算法(顺序分配算法)分配主存空间。按照作业的需要量,查空闲区说明表,顺序查看登记栏,找到第一个能满足要求的空闲区。当空闲区大于需要量时,一部分用来装入作业,另一部分仍为空闲区登记在空闲区说明表中。由于本实验是模拟主存的分配,所以把主存区分配给作业后并不实际启动装入程序装入作业,而用输出“分配情况”来代替。最先适应分配算法如图4-1。4、 当一个作业执行结束撤离时,作业所占的区域应该归还,归还的区域如果与其它空闲区相邻,则应合成一个较大的空闲区,登记在空
26、闲区说明表中。例如,在提示(1)中列举的情况下,如果作业2撤离,归还所占主存区域时,应与上、下相邻的空闲区一起合成一个大的空闲区登记在空闲区说明表中。归还主存时的回收算法如图4-2。5、 请按最先适应算法设计主存分配和回收的程序。然后按(1)中假设主存中已装入三个作业,且形成两个空闲区,确定空闲区说明表的初值。现有一个需要主存量为6K的作业4申请装入主存;然后作业3撤离;再作业2撤离。请你为它们进行主存分配和回收,把空闲区说明表的初值以及每次分配或回收后的变化显示出来或打印出来。五、实验流程 最先适应分配模拟算法主存回收算法六、实验结果 七、实验总结本次试验在可变分区管理方式下采用最先适应算法
27、实现主存分配和实现主存回收,让我理解了在不同的存储管理方式下应怎样实现主存空间的分配和回收。这个实验由于理论知识理解的不是很透彻,编程的时候遇到了很多问题,不得不边学边进行设计,所以在以后的课上学习中要认真理解理论知识,没有理论支持一切也将无从谈起。程序如下:#include #include #include#define getMEM()(MEM*)(malloc(sizeof(MEM)typedef struct Memory/可用分区链表节点int base;/基地址int size;/大小struct Memory *next;MEM;MEM *pm = getMEM();/可用分区
28、的链表头MEM *temp;/int SIZE;/总的内存的大小,由用户输入int geti()/让用户只能输入正整数char ch;int i = 0;fflush(stdin);ch = getchar();while(ch = n)printf(tf输入不能为空.请重新输入n);fflush(stdin);ch = getchar();while(ch != n)if(ch 9 | ch next)if(p-base + p-size = base & base next-base & p-next-base = base + size)return true;p= p -next;if
29、(!p-next & p-base + p-size base + p-size = base & base = base + size)return true;return false;bool release(MEM *pm, int base, int size)/释放内存空间MEM *p = pm;if(!check(pm, base ,size)return false;while(p-next)if(base + size next-base)break;p = p-next;if(base = p-base + p-size)/低地址相邻if(p -next & p-next-b
30、ase = base + size)/释放区上下都相邻p-size += size + p-next-size;temp = p-next;p-next = p-next-next;free(temp);else/仅与地地址相邻p-size += size;else if (p-next & p-next-base = base +size)/仅高地址相邻p-next-base = base;p-next-size += size;else/释放区上下与空闲区都不相邻temp = getMEM();temp-size = size;temp-base = base;temp-next = p-
31、next;p-next = temp;return true;int allocMem(MEM *pm, int size)/分配内存空间MEM *p = pm;int base;while(p-next)if(p-next-size = size)break;p = p-next;if(!p-next)return -1;if(p-next-size = size)/空闲分区大小刚好等于所需分区base = p-next-base;p-next = p-next-next;elsep-next-size -= size;base = p-next-base;p-next-base += size;return base;void print(MEM *pm)/打印空闲分区表和空闲分区链MEM *p = pm-next;puts(n*空闲内存分区链:*n);puts(基地址tttt大小n);while(p)print
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 社区团购餐饮服务方案
- 前海人才引进与培养方案
- 学校室内空气质量提升方案
- 电信运营商网络监控系统维保方案
- 2024-2030年中国莱赛尔纤维行业发展趋势及投资运作模式分析报告
- 金融行业档案管理制度要求
- 2024-2030年中国船用舾装件行业发展预测及投资战略研究报告版
- 2024-2030年中国舞台造雪机行业发展动态与供需前景预测报告
- 2024-2030年中国糖尿病药行业市场发展格局及投资战略建议报告
- 2024-2030年中国管壳式换热器行业前景预测及投资策略分析报告版
- 2024二十届三中全会知识竞赛题库及答案
- 预防接种工作规范(2023年版)解读课件
- 医院检验外包服务项目招标文件
- 档案整理及数字化服务方案
- 正高级会计师答辩面试资料
- 布鲁纳《教育过程》
- 样品承认书标准版
- 田间生产管理记录档案
- 道路桥涵工程施工方案(完整版)
- 智慧城市建设论文5篇
- 人教版八年级地理(上册)期中试卷及答案(完整)
评论
0/150
提交评论