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

加入VIP,免费下载
 

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

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

下载须知

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

版权提示 | 免责声明

本文(实习一处理器调度.docx)为本站会员(b****6)主动上传,冰点文库仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰点文库(发送邮件至service@bingdoc.com或直接QQ联系客服),我们立即给予删除!

实习一处理器调度.docx

1、实习一处理器调度实习一 处理器调度一.实习内容选择一个调度算法,实现处理器调度。二.实习目的本实习模拟在单处理器环境下的处理器调度,加深了解处理器调度的工作。三.实习题目设计一个按优先数调度算法实现处理器调度的程序。四.设计思想1.设计思路(1)假定系统有5个进程,每个进程用一个PCB来代表。 (2) 开始运行之前,为每个进程确定它的“优先数”和“要求运行时间”。通过键盘输入这些参数。(3) 按进程优先数排列进程,优先数最大的进程插入队首,否者比较进程优先数,插入适当位置。(4) 处理器总是选择队首进程运行。采用动态改变优先数的办法,进程每运行1次,优先数减1,要求运行时间减1。(5) 进程运

2、行一次后,若要求运行时间不等于0,则将它加入就绪队列,否则,将状态改为“结束”,退出就绪队列。(6) 若就绪队列为空,结束,否则转到(4)重复。2.主要数据结构struct pcb /* 定义进程控制块PCB */ char name10; /*进程名*/ char state; /*状态*/ int super; /*优先数*/ int ntime; /*要求运行时间*/ int rtime; /*周转时间*/ struct pcb* link; /*下一个进程pcb首地址*/3.主要代码结构及代码段分析void input() /* 建立进程控制块函数*/ int i,num; syste

3、m(cls); /*清屏*/ for(i=1;iname); printf(n please input project priority:); scanf(%d,&p-super); printf(n please input project running time:); scanf(%d,&p-ntime); printf(n); p-rtime=0;p-state=W; p-link=NULL; sort(); /* 调用sort函数*/ void sort() /* 建立对进程进行优先级排列函数*/ PCB *first, *second; int insert=0; if(read

4、y=NULL)|(p-super)(ready-super) /*优先级最大者,插入队首*/ p-link=ready; ready=p; else /* 进程比较优先级,插入适当的位置中*/ first=ready; second=first-link; while(second!=NULL) if(p-super)(second-super) /*若插入进程比当前进程优先数大插入到当前进程前面*/ p-link=second; first-link=p; second=NULL; insert=1; else /* 插入进程优先数最低,则插入到队尾*/ first=first-link;

5、second=second-link; if(insert=0) first-link=p; int space()/*求队列长度*/ int l=0; PCB* pr=ready; while(pr!=NULL) l+; pr=pr-link; return(l); void disp(PCB * pr) /*建立进程显示函数,用于显示当前进程*/ printf(n pronamet statett priorityt needtimet remaintimen); printf(| %stt,pr-name); printf(| %ctt,pr-state); printf(| %dtt,

6、pr-super); printf(| %dtt,pr-ntime); printf(| %dtt,pr-rtime); printf(n); void check() /* 建立进程查看函数 */ PCB* pr; printf(n * the running project is:n); /*显示当前运行进程*/ disp(p); pr=ready; printf(n * the ready project state is:n); /*显示就绪队列状态*/ while(pr!=NULL) disp(pr); pr=pr-link; void destroy() /*建立进程撤消函数(进程

7、运行结束,撤消进程)*/ printf(n project%s has finished.n,p-name); free(p); void running() /* 建立进程就绪函数(进程运行时间到,置就绪状态*/ (p-rtime)+; if(p-rtime=p-ntime) p-state=E; printf(n * the finished project is:n); disp(p); destroy(); /* 调用destroy函数*/ else (p-super)-; p-state=W; sort(); /*调用sort函数*/ void main() /*主函数*/ int

