ImageVerifierCode 换一换
格式:DOCX , 页数:75 ,大小:40.50KB ,
资源ID:7260977      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/7260977.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(东北大学秦皇岛分校操作系统实验报告.docx)为本站会员(b****6)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

东北大学秦皇岛分校操作系统实验报告.docx

1、东北大学秦皇岛分校操作系统实验报告计算机操作系统实验报告学 号:姓 名:提交日期:2015-12-20成 绩:东北大学秦皇岛分校计算机与通信工程学院实验1使用动态优先权的进程调度算法的模拟1实验目的 通过动态优先权算法的模拟加深对进程概念和进程调度过程的理解。2实验内容(1)实现对N个进程采用动态优先权优先算法的进程调度。(2)每个用来标识进程的进程控制块PCB用结构来描述,包括以下字段: 进程标识数 ID。 进程优先数 PRIORITY,并规定优先数越大的进程,其优先权越高。 进程已占用的CPU时间CPUTIME。 进程还需占用的CPU时间ALLTIME。当进程运行完毕时,ALLTIME变为

2、0。 进程的阻塞时间STARTBLOCK,表示当进程再运行STARTBLOCK个时间片后,将进入阻塞状态。 进程被阻塞的时间BLOCKTIME,表示已阻塞的进程再等待BLOCKTIME个时间片后,将转换成就绪状态。 进程状态STATE。 队列指针NEXT,用来将PCB排成队列。(3)优先数改变的原则: 进程在就绪队列中停留一个时间片,优先数加1。 进程每运行一个时间片,优先数减3。(4)假设在调度前,系统中有5个进程,它们的初始状态如下: ID 0 1 2 3 4 PRIORITY 9 38 30 29 0 CPUTIME 0 0 0 0 0 ALLTIME 3 3 6 3 4 STARTBL

3、OCK 2 -1 -1 -1 -1 BLOCKTIME 3 0 0 0 0 STATE ready ready ready ready ready(5)为了清楚的观察各进程的调度过程,程序应将每个时间片内的情况显示出来,参照的具体格式如下:RUNNING PROG:iREADY-QUEUE:-id1-id2BLOCK-QUEUE:-id3-id4= = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = =ID 0 1 2 3 4PRIORITY P0 P1 P2 P3 P4CUPTIME C0 C1 C2

4、 C3 C4ALLTIME A0 A1 A2 A3 A4STARTBLOCK T0 T1 T2 T3 T4BLOCKTIME B0 B1 B2 B3 B4STATE S0 S1 S2 S3 S43实验结果(给出编写的程序源代码和运行结果的截图)#include #include using namespace std;int s;/优先权数int m;/被调用的进程号 int jiuxun10=-1,-1,-1,-1,-1,-1,-1,-1,-1,-1;int jiuxunnum=0;int zhuse10=-1,-1,-1,-1,-1,-1,-1,-1,-1,-1;int zhusenum=

5、0;int over10=-1,-1,-1,-1,-1,-1,-1,-1,-1,-1;int overnum=0;/memset(jiuxun,-1,10);int queueOutput();struct pcb int id; int priority; int cputime; int alltime; int starb; int btime; string state;/0:就绪 1:完成 -1:阻塞 ;struct pcb project5= 0,9,0,3,2,3,READY, 1,38,0,3,-1,0,READY, 2,30,0,6,-1,0,READY, 3,29,0,3,

