文档详情

分页内存管理

夏**
实名认证
店铺
DOCX
27.18KB
约16页
文档ID:511245951
分页内存管理_第1页
1/16

分页存储管理设计报告1、设计目的与要求1.1 设计目的了解分页存储管理在内存空间分配的作用模拟在分页存储管理方式下 实现主存空间的分配与回收,显示与访问1.2 设计要求初始化内存大小为 100000 字节,每个页框占1000 个字节,则一共有10 个页框(假设默认页框号为 0-99号)功能键:0 退出1 为作业分配内存 输入:作业号、作业所占字节数、 执行逻辑:根据作业所需字节数计算作业所需页面数若内存容量不够,则应提示无法为作业分配内存 若内存容量够用,则选择空闲页面装载作业,在作业页表进行登记2 回收作业内存输入:作业名 执行逻辑:查找页表,找到输入作业名所占用的页框,并回收3 显示内存分配情况已分配内存空间情况(作业名,起始地址, 占用页框号)① 根据进程展示内存分配情况 显示每一个进程所占用的页框号(按照进程顺序)② 根据内存真实情况 显示内存每一个页框号被哪个进程占用,(按照页框顺序)4 访问输入 作业名 逻辑访问地址(字节偏移)执行逻辑:根据给定的作业名和逻辑访问地址计算物理地址(几号页框),若 越界访问,则给出错误提示否则给出逻辑访问地址对应的物理访问地址2. 功能设计及系统平台2.1 算法分析首先,请求表给出进程或作业要求的页面数。

然后,由存储页面表检查是否有足够的空闲页面,如果没有,则本次无法分配如果有则首先分配设置页表,并请求表中的相应表项后,按一定的查找算法搜索出所要求的空闲页面,并将对应的页好填入页表中2.2数据结构struet//进程号//进程名//进程所占的字节数//进程占有的页框数//存放进程占用的页框//进程是否占用内存int pid; char hname; int length;int numblock;int frame[N]; int flag;} pages[N];2.3模块说明2.3.1分配内存模块void assignmembery(){int pid, num;printf("please input pid and num:"); scanf("%d%d", &pid, &num);int n,m=0,i=0,j=0;n=num/1001+l; //所需的页框数pages[pid].length=num;if(n>restblock){ printf("The membery is not enough,sorry!\n"); return;}//当所需页框数多于剩余的页框数时,显示内存不足else{restblock=restblock—n;pnum++;pages[pid].flag=1;//为进程分配页框for (i=0;i

回收了一个进程,对页表重新设置{pnum=pnum-1;pages[pid].length=0;for(k=0;kpages[pid].length) printf("cross the boder;/n");//当偏移地址大于进程长度时显示越界else{printf("occupy frame:");n=adress/1000;n1=adress%1000;nframe=pages[pid].frame[n];printf("occupy frame:%d ",nframe);printf("first adress:%d offset:%d",nframe*1000,n1);printf("\n");2.3.5 初始化页表,页框模块int block[N]; //内存块状态标志数组,数组显示占用页框的进程号//初始化内存块状态标志数组为-1void initblock(){for(int i=0;i5. using namespace std;6. #include 7.8.#define N 1009.int process[N][N]; int block[N];10.int restblock=100;11.int pnum=0;12. struct13. {14. int pid;15. char hname;16. int length;17. int numblock;18. int frame[N];19. int flag;20.21.} pages[N];22.23. void initblock()24. {25. for(int i=0;i

下载提示
相似文档
正为您匹配相似的精品文档