8、len,h=0; char ch; input(); len=space(); while(len!=0)&(ready!=NULL) ch=getchar(); h+; printf(-); printf(n now is %d rounds. n,h); p=ready; ready=p-link; p-link=NULL; p-state=R; check(); running(); printf(n press any key to continue.n); printf(nn all projects have finished.n); getch();/*从键盘获得字符*/ 五.上

9、机实习所用平台及相关软件本程序在windows xp平台下,TC2.0编译器编译通过。六.调试过程调试数据:进程名 优先数 要求运行时间 P1 2 3 P2 3 4 P3 4 2 P4 3 1 P5 1 2测试结果:七.总结(1)处理机调度使用了队列存储结构,使执行更加方便。(2)进程按优先数进行链表排序。(3)通过本实验,我进一步加深了对处理机调度过程的理解,同时也得到了将系统理论实践的机会,熟练了编程能力。实习二 主存空间的分配和回收一.实习内容主存储器空间的分配和回收。二.实习目的通过本实习帮助理解在不同的存储管理方式下应怎样进行存储空间的分配和回收。三.实习题目可变分区管理方式下采用首

10、次适应算法实现主存分配和回收。四.设计思想1.设计思路(1)可变分区方式是按作业需要的主存空间大小来分割分区的。当要装入一个作业时,根据作业需要的主存容量查看是否有足够的空闲空间,若有,则按需分配,否则,作业无法装入。假定内存大小为128K。(2)采用首次适应算法分配回收内存空间。运行时,输入一系列分配请求和回收请求。 分区回收有四种情况:1.待回收区(以下称为自由块)与自由主存队列中有上邻空闲区,回收时直接将其大小加到其上邻空闲区的大小上即可.2.自由块有下邻空闲区,此时需要将前驱的next指针改为指向自由块首址,而将自由块的next指针指向其下邻空闲区中的下一节点,同时合并大小.3.自由块

11、既有上邻区也有下邻区,此时需要将其上邻区的next指针指向自由块下邻区的next指向的地址,同时合并三个可用分区的大小.4.自由块不存在空闲邻区,是独立的一块.此时将其插入到自由主存队列中即可.由于在合并分区的时候已经是以按地址来放置队列的,故无须再对队列中元素进行排序了.2.主要数据结构struct table char job; /*作业标号*/ float address; /*分区起始地址*/ float length; /*分区长度,单位为字节*/ int flag; /*分区表的状态位*/ struct table *FRlink; /*前向指针*/ struct table *R

12、Elink; /*后向指针*/ *free_table=NULL,*place; /*已分配分区表,空闲分区表*/3.主要代码结构及代码段分析/*空间分区链表初始化*/FRtable *init(FRtable *tb) tb-FRlink=NULL; tb-job=nl; tb-address=1064; tb-length=1192; tb-flag=0; tb-RElink=NULL; return tb;/*主存分配函数,为作业job分配大小为xk的分区空间*/void allocate(char job,float xk)/*采用FF,算法分配xk大小的空间,寻找到合适的空闲分区,开

13、始分配。若寻找到的合适的空闲分区大于作业申请的空间minisize大小,则分割该分区,产生一个将要分配的合适大小分区和一个新的空间分区,重新记在空间分区链表中*/ FRtable *tb,*link;if (free_table-FRlink=NULL&free_table-RElink=NULL) /*给首个作业分配空间,改写分区链表*/ free_table-job=job; free_table-length=xk; free_table-flag=1; if(xkmaxisize)/*未寻找到合适的空间分区,返回*/ printf(space apply fail! n); retur

