版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、评分: SHANGHAI UNIVERSITY操作系统实验报告学 院 计算机工程与科学专 业 计算机科学与技术学 号 学生姓名 计算机操作系统实验一报告实验一 题目 : 操作系统的进程调度姓名 : 张佳慧 学号 :12122544 实验日期 : 2015.1实验环境 : Microsoft Visual Studio实验目的 :进程是操作系统最重要的概念之一, 进程调度又是操作系统核心的主要内容。 本实习要求学生独立地用高级语言编写和调试一个简单的进程调度程序。调度算法可任意选择或自行设计。例如,简单轮转法和优先数法等。本实习可加深对于进程调度和各种调度算法的理解。实验内容:1、设计一个有n个
2、进程工行的进程调度程序。每个进程由一个进程控制块(PCB)表示。进程控制块通常应包含下述信息:进程名、进程优先数、进程需要运行的时间、占用CPU的时间以及进程的状态等,且可按调度算法的不同而增删。2、调度程序应包含23种不同的调度算法,运行时可任意选一种,以利于各种算法的分析比较。3、系统应能显示或打印各进程状态和参数的变化情况,便于观察诸进程的调度过程。操作过程:1、本程序可选用优先数法或简单轮转法对五个进程进行调度。每个进程处于运行R(run)、就绪W(wait)和完成F(finish)三种状态之一,并假设起始状态都是就绪状态W。为了便于处理,程序进程的运行时间以时间片为单位计算。进程控制
3、块结构如下:进程控制块结构如下: PCB进程标识数链指针优先数/轮转时间片数占用 CPU 时间片数进程所需时间片数进程状态进程控制块链结构如下:其中:RUN当前运行进程指针;HEAD进程就绪链链首指针;TAID进程就绪链链尾指针。2、 算法与框图(1) 优先数法。进程就绪链按优先数大小从高到低排列,链首进程首先投入运行。每过一个时间片,运行进程所需运行的时间片数减 1,说明它已运行了一个时间片,优先数也减 3,理由是该进程如果在一个时间片中完成不了, 优先级应该降低一级。 接着比较现行进程和就绪链链首进程的优先数,如果仍是现行进程高或者相同,就让现行进程继续进行,否则,调度就绪链链首进程投入运
4、行。 原运行进程再按其优先数大小插入就绪链, 且改变它们对应的进程状态,直至所有进程都运行完各自的时间片数。(2) 简单轮转法。进程就绪链按各进程进入的先后次序排列,进程每次占用处理机的轮转时间按其重要程度登入进程控制块中的轮转时间片数记录项 (相当于优先数法的优先数记录项位置) 。每过一个时间片,运行进程占用处理机的时间片数加 1,然后比较占用处理机的时间片数是否与该进程的轮转时间片数相等, 若相等说明已到达轮转时间, 应将现运行进程排到就绪链末尾,调度链首进程占用处理机,且改变它们的进程状态,直至所有进程完成各自的时间片。(3) 程序框图运行结果:Priority算法:Round Robi
5、n算法:实验代码:/操作系统实验-进程调度#include #include #include #include const long n=5;struct pcbtype/进程控制块结构long id, priority, runtime, totaltime;char status;/R, W, F - 运行,就绪,完成PCBn+1;long linkn+1;/链表结构long RUN, HEAD, TAIL;/选择算法long ChooseAlgo()char s128;printf(Please type the Algorithm(PriorityRound Robin):);get
6、s(s);if (s0=P | s0=p)return 1;return 0;/初始化void init()long i;for (i=1; i=n; i+)PCBi.id = i;PCBi.priority = rand()%4+1;PCBi.runtime = 0;PCBi.totaltime = rand()%8+1;PCBi.status = W;/显示进程调度状况void showit()long i;printf(=n);printf(%-25s,ID);for (i=1; i=n; i+) printf(%4ld, PCBi.id);printf(n%-25s,PRIORITY/
7、TURNTIME);for (i=1; i=n; i+) printf(%4ld, PCBi.priority);printf(n%-25s, CPUTIME);for (i=1; i=n; i+) printf(%4ld, PCBi.runtime);printf(n%-25s, ALLTIME);for (i=1; i=n; i+) printf(%4ld, PCBi.totaltime);printf(n%-25s,STATUS);for (i=1; i=n; i+) printf(%4c, PCBi.status);printf(n=n);if (RUN != -1) printf(R
8、UNNING PROCESS: %ldn, RUN);else printf(RUNNING PROCESS: NULLn);printf(WAITING QUEUE: );for (i=HEAD; i!=-1; i=linki) printf(%ld , i);printf(nn);/优先数调度算法void main_priority()long i, j, k; long sortn+1;init();/设置就绪链for (i=1; i=n; i+)sorti = i;for (i=1; ii; j-)if (PCBsortj.priority PCBsortj-1.priority)k=
9、sortj; sortj=sortj-1; sortj-1=k;HEAD=sort1;for (i=1; in; i+)linksorti = sorti+1;TAIL = sortn;linkTAIL = -1;RUN = -1;/就绪链设置完毕RUN = HEAD;PCBRUN.status = R;HEAD = linkHEAD;/运行链首进程while (RUN != -1)showit();PCBRUN.totaltime-;PCBRUN.priority -= 3; /优先级减3PCBRUN.runtime+;if (PCBRUN.totaltime = 0)/进程运行完成PCBR
10、UN.status=F;RUN = HEAD;if (HEAD != -1)HEAD = linkHEAD;PCBRUN.status=R;elseif (HEAD != -1 & PCBRUN.priority PCBRUN.priority)k=linkk;if (k = TAIL)linkk = RUN;/插入链尾之后TAIL = RUN;linkRUN = -1;RUN = HEAD;HEAD = linkHEAD;PCBRUN.status = R;elselinkRUN = linkk;/插入链中linkk = RUN;RUN = HEAD;/链首进程开始运行HEAD = link
11、HEAD;PCBRUN.status = R;showit();/轮转调度算法void main_round_robin()long i;init();/设置就绪链HEAD = 1;for (i=1; in; i+)linki = i+1;TAIL = n; linkTAIL = -1;RUN = -1;/就绪链设置完毕RUN = HEAD;PCBRUN.status = R;HEAD = linkHEAD;/运行首进程while (RUN != -1)showit();PCBRUN.totaltime-;PCBRUN.runtime+;if (PCBRUN.totaltime = 0)/进程
12、运行完成PCBRUN.status = F;RUN = HEAD;if (HEAD != -1)HEAD = linkHEAD;PCBRUN.status = R;elseif (HEAD != -1 & PCBRUN.runtime % PCBRUN.priority=0)/轮转时间到 PCBRUN.status=W;/插入链尾linkTAIL=RUN;linkRUN=-1;TAIL=RUN;RUN=HEAD;/链首进程开始运行HEAD=linkHEAD;PCBRUN.status=R;showit();/主函数int main()long algo;srand(time(NULL);alg
13、o = ChooseAlgo();if (algo = 1)main_priority();/优先数法elsemain_round_robin();/简单轮转法printf(SYSTEM FINISHEDn);return 0;实验体会: 通过写代码的过程更加清晰地了解了两种算法的思想和用处,对算法的了解加深的同事也锻炼了写代码的能力。计算机操作系统实验三报告实验三 题目 : 请求页式存储管理姓名 : 张佳慧 学号 :12122544 实验日期 : 2015.1实验环境 : Microsoft Visual Studio实验目的 :近年来,由于大规模集成电路(LSI)和超大规模集成电路(VLS
14、I)技术的发展,使存储器的容量不断扩大,价格大幅度下降。但从使用角度看,存储器的容量和成本总受到一定的限制。所以,提高存储器的效率始终是操作系统研究的重要课题之一。虚拟存储技术是用来扩大内存容量的一种重要方法。学生应独立地用高级语言编写几个常用的存储分配算法,并设计一个存储管理的模拟程序,对各种算法进行分析比较,评测其性能优劣,从而加深对这些算法的了解。实验内容 :为了比较真实地模拟存储管理,可预先生成一个大致符合实际情况的指令地址流。然后模拟这样一种指令序列的执行来计算和分析各种算法的访问命中率。 本实验采用页式分配存储管理方案, 并通过分析计算不同页面淘汰算法情况下的访问命中率来比较各种算
15、法的优劣。 另外也考虑到改变页面大小和实际存储器容量对计算结果的影响, 从而可为算则好的算法、合适的页面尺寸和实存容量提供依据。 实验是按下述原则生成指令序列的:(1) 50%的指令是顺序执行的。(2) 25%的指令均匀散布在前地址部分。(3) 25%的指令均匀散布在后地址部分。示例中选用最佳淘汰算法(OPT)和最近最少使用页面淘汰算法(LRU)计算页面命中率。公式为假定虚存容量为 32K,页面尺寸从 1K 至 8K,实存容量从 4 页至 32 页。(1)最佳淘汰算法(OPT)这是一种理想的算法,可用来作为衡量其他算法优劣的根据,在实际系统中是难以实现的,因为它必须先知道指令的全部地址流。 由
16、于本示例中已预生成了全部的指令地址流, 故可计算出最佳命中率。该算法的准则是淘汰已满页表中不再访问或是最迟访问的的页。 这就要求将页表中的页逐个与后继指令访问的所有页比较,如后继指令不在访问该页,则把此页淘汰,不然得找出后继指令中最迟访问的页面淘汰。可见最佳淘汰算法要花费比较长的运算时间。(2)最近最少使用页淘汰算法(LRU)这是一种经常使用的方法,有各种不同的实施方案,这里采用的是不断调整页表链的方法,即总是淘汰页表链链首的页,而把新访问的页插入链尾。如果当前调用页已在页表内,则把它再次调整到链尾。这样就能保证最近使用的页,总是处于靠近链尾部分,而不常使用的页就移到链首,逐个被淘汰,在页表较
17、大时,调整页表链的代价也是不小的。操作过程 :编写程序:#include #include #include #include #include #include #include #include #include using namespace std;int adress32;/全局变量数组,地址流int p;/全局变量p是一共有多少地址流void init()/初始化函数, int t;srand(time(0);/随机产生指令序列 p=12+rand()%32; cout地址流个数 P=pendl;cout随机产生的地址流序列n;for(int i=0,j=0;ip;i+,j+)t=
18、1+rand()%9;adressi=t;/将随机产生的指令数存入页面流 printf(a%d=%d ,i,t); j=j%5; if(i10) printf( ); if(j=4) printf(n);coutendl;void OPT(int n) /FIFO算法,n是M的值int e,q=p,m=n-1;int flag;int flag1;int queye=0;int leaflink32; memset(leaflink,0,sizeof(leaflink);for(int x=0;xq;x+)e=x;flag=0;for(int i=0;in;i+)if(leaflinki=ad
19、ressx)flag=1;flag1=i;printf(有相同n);break;if(flag=0) int k=0; for(int j=0;j=m) queye+; if(flag=1) int temp10=0; for(int i=0;i=m;i+) for(int a=e+1;aq;a+) if(leaflinki=adressa) tempi+; int index=0; for(int i=0;itempi) min=tempi; index=i; int l=leaflinkindex; leaflinkindex=leaflink0; leaflink0=l; for(int
20、 j=0;jn;j+) printf(leaflink%d=%d ,j,leaflinkj); coutendl; coutM=n时FIFO的命中率为:(1-(double)queye/p)*100% endl;void LRU(int n)/LRU算法int i;int m=n-1;int q=p;int e;int queye=0;int flag;int flag1;int y;int leaflink32;memset(leaflink,0,sizeof(leaflink);for(int x=0;xq;x+)flag=0;e=x;for(i=0;in;i+)if(leaflinki=
21、adressx)flag=1;flag1=i;printf(X=%d,lru%d = adress%d=%d ,flag= 1n,x,i,x,adressx);break;if(flag=0) int k=0;for(int j=0;jm;j+)/0 1 2leaflinkk=leaflinkk+1; k+;leaflinkm=adresse;queye+;else if(flag=1) y=flag1;for(int j=0;jm;j+)leaflinkflag1=leaflinkflag1+1;flag1+; leaflink3=adresse;printf(发现相同后,改变leaflin
22、k%d=%dn,m,leaflink3); for(int j=0;jn;j+) printf(leaflink%d=%d ,j,leaflinkj); coutendl;cout发生替换次数:queyeendl;coutM=n时LRU的命中率为:(1-(double)queye/p)*100%c;if(c=O)for(int i=3;i4;i+)OPT(i);else if(c=L) for(int i=4;i5;i+) LRU(i); coutendl; return 0;运行结果:最近最少使用:最佳淘汰:实验体会 : 通过这次实验,我了解了采用页式分配存储管理方案,并对页式分配存储管理的
23、两个算法最佳淘汰算法和最近最少使用页淘汰算法有了更深入的了解,为之后的学习奠定了基础。计算机操作系统实验四报告实验四 题目 : 文件操作与管理姓名 : 张佳慧 学号 :12122544 实验日期 : 2015.1实验环境 : Microsoft Visual Studio实验目的 :随着社会信息量的极大增长, 要求计算机处理的信息与日俱增, 涉及到社会生活的各个方面。因此,文件管理是操作系统的一个极为重要的组成部分。学生应独立地用高级语言编写和调试一个简单的文件系统, 模拟文件管理的工作过程。 从而对各种文件操作命令的实质内容和执行过程有比较深入的了解,掌握它们的实施方法,加深理解课堂上讲授过
24、的知识。实验内容:1.要求:(1)实际一个 n 个用户的文件系统,每个用户最多可保存 m 个文件。(2)限制用户在一次运行中只能打开 l 个文件。(3)系统应能检查打入命令的正确性,出错要能显示出错原因。(4)对文件必须设置保护措施,如只能执行,允许读、允许写等。在每次打开文件时根据本次打开的要求,再次设置保护级别,即可有二级保护。(5)对文件的操作至少应有下述几条命令:creat 建立文件。delete 删除文件。open 打开文件。close 关闭文件。read 读文件。write 写文件。2.示例:(1)程序采用二级文件目录,即设置了主文件目录(MFD)和用户文件目录(UFD) 。前者应
25、包含文件主(即用户)及他们的目录区指针;后者应给出每个文件主占有的文件目录,即文件名,保护码,文件长度以及他们存放的位置等。另外为打开文件设置了运行文件目录(AFD) ,在文件打开时应填入打开文件号,本次打开保护码和读写指针等。3.算法与框图(1)因系统小,文件目录的检索使用了简单的线性搜索,而没有采用 Hash 等有效算法。(2)文件保护简单实用了三位保护码,对应于允许读、允许写和运行执行,如下所示: 1 1 1允许写 允许读 允许执行如对应位为 0,则不允许。实验源码:#include #include #include #include #include #include #includ
26、e using namespace std;struct UFD int fname; int len; int procode3;ufd10;struct MFD int user; UFD p5;mfd10;int main() int x,n=10,flag1=1,flag2=1,flag3=1; if(flag1) for(int i=0;i10;i+) ufdi.fname=i; int t=100+rand()%900; ufdi.len=t; for(int j=0;j3;j+) codej=rand()%2; srand(unsigned)time(NULL);
27、 bool f10; for(int i=0;i10;i+) mfdi.user=i; memset(f,0,sizeof f); for(int j=0;j5;j+) int t; do t=rand()%10; while(ft); ft=1; mfdi.pj=ufdt; while(n-&flag2) coutinput user:x; if(x=10) couttry againendl; break; for(int j=0;j5;j+) coutmfdx.pj.fname mfdx.pj.len
28、code2endl; coutinput the command:endl; coutcreat 1; delete 2; open 3; bye 4; close 5; read 6; write 7s; switch(s) case 1: if(flag3) cout输入你要创建的文件的名字:mfdx.p0.fname; cout输入你要创建的文件的长度:mfdx.p0.len; cout输入你要创建的文件的权限:endl; for(int i=0;codei; for(int j=0;j5;j+) coutmfdx.pj.fname mfdx.pj.len mfd
29、code2endl; coutinput the command:endl; else cout输入你要创建的文件的名字:mfdx.pindex.fname; cout输入你要创建的文件的长度:mfdx.pindex.len; cout输入你要创建的文件的权限:endl; for(int i=0;codei; for(int j=0;j5;j+) coutmfdx.pj.fname mfdx.pj.len code1mfdx.pj
30、.procode2endl; coutinput the command:endl; break; case 2: flag3=0; cout输入要删除的文件:t; for(int i=0;i5;i+) if(mfdx.pi.fname=t) index=i; mfdx.pi.fname=0; mfdx.pi.len=000; memset(code,0,sizeof(code); for(int j=0;j5;j+) coutmfdx.pj.fnamemfdx.pj.len code2endl; coutinput the command:endl; break; case 3: cout输入要打开的文件:file; for(int i=0;i5;i+) if(mfdx.pi.fname=f
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 《护理专业就业指导》课件
- 《浅析中国对外贸易》课件
- 《伽玛星产品介绍》课件
- 西瓜行业销售工作总结
- 团队文化建设的必要性计划
- 交通工具制造技术研究
- 黄页广告前台工作总结
- 门诊输液室护理工作总结
- 《单片机技术交通》课件
- 2021年安徽省芜湖市公开招聘警务辅助人员辅警笔试自考题1卷含答案
- 四川新农村建设农房设计方案图集川西部分
- 《陆上风电场工程设计概算编制规定及费用标准》(NB-T 31011-2019)
- 我和我的祖国拼音版
- 2023年生态环境综合行政执法考试参考题库(400题)
- 北师大七年级上数学易错题(共8页)
- 供应商供方履约评价表(参考模板)
- 徒步行军pt课件
- 国家电网公司电网设备缺陷管理规定国网(运检3)(文号国家电网企管
- 输血科(血库)仪器设备使用、保养记录表
- 《目标管理》PPT课件
- 膨胀玻化微珠无机保温砂浆检测报告
评论
0/150
提交评论