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

加入VIP,免费下载
 

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

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

下载须知

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

版权提示 | 免责声明

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

操作系统课设内存管理.docx

1、操作系统课设内存管理操作系统课程设计说明书班级:_学号:_姓名:_指导教师:_电子与信息工程学院计算机科学系1 设计题目1.2 内存管理设计并实现一个可完整演示操作系统中请求分页系统的内存分配、地址变换、页面置换等过程的演示系统。1.2.1 实验目的通过本设计: 理解内存分页机制 掌握页面置换算法 理解虚拟存储器的实现过程1.2.2 准备知识 程序设计语言(C/C+/Java) 数据结构(结构体、链表、队列等) 基本分页存储管理方式 虚拟存储器概念 请求分页存储管理方式 页面置换算法1.2.3 设计内容 设计和实现基本分页存储管理的数据结构(包括物理块、页、进程空间、页表等的模拟) 实现基于固

2、定分配局部置换策略的分页式存储分配 实现最佳、先进先出、LRU置换算法(栈式和寄存器方式任选其一) 用上面实现的算法以至少三组以上的页面请求序列,从缺页率角度比较页面置换算法的性能 设计必要的UI,接收用户输入的运行参数(页和物理课大小、逻辑和物理地址空间大小、进程驻留集大小、置换算法选择、页面请求序列等),输出运行过程及结果(每个页面请求前后页表情况、快表情况、内存使用情况、被置换页面的选择过程及结果等)。可采用命令行、桌面版或者Web版形式。2 设计思路 经过两天时间仔细研地究题目,我将本次设计划分为两部分,一部分为基本分页存储管理系统的模拟,另一部分为基于固定分配局部置换的页面算法实现。

3、基本分页存储管理系统的模拟,我主要侧重于分页系统的地址变换机构的实现,即输入一个逻辑地址,将其所指向的逻辑空间中数据存入对应的物理地址所指向的空间,逻辑和物理空间大小采用输入逻辑和物理空间的地址大小控制。此外,本程序还用位示图显示内存存储状况,用以显示存入数据的结果。页表方面采用手工输入方式。块表更新采用类似最近最久未使用算法思想。页面置换算法方面参考了计算机操作系统的算法思想。其中属最佳置换算法最难实现,耗费时间最长。先进先出置换算法采用队列结构,最近最久未使用置换算法采用栈结构。最后的UI设计,采用的是VC+6.0自带的程序运行命令行形式。3 功能模块图3.1 opks1.c(基本分页管理

4、系统) 3.2 opks2.c(页面置换算法模拟)4 主要程序流程图opks1.c main()create(): showyb(): showkb():shownc();work():Opks2.c main():creat(): in(); print():OPT(); FIFO(): LRU( ): 5 程序说明5.1 开发及运行环境本程序的开发及运行环境为Microsoft Visual C+ 6.0。5.2 代码结构5.2.1 opks1.c(基本页面存储管理系统) 顶层目录:opks1.c:基本分页存储管理系统 二层目录:int main( ):主函数 三层目录:void Crea

5、tA(); 内存初始化 void showyb(); 显示页表 void showkb(); 显示快表 void shownc(); 显示内存块使用情况5.2.1 opks2.c(页面置换算法模拟) 顶层目录:opks2.c:页面置换算法模拟 二层目录:int main( ):主函数 三层目录: void creat( ); 初始化 void OPT( ); 最佳置换算法 void FIFO( ); 先进先出置换算法 void LRU( ); 最近最久未使用置换算法 void in( ); 数据输入函数 void print( ); 数据输出函数6 主要代码6.1 opks1.c(基本分页管理

6、系统)#include #include #include /#define NULL0int max;/逻辑和物理地址空间大小 int * A;/内存物理块,0:未使用,非0:已使用int count; /记录内存未使用物理块数int kysize;/块页大小int *yb;/页表 struct kb int yh;/页号 int kh;/块号 struct kb *front; struct kb *next;int main() /struct LNode *L = NULL; int i = 0; struct kb a,b,c,d,e,*head; void CreatA(); /内

7、存初始化 void showyb();/显示页表 void showkb();/显示快表 void shownc();/显示内存块使用情况,不分进程 struct kb *work(struct kb *L); CreatA(); a.kh=0;a.yh=0; b.kh=0;b.yh=0; c.kh=0;c.yh=0; d.kh=0;d.yh=0; e.kh=0;e.yh=0; head=&a;a.next=&b;b.next=&c;c.next=&d;d.next=&e;e.next=NULL; a.front=NULL;b.front=&a;c.front=&b;d.front=&c;e.

8、front=&d; printf(n* 基本分页算法 *n); do printf(n*菜单*n); printf( 1 装入n); printf( 2 查看页表n); printf( 3 查看快表n); printf( 4 查看内存n); printf( 5 退出程序n); printf( *n); printf(请输入你的选择(select):); scanf(%d,&i); switch(i) case 1: head=work(head); break; case 2: showyb(); break; case 3: showkb(head); break; case 4: show