14、n; else /*当申请的空间小于内存空间时,才划分空间*/ tb=getspace(FRtable); free_table-RElink=tb; tb-FRlink=free_table; tb-job=nl; tb-address=1064+xk; tb-length=maxisize-xk; tb-flag=0; free_table-FRlink=NULL; if (xkRElink=NULL;/*当申请的空间小于内存空间时,tb才被定义*/ /*主存回收函数,回收作业job所占用的分区空间*/void reclaim(char job) int bool1=0,bool2=0;

15、FRtable *tb,*link; tb=free_table; link=NULL; do if (job=tb-job&1=tb-flag) break;/*寻找分配分区表中对应的登记项在分配分区表中,未找到作业job登记占用的分区空间,退出回收*/ tb=tb-RElink; if (tb=link) printf(nsorry,the job is not exist%c! n,job); return; while(tb!=link); bool1=(NULL=tb-FRlink|tb-FRlink=tb-RElink)? 1:tb-FRlink-flag; bool2=(NULL

16、=tb-RElink|tb-FRlink=tb-RElink)? 1:tb-RElink-flag; if (bool1&bool2) /* 无上下相邻空闲空间,回收的分区信息直接填写入空闲分区表 */ tb-job=nl; tb-flag=0; else if (NULL=tb-FRlink|1=tb-FRlink-flag)&0=tb-RElink-flag) /* 回收分区与下相邻空闲空间相邻,与下相邻空闲空间合并; 回收区首地址作为新空闲去的首地址,大小为两者之和 */ link=tb-RElink; tb-job=nl; tb-length+=link-length; tb-flag

17、=0; tb-RElink=link-RElink; if (NULL!=link-RElink) link-RElink-FRlink=tb; free(link); else if (0=tb-FRlink-flag&1=tb-RElink-flag) /* 回收分区与上相邻空闲空间相邻,与上相邻空闲空间合并; 上相邻空闲空间首地址作为新空闲去的首地址,大小为两者之和 */ link=tb-FRlink; link-length+=tb-length; link-RElink=tb-RElink; tb-RElink-FRlink=link; if (free_table=tb) free

18、_table=link; free(tb); else if (0=tb-FRlink-flag&0=tb-RElink-flag) /* 回收分区与上下相邻空闲空间相邻,与上下相邻空闲空间合并;上相邻空闲空间首地址作为新空闲去的首地址,大小为三者之和 */ link=tb-FRlink; link-length=link-length+tb-length+tb-RElink-length; link-RElink=tb-RElink-RElink; if (NULL!=tb-RElink-RElink) tb-RElink-RElink-FRlink=link; if (free_table

19、=tb) free_table=link; free(tb); free(tb-RElink); /*显示空间分区链表*/void display(FRtable *tb) FRtable *temp; temp=NULL; printf(nt numbertspaceaddresstspacesize(KB)tstaten); printf(nt syst 1024.00t 40.00tt 1n); do printf(nt %ct %.2ft %.2ftt %dn,tb-job,tb-address,tb-length,tb-flag); tb=tb-RElink; while(temp!

20、=tb);/*主函数*/int main() FRtable *ta=getspace(FRtable); free_table=init(ta); menu();int menu() int i,a; float xk; char job; printf(n menu:nt0 - Exitnt1 - Allocationnt2 - Reclaim n); printf(please chose your operate(0-2):); scanf(%d,&a); switch(a) /*a=0,程序结束*/ case 0:exit(0); /*a=1,分配主存空间*/ case 1: clr

21、scr(); printf(pleae input job number and needed allocation:); scanf(%*c%c%f,&job,&xk); allocate(job,xk); display(free_table); getch(); menu(); /*a=2,回收主存空间*/ case 2: clrscr(); printf(please input the job number you want to reclaim:); scanf(%*c%c,&job); reclaim(job); display(free_table); menu(); defa

22、ult:printf(ERROR:No thie choose! n); menu(); 五.上机实习所用平台及相关软件本程序在windows xp平台下,TC2.0编译器编译通过。六.调试过程调试数据:作业号 所需空间121 10000调试结果:七.总结(1)在程序中充分考虑到出错处理。比如在功能选择菜单中,在用户申请磁盘空间时,若要求的空间大小大于空闲空间大小,则提示“space apply fail!”;在回收主存空间时,若用户输入的文件名不存在,则提示“sorry,the job is not exist!”。这样提高了程序的健壮性。(2)在回收主存空间时,分情况讨论空闲块的合并。先考

