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

加入VIP,免费下载
 

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

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

下载须知

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

版权提示 | 免责声明

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

实验三存储管理实验Word文件下载.docx

1、typedef struct partiTab PARTITAB;typedef struct jcb char name10; struct jcb* link; JCB;typedef struct JCB *front,*rear; jcbQue;jcbQue *jcbReadyQue;void AllocateMemory(int size);void createTab();void checkTab();void recycleMemory(int i);void AllocateMemory(int size) int i; int n=0; for(i=0; isize) pa

2、rTabi.state=Y; n=1; break; if (n=0) printf(内存大小是%dt,size);无法分配内存!n); else装入内存成功!void createTab() parTab0.no=0; parTab0.size=12; parTab0.firstAddr=20; parTab0.state= parTab1.no=1; parTab1.size=32; parTab1.firstAddr=32; parTab1.state= parTab2.no=2; parTab2.size=64; parTab2.firstAddr=64; parTab2.state=

3、 parTab3.no=3; parTab3.size=128; parTab3.firstAddr=128; parTab3.state=void checkTab()分区号t大小t起址t状态n%dt,parTabi.no);,parTabi.size);,parTabi.firstAddr);%ct,parTabi.state);void recycleMemory(int i) parTabi-1.state=int main(int argc, char* argv) int k=1+rand()%100;*固定式分区分配存储管理*n createTab(); checkTab();请

4、按任意键继续: getchar();一次装入多个作业: AllocateMemory(k); k=1+rand()%100;若继续装入作业n若有一个作业完成n k=rand()%4; recycleMemory(2);继续装入作业n return 0;截图显示为:2、设计一个可变式分区分配的存储管理方案。并模拟实现分区的分配和回收过程。对分区的管理法可以是下面三种算法之一:首次适应算法 循环首次适应算法 最佳适应算法 dos.hconio.h#define n 10#define m 10#define minisize 100structfloat address;float length;

5、int flag;used_tablen;free_tablem;void allocate(char J,float xk) int i,k; float ad; k=-1;i=xk&free_tablei.flag=1) if(k=-1|free_tablei.lengthfree_tablek.length) k=i; if(k=-1)无可用空闲区n return; if(free_tablek.length-xk=n)无表目填写已分分区,错误n if(free_tablek.flag=0) free_tablek.flag=1; free_tablek.length=free_tabl

6、ek.length+xk; used_tablei.address=ad; used_tablei.length=xk; used_tablei.flag=J;void reclaim(char J) int i,k,j,s,t; float S,L; s=0; while(used_tables.flag!=J|used_tables.flag=0)&s找不到该作业n used_tables.flag=0; S=used_tables.address; L=used_tables.length; j=-1;k=-1;i=0; while(im&(j=-1|k=-1) if(free_tabl

7、ei.flag=1) if(free_tablei.address+free_tablei.length=S)k=i; if(free_tablei.address=S+L)j=i; if(k!=-1) if(j! free_tablek.length=free_tablej.length+free_tablek.length+L; free_tablej.flag=0; free_tablek.length=free_tablek.length+L; free_tablej.address=S; free_tablej.length=free_tablej.length+L; t=0; wh

8、ile(free_tablet.flag=1&t=m)主存空闲表没有空间,回收空间失败n used_tables.flag=J; free_tablet.address=S; free_tablet.length=L; free_tablet.flag=1;int main( ) int i,a,b=4; float xk; char J; free_table0.address=10240; free_table0.length=10240; free_table0.flag=1; for(i=1; free_tablei.flag=0;n; used_tablei.flag=0; whil

9、e(b=4)请选择功能项:0、退出!1、分配主存!2、回收主存!3、显示主存! n选择功项(03) : scanf(%d,&a); switch(a) case 0: exit(0); case 1:输入作业名 作业所需长度: %*c%c%fJ,&xk); allocate(J,xk); case 2:输入要回收分区的作业名%*c%cJ); reclaim(J); case 3:输出空闲区表:n起始地址 分区长度 标志n%6.0f%9.0f%6dn,free_tablei.address,free_tablei.length, free_tablei.flag); 按任意键,输出已分配区表n