6、-1,0,READY, 4,0,0,4,-1,0,READY;int maxpriority() /寻找最大优先权进程 /s=project0.priority; m=0; for(int k=0;k=zhusenum;k+) if(m=zhusek) m+; int maxp=projectm.priority; int minalltime=projectm.alltime; for(int i=0;i5;i+) /*if(projecti.starbmaxp&projecti.starb!=0) maxp=projecti.priority; m=projecti.id; else if

7、(projecti.priority=maxp) if(projecti.alltimeminalltime&projecti.starb!=0) minalltime=projecti.alltime; m=projecti.id; return m;int running() /执行进程并进行属性值变换 int now=maxpriority(); projectnow.priority-=3; for(int i=0;i0) projecti.btime-; if(projecti.btime=0) projecti.state=READY; jiuxunjiuxunnum=i; jiu

8、xunnum+; for(int k=0;k0) projectnow.starb-; if(projectnow.starb=0) zhusezhusenum=now; zhusenum+; projectnow.state=BLOCK; for(int j=0;jjiuxunnum;j+) if(jiuxunj=now) jiuxunj=-1; if(projectnow.alltime=0) projectnow.state=FINISH; projectnow.priority=0; overovernum=now; overnum+; for(int k=0;kjiuxunnum;k

9、+) if(jiuxunk=now) jiuxunk=-1; int output() running(); coutnow process m is running.nendl; queueOutput(); /*coutREADY-QUEUE: ; for(int i=0;i=jiuxunnum;i+) if(jiuxuni!=-1) coutjiuxuni; coutt; coutBLOCK-QUEUE: ; for(int j=0;j=zhusenum ;j+) if(zhusej!=-1) coutzhusej; coutendlendl;*/ coutIDtt0t1t2t3t4te

10、ndl; coutPRIORITYtproject0.prioritytproject1.prioritytproject2.prioritytproject3.prioritytproject4.prioritytendl; coutCPUTIMEttproject0.cputimetproject1.cputimetproject2.cputimetproject3.cputimetproject4.cputimetendl; coutALLTIMEttproject0.alltimetproject1.alltimetproject2.alltimetproject3.alltimetp

11、roject4.alltimetendl; coutSTARTBLOCKtproject0.starbtproject1.starbtproject2.starbtproject3.starbtproject4.starbtendl; coutBLOCKTIMEtproject0.btimetproject1.btimetproject2.btimetproject3.btimetproject4.btimetendl; coutSTATEttproject0.statetproject1.statetproject2.statetproject3.statetproject4.statete

12、ndl; coutendl; int queueOutput() coutREADY-QUEUE: ; for(int i=0;i=jiuxunnum;i+) if(jiuxuni!=-1) coutPCjiuxuni; coutn; coutBLOCK-QUEUE: ; for(int j=0;j=zhusenum ;j+) if(zhusej!=-1) coutPCzhusej; coutendl; cout*; coutendl;int main() cout * 2133625储蓉蓉 * endl; cout初始化进程:n; coutIDtt0t1t2t3t4tendl; coutPR

13、IORITYtproject0.prioritytproject1.prioritytproject2.prioritytproject3.prioritytproject4.prioritytendl; coutCPUTIMEttproject0.cputimetproject1.cputimetproject2.cputimetproject3.cputimetproject4.cputimetendl; coutALLTIMEttproject0.alltimetproject1.alltimetproject2.alltimetproject3.alltimetproject4.all

14、timetendl; coutSTARTBLOCKtproject0.starbtproject1.starbtproject2.starbtproject3.starbtproject4.starbtendl; coutBLOCKTIMEtproject0.btimetproject1.btimetproject2.btimetproject3.btimetproject4.btimetendl; coutSTATEttproject0.statetproject1.statetproject2.statetproject3.statetproject4.statetendl; couten

15、dl; for(int i=0;i5;i+) if(projecti.state=READY) jiuxunjiuxunnum=i; jiuxunnum+; int j=5,count=0; queueOutput(); getchar(); while(j!=count) output(); for(int i=0;ij;i+) if(projecti.state=FINISH) count+; else count=0; getchar(); 实验心得体会:由于网上给出了动态优先权优先算法,所以参考网上给出的算法,加上自己对于本次实验的理解和题目中的要求,来对其进行实现,实验难点在于对算法