23、虑和后面的空闲块或许会有合并的情况,再考虑是否可以和前面的块进行合并,如果没有和前面或者后面的空闲块进行合并,则新建一个表目。这样程序结构清晰,逻辑性强。(3)通过本实验,我进一步加深了对主存空间的分配回收过程的理解,同时也得到了将系统理论实践的机会,熟练了编程能力。实习三 磁盘存储空间的分配和回收一.实习内容模拟磁盘空闲空间的表示方法,以及模拟实现磁盘空间的分配和回收。二.实习目的磁盘初始化时把磁盘存储空间分成许多块(扇区),这些空间可以被多个用户共享。用户作业在执行期间常常要在磁盘上建立文件或把已经建立在磁盘上的文件删去,这就涉及到磁盘存储空间的分配和回收。一个文件存放到磁盘上,可以组织成

24、顺序文件(连续文件)、链接文件(串联文件)、索引文件等,因此,磁盘存储空间的分配有两种方式,一种是分配连续的存储空间,另一种是可以分配不连续的存储空间。怎样有效地管理磁盘存储空间是操作系统应解决的一个重要问题,通过本实习使学生掌握磁盘存储空间的分配和回收算法。三.实习题目用位示图管理磁盘存储空间四.设计思想1.设计思路(1) 为了提高磁盘存储空间的利用率,可在磁盘上组织成链接文件、索引文件,这类文件可以把逻辑记录存放在不连续的存储空间。为了表示哪些磁盘空间已被占用,哪些磁盘空间是空闲的,可用位示图来指出。位示图由若干字节构成,每一位与磁盘上的一块对应,“1”状态表示相应块已占用,“0”状态表示

25、该块为空闲。位示图的形式与实习二中的位示图一样,但要注意,对于主存储空间和磁盘存储空间应该用不同的位示图来管理,绝不可混用。(2) 申请一块磁盘空间时,由分配程序查位示图,找出一个为“0”的位,计算出这一位对应块的磁盘物理地址,且把该位置成占用状态“1”。假设现在有一个盘组共8个柱面,每个柱面有2个磁道(盘面),每个磁道分成4个物理记录。那么,当在位示图中找到某一字节的某一位为“0”时,这个空闲块对应的磁盘物理地址为:柱面号=字节号磁道号= 位数 / 4物理记录号= 位数 % 4(3) 归还一块磁盘空间时,由回收程序根据归还的磁盘物理地址计算出归还块在位示图中的对应位,把该位置成“0”。按照(

26、2)中假设的盘组,归还块在位示图中的位置计算如下:字节号=柱面号位数=磁道号 4+物理记录号2.主要数据结构struct File int zhumian;/*柱面号*/ int cidao; /*磁道号*/ int jilu; /*记录号*/*file;3.主要代码结构及代码段分析void main()int a88=1,1,1,0,1,1,1,0,1,0,1,0,1,0,1,0,1,1,1,0,0,1,1,0,1,0,1,0,1,0,1,0,1,0,0,0,1,0,1,0,0,0,1,0,0,0,0,0,1,1,1,0,0,1,1,0,1,1,0,0,0,1,1,0;/*位示图*/ int

27、 i,j; char ch; int m=1; int e,b,c; printf(display the bit-map:); /*打印位示图*/ printf(nt-t); for(i=0;i8;i+) printf(nt%dt%dt%dt%dt%dt%dt%dt%dt,ai0,ai1,ai2,ai3,ai4,ai5,ai6,ai7); while(m!=0) printf(ntmenu:nt1.apply a spacent2.reclaim a spacent3.exittn); printf(please input your choice:); scanf(%d,&m); switch(m) /*申请一个空间*/ case 1:clrscr(); for(i=0;i8;i+) for(j=0;jzhumian=i; file-cidao=j/4; file-jilu=j%4; aij=1; break; break; printf(ntzhumiantcidaotjilutn); prin

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2