10、getch(); 输出已分配区表: if(used_tablei.flag!=0)%6.0f%9.0f%6cn,used_tablei.address,used_tablei.length, used_tablei.flag); default:printf(没有该选项n截图得:3、编写并调试一个段页式存储管理的地址转换的模拟程序。首先设计好段表、页表,然后给出若干个有一定代表性的地址,通过查找段表页表后得到转换的地址。要求打印转换前的地址,相应的段表,页表条款及转换后的地址,以便检查。iostreamstringusing namespace std;typedef struct Quick

11、 int qs;/快表段号 int qp;/快表页号 int qb; Quick;typedef struct Data int num; string str; Data;typedef struct Page int flag; int block; Page;typedef struct Stack int plen; int psta; Stack;typedef struct Stare int ssta; int slen; Stare;Stack ss10;Stare st;Data work20;Quick qu;Page page55;bool menuflag=0;int

12、bbs;int bs;void menu();void start();void change();void menu() coutmenu1; if(menu1!=1&menu1!=2&=3)请输入正确的选项 menu(); switch(menu1) menuflag=1; start(); if(menuflag=0)请初始化表 change(); /switchvoid start()请输入内存大小(K)bs;请输入内存块的大小(k)bbs; int blocknum; blocknum=bs/bbs;内存一共被分为blocknum块,每块bbsk一共bs请输入进程个数 int pn;

13、pn; int sums=0; for (int pn1=0; pn1 pn1+)请输入第pn1个进程的段数 int ppn;ppn; sums+=ppn; for(int ss1=0; ss1sums; ss1+)请输入段表第ss1ssss1.flagssss1.plenssss1.psta;请初始化第段的页表. for(int sss1=0; sss1ssss1.plen; sss1+) pagess1sss1.num=sss1;请输入该页表第sss1pagess1sss1.flagpagess1sss1.block;初始化段表寄存器的段表始址st.ssta; st.slen=sums;我

14、们对物理地址的每一块用字符串进行简单的初始化 for (int bn=0; bnblocknum; bn+) workbn.num=bn;bnqu.qp; while(ssqu.qb.flag!=1|pagequ.qbqu.qp.flag!=1)该页不在内存请输入一页在内存中的作为快表,请输入要作为快表的段号和页号 qu.qs=pagequ.qbqu.qp.block;void change()请输入要转化的逻辑地址,段号,段内页号,页内偏移地址 int snum,pnum,dnum;snumpnumdnum; if(snum=qu.qb&pnum=qu.qp)快表命中对应块号是qu.qs该块

15、中作业数据是workpagequ.qbqu.qp.block.str物理地址是qu.qs*bbs*1024+dnumst.slen-1)越界中断ssnumssssnum.plen-1)缺页中断pnum=ssssnum.plen-1) if(pagessnumpnum.flag=0)找到该页查询页表后对应块号pagessnumpnum.block该块内存的数据是workpagessnumpnum.block.str转化得到的物理地址是:pagessnumpnum.block*bbs*1024+dnum此时将此项内容添加到快表里面int main()截图可以得到:四实验总结这次的实验对于我来说还是比较难的,几乎每次都是这样,看书的时候能够理解书上的讲解,也大概了解存储管理的过程和原理,但是在编写代码的时候却总是一团迷雾,不知道从哪里下手才好,我从网上找了代码,然后阅读理解了,但是代码里面有很多错误,而且有的过程也是错的,我就改正了一下。就比如说第一题来说,网上代码是将分区说明表是采取循环的方式进行设置,但是我觉得不太好,所以就以四个为例逐个的进行设置,虽然比较麻烦而且代码比较冗余,但是这样可以设置不同大小的固定

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

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