16、原理的理解和对程序的实现,查阅了资料理解了算法,但是由于基础知识的不扎实,自己对于程序的整体写的思路还是没有,最后还是在同学的帮助下完成。 实验2使用动态分区分配方式的模拟1实验目的(1)了解动态分区分配方式中使用的数据结构和分配算法(2)加深对动态分区存储管理方式及其实现过程的理解。2实验内容(1)分别实现采用首次适应算法和最佳适应算法的动态分区分配过程alloc()和回收过程free()。其中,空闲分区通过空闲分区链来管理:在进行内存分配时,系统优先使用空闲区低端的空间。(2)假设初始状态下,可用的内存空间为640KB,并有下列的请求序列:作业1申请130KB。作业2申请60KB。作业3申

17、请100KB。作业2释放60KB。作业4申请200KB。作业3释放100KB。作业1释放130KB。作业5申请140KB。作业6申请60KB。作业7申请50KB。作业6释放60KB。分别采用首次适应算法和最佳适应算法,对内存块进行分配和回收,要求每次分配和回收后显示出空闲分区链的情况。3实验结果(给出编写的程序源代码和运行结果的截图) #include using namespace std;/*定义空闲分区链结构*/struct SubareaNode /分区起始地址 int address; /分区大小 int size; /分区状态(0,1) int state; /作业号 int ta

18、skNo; /分区前向指针 SubareaNode *prior; /分区后向指针 SubareaNode *next;/*定义动态分区分配类*/class DynamicSubareaAlloction private: /内存分区链指针 SubareaNode *head; /内存空间大小 int MEMORYSPACE; public: /* *在构造函数中初始化内存大小 */ DynamicSubareaAlloction() cout 请输入内存可用空间大小(大小范围0k至640k): MEMORYSPACE; if(MEMORYSPACE640) cout 不符合内存可用空间大小范

19、围! endl; while(MEMORYSPACE640); cout -内存空间可用为 MEMORYSPACE k- size = MEMORYSPACE; head-address = 0; head-state = 0; head-taskNo = 0; head-prior = NULL; head-next = NULL; /定义作业号范围变量 int task7=0,0,0,0,0,0,0; /操作选项变量 int selectItem = 0; /作业号变量 int no; /内存大小变量 int space; /是否显示内存情况 bool isShow; if(1 = opt

20、ion) cout 你选择了首次适应算法! endl; else if(2 = option) cout 你选择了最佳适应算法! endl; /选择申请或释放内存操作 while(1) cout = endl; cout /n请选择一项操作: endl; cout /n 1-申请内存 endl; cout /n 2-释放内存 endl; cout /n 0-终止操作 endl; cout = selectItem; if(1!= selectItem & 2!= selectItem & 0!= selectItem) cout 输入选项错误,请重新输入! endl; while(1!= se

21、lectItem & 2!= selectItem & 0!= selectItem); /退出程序 if(0 = selectItem) /释放内存分区链 delete head; head = NULL; break; /检查作业号是否有效 while(1) cout 请输入作业号:(作业号范围17),输入0终止操作! no; /终止操作 if(0 = no) break; if(no 7) cout 超出作业号范围! endl; else if(1 = no = 7) if(1 = taskno-1 & 1 = selectItem) cout 此作业号已申请内存,重新输入! endl;

22、 else if(0 = taskno-1 & 2 = selectItem) cout 此作业号已释放内存,重新输入! endl; else break; /终止操作 if(0 = no) break; isShow = true; /申请内存操作 if(1 = selectItem) /检查申请内存大小是否有效 cout 请输入申请内存大小:(单位:k) space; while(space MEMORYSPACE) cout 申请内存大小超过总共内存空间( MEMORYSPACE k),重新输入! space; if(1 = option) /首次适应算法内存分配 /如果申请失败,不显示内存情况 if(!firstFit_alloc(head,&space,&no,task) isShow = false; else /最佳适应算法内存分配 /如果申请失败,不显示内存情况 if(!bestFit_alloc(head,&space,&no,task) isShow = false; /释放内存操作 if(2 = selectItem) if(1 = option) /首次适应算法内存释放 firstFit_free(head,&no,task); else /最佳适应算法内存释放 bestFit_free(head,&no,task); /输出当前内存使用情况 i

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1