欢迎来到冰点文库! | 帮助中心 分享价值,成长自我!
冰点文库
全部分类
  • 临时分类>
  • IT计算机>
  • 经管营销>
  • 医药卫生>
  • 自然科学>
  • 农林牧渔>
  • 人文社科>
  • 工程科技>
  • PPT模板>
  • 求职职场>
  • 解决方案>
  • 总结汇报>
  • ImageVerifierCode 换一换
    首页 冰点文库 > 资源分类 > DOC文档下载
    分享到微信 分享到微博 分享到QQ空间

    操作系统存储管理实验报告Word文档格式.doc

    • 资源ID:1451057       资源大小:336KB        全文页数:15页
    • 资源格式: DOC        下载积分:10金币
    快捷下载 游客一键下载
    账号登录下载
    微信登录下载
    三方登录下载: 微信开放平台登录 QQ登录
    二维码
    微信扫一扫登录
    下载资源需要10金币
    邮箱/手机:
    温馨提示:
    快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。
    如填写123,账号就是123,密码也是123。
    支付方式: 支付宝    微信支付   
    验证码:   换一换

    加入VIP,免费下载
     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

    操作系统存储管理实验报告Word文档格式.doc

    1、typedef struct jcb /*定义作业控制块JCB ,部分信息省略*/char name10; /作业名/作业大小struct jcb* link; /链指针JCB;typedef structJCB *front,*rear;jcbQue;jcbQue *jcbReadyQue;void AllocateMemory(int size);void createTab();void checkTab();void recycleMemory(int i);void AllocateMemory(int size)int i;for(i=0;isize)parTabi.state=Y

    2、;elseprintf(没有空闲分区,无法分配内存!n);void createTab()int i;for( i=1;=NUM;/getPartiTab(PARTITAB);parTabi-1.no=i;parTabi-1.size=20;parTabi-1.firstAddr=21;parTabi-1.state=void checkTab() int i; printf(分区号t大小t起址t状态n%dt,parTabi.no);,parTabi.size);,parTabi.firstAddr);%ct,parTabi.state);void recycleMemory(int i)in

    3、t main(int argc, char* argv)nntt*ttntttt实验一 存储管理实验ntttt固定式分区分配存储管理ntt*ttncreateTab();checkTab();请按任意键继续:getchar();每个分区装入一道作业:i+)AllocateMemory(i+1)*3);假如一段时间后,其中一个作业结束,回收给它分配的分区(假如该作业在第2分区)nrecycleMemory(2);接着,从外存后备作业队列中选择一个作业装入该分区(假如该作业大小为10)nAllocateMemory(10);return 0;dos.hconio.h#define n 10 #de

    4、fine m 10 #define minisize 100 structfloat address;float length; 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) 无可用空闲区nreturn;if(free_tablek.length-xk=n) 无表目填写已分分区,错误nif(free_ta

    5、blek.flag=0)free_tablek.flag=1;else free_tablek.length=free_tablek.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) 找不到该作业nused_tables.flag=0;S=used_tables.address;L=used_tabl

    6、es.length;j=-1;while(im&(j=-1|k=-1)if(free_tablei.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!=-1) /* 上邻空闲区,下邻空闲区,三项合并*/free_tablek.length=free_tablej.length+free_tablek.length+L;free_tablej.flag=0;/*上邻空闲区,下邻非空闲区,与上邻合并*/free_tablek.length=free_

    7、tablek.length+L;else if(j!=-1) /*上邻非空闲区,下邻为空闲区,与下邻合并*/free_tablej.address=S;free_tablej.length=free_tablej.length+L;else /*上下邻均为非空闲区,回收区域直接填入*/*在空闲区表中寻找空栏目*/t=0;while(free_tablet.flag=1&t=m) /*空闲区表满,回收空间失败,将已分配表复原*/主存空闲表没有空间,回收空间失败nused_tables.flag=J;free_tablet.address=S;free_tablet.length=L;free_t

    8、ablet.flag=1;/*主存回收函数结束*/int main( )tttt实验三 存储管理实验nnttt可变式分区分配 (最佳适应算法)ntt*nint i,a;float xk;char J;/*空闲分区表初始化:*/free_table0.address=10240; /*起始地址假定为10240*/free_table0.length=10240; /*长度假定为10240,即10k*/free_table0.flag=1; /*初始空闲区为一个整体空闲区*/for(i=1;free_tablei.flag=0; /*其余空闲分区表项未被使用*/*已分配表初始化:n;used_ta

    9、blei.flag=0; /*初始时均未分配*/while(1)功能选择项:n1。显示主存n2。分配主存n3。回收主存n4。退出n请选择相应功能1-4 :scanf(%d,&a);switch(a)case 4:exit(0); /*a=4程序结束*/case 2: /*a=2分配主存空间*/输入作业名J和作业所需空间xk: %*c%c%fJ,&xk);allocate(J,xk); /*分配主存空间*/break;case 3: /*a=3回收主存空间*/输入要回收分区的作业名%*c%cJ);reclaim(J); /*回收主存空间*/case 1: /*a=1显示主存情况*/*输出空闲区表

    10、和已分配表的内容*/输出空闲区表:n起始地址 分区长度 标志n%6.0f%9.0f%6dn,free_tablei.address,free_tablei.length, free_tablei.flag); 按任意键,输出已分配区表ngetch(); 输出已分配区表:if(used_tablei.flag!=0)%6.0f%9.0f%6cn,used_tablei.address,used_tablei.length, used_tablei.flag);default:没有该选项n/*case*/*while*/return 1;iostreamstringusing namespace

    11、std;typedef struct Quick 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

    12、Stare int ssta;/段表始址 int slen;/段表长度 Stare;Stack ss10;/全局变量Stare st;/全局变量Data work20;/全局变量Quick qu;/全局变量Page page55;bool menuflag=0;int bbs;/内存块大小int bs;/内存大小void menu();void start();void change();int main() menu(); return 0;void menu() coutnntt*ttendl; couttttt实验三 存储管理实验nttt段页式存储管理的地址转换的模拟程序tt* cout

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

    14、有进程的总段数和段表,并为每段创建页表 int sums=0; for (int pn1=0; pn1 pn1+)请输入第pn1ppn; 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.s

    15、sta; st.slen=sums; /初始化内存中物理地址每一块的数据区简单起见,我们对物理地址的每一块用字符串进行简单的初始化,没有具体到每一物理地址 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()请输入要转化的逻辑地址,段号s,段内页号p,页内偏移地址d(B) int snum,pnum,dnum;snumpnumdnum; /首先查快表 if(snum=qu.qb&pnum=qu.qp)快表命中对应块号是qu.qs该块中作业数据是workpagequ.qbqu.qp.block.str物理地址是qu.qs*bbs*1024+dnum /访问段表寄存器 else快表没有命中,访问段表寄存器,段号等于段表始址加上偏移地址


    注意事项

    本文(操作系统存储管理实验报告Word文档格式.doc)为本站会员主动上传,冰点文库仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰点文库(点击联系客服),我们立即给予删除!

    温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




    关于我们 - 网站声明 - 网站地图 - 资源地图 - 友情链接 - 网站客服 - 联系我们

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

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


    收起
    展开