9、nc(); break; case 5: printf(谢谢使用nn); exit(0); break; while(i != 0); return 0; /内存初始化void CreatA() int i; printf(请输入逻辑和物理地址空间大小:n); scanf(%d,&max); printf(请输入物理块大小:n); scanf(%d,&kysize); A=(int *)malloc(max-1)*sizeof(int); count=max-1; yb=(int *)malloc(max/kysize)*sizeof(int); printf(请手动输入页表n); for(i

10、=0;i(max/kysize);i+) scanf(%d,&ybi); for(i = 0;iyh!=k1&p-next!=NULL) p=p-next; if(p-yh!=k1) p-front-next=NULL;p-front=NULL;p-next=L;L-front=p;p-yh=k1;p-kh=ybk1; else if(p-yh=k1&p-next=NULL) p-front-next=NULL;p-front=NULL;p-next=L;L-front=p; else if(p-yh=k1&p-front!=NULL) p-front-next=p-next;p-next-f

11、ront=p-front;p-front=NULL;p-next=L;L-front=p; else if(p-front=NULL&p-yh=k1) k3=p-kh*kysize+k2; Ak3=name; return L; k3=p-kh*kysize+k2; Ak3=name; return p;/显示页表void showyb() int i;printf(n*n); printf(| 页表 |n); printf(*n); for(i=0;iyh,p-kh); p=p-next; /显示内存块使用情况,不分进程 void shownc() int i = 0; printf(n*n

12、); printf(| 内存物理块分配情况 |n); printf(*n); for(i = 0; i max; i+) printf(%dt,Ai); if(i%10 = 9) printf(n); 6.2 opks2.c(页面置换算法模拟)#include#includeint znum;/驻留集大小int qnum;/请求序列大小int *zl;/驻留集int *qq;/请求序列int main() int i; void creat();/初始化 void OPT(); void FIFO(); void LRU(); void in(); void print(); creat();

13、 do printf(n*菜单*n); printf( 1 请输入页面请求序列n); printf( 2 请选择最佳(Optimal)置换算法n); printf( 3 请选择先进先出置换(FIFO)置换算法n); printf( 4 请选择最近最久未使用(LRU)置换算法n); printf( 5 退出程序n); printf( *n); printf(请输入你的选择(select):); scanf(%d,&i); switch(i) case 1: in(); break; case 2: OPT(); break; case 3: FIFO(); break; case 4: LRU(

14、); break; case 5: printf(谢谢使用nn); return 0; break; while(i != 0); return 0;/初始化void creat() int i; printf(请输入驻留集大小:n); scanf(%d,&znum); zl=(int *)malloc(znum*sizeof(int); for(i=0;iznum;i+) zli=0;/输入数据void in() int i; printf(请输入页面请求序列大小:n); scanf(%d,&qnum); qq=(int *)malloc(qnum*sizeof(int); printf(请

15、输入页面请求序列:n); for(i=0;iqnum;i+) scanf(%d,&qqi);void print() int i; for(i=0;iznum;i+) printf(%d ,zli); printf(n); void OPT() int cout=0;/记录缺页数 /float v;/缺页率 int i,j,q,max,t,y,z; int bz; int *jl=(int *)malloc(znum*sizeof(int); y=i=0;z=znum; while(iz) for(bz=0,j=0;ji;j+) if(zlj=qqi) bz=1;y-;z+;break; if

16、(bz=0) zly=qqi;cout+;/若缺页 printf(%d: ,qqi); print(); y+; i+; /将前znum个不同的页装入驻留集 for(;iqnum;i+) for(bz=0,j=0;jznum;j+) if(zlj=qqi) bz=1;break; if(bz=0)/若缺页 for(q=i,j=0;jznum;j+)/记录现驻留集中各页将来的最近访问时间 for(;qqnum;q+) jlj=q; if(zlj=qqq) break; for(max=0,q=0;qznum;q+)/找出最大的将来最近访问时间 if(maxjlq) max=jlq; for(q=

17、0;qznum;q+)/找出该最大时间对应的页在数组中的位置 if(jlq=max) t=q;break; zlt=qqi;/将该页换出 cout+; printf(%d: ,qqi); print(); printf(缺页率:%d分之%d,qnum,cout); for(j=0;jznum;j+) zlj=0; void FIFO() int cout=0;/记录缺页数 int i,j,t,y,z; int bz; /int *jl=(int *)malloc(znum*sizeof(int); y=i=0;z=znum; while(iz) for(bz=0,j=0;ji;j+) if(z

18、lj=qqi) bz=1;y-;z+;break; if(bz=0) zly=qqi;cout+;/若缺页 printf(%d: ,qqi); print(); y+; i+; /将前znum个不同的页装入驻留集 for(;iqnum;i+) for(bz=0,j=0;jznum;j+) if(zlj=qqi) bz=1;break; if(bz=0)/若缺页 for(j=1;jznum;j+) t=j-1;zlt=zlj; j=j-1; zlj=qqi; cout+; printf(%d: ,qqi); print(); printf(缺页率:%d分之%d,qnum,cout); for(j=0;jznum;j+) zlj=0;/采用栈操作void LRU() int cout=0;/记录缺页数 int i,j,q,t; int bz; for(i=0;iqnum;i+) bz=0; for(j=0;j0;j-)t=j-1;zlj=zlt;zlj=qqi;cout+;/若缺页 if(bz=1&j!=0)q=zlj;for(;j0;j-)t=j-1;zlj=zlt;zlj=q;/不缺页,且不为栈顶 printf(%d: ,qqi); print(); printf(缺页率:%d分之%d,qnum,cout); for(j=0;jznum;j+) zlj=0;

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

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