4-基本分页管理

上传人:小** 文档编号:89120328 上传时间:2019-05-18 格式:DOC 页数:7 大小:70KB
返回 下载 相关 举报
4-基本分页管理_第1页
第1页 / 共7页
4-基本分页管理_第2页
第2页 / 共7页
4-基本分页管理_第3页
第3页 / 共7页
4-基本分页管理_第4页
第4页 / 共7页
4-基本分页管理_第5页
第5页 / 共7页
点击查看更多>>
资源描述

《4-基本分页管理》由会员分享,可在线阅读,更多相关《4-基本分页管理(7页珍藏版)》请在金锄头文库上搜索。

1、操作系统实验报告一、实验题目基本分页存储管理二、实验目的弄明白基本分页管理算法的工作原理。了解分页存储管理在内存空间分配的作用。三、实验要求页表的设置以及初始化;页块的分配与回收;四、实验内容分页存储管理是将一个进程的逻辑地址空间分成若干个大小相等的片,称为页面或页,并为各页加以编号,相应的,也把内存空间分成与页面相同大小的若干个存储块,称为物理块,同样加以编号,在为进程分配内存时,以块为单位将进程的若干个也分别装入到多个可以不相邻的物理块中。系统为每个进程建立了一张页面映像表,简称页表。位示图是利用二进制的一位来表示磁盘中的一个盘块的使用情况,这里用位示图来表示内存分配情况。1. 页表页表由

2、页号与块号组成。页表的大小由进程或作业的长度决定。例如,对于一个每页长1k,大小为20k的进程来说,如果一个内存单元存放一个页表项,则只要分配给该页表20个存储单元即可。页式管理是每个进程至少拥有一个页表。实验中对页表的定义如下typedef struct node datatype pageNum,blockNum;(页号和块号)struct node *next;linknode;2 存储页面表(本实验中采用位示图法) 位示图也是整个系统一张,它指出内存各页面是否已被分配出去,以及未分配页面的总数。在内存中划分一块固定区域,每个单元的每个比特代表一个页面,如果该页面已被分配,则对应比特位置

3、为1,否则为0。3.作业回收键盘输入所要回收的作业名(如有重名,则都撤销),搜索作业申请表,每遇到作业名相同的,则将作业大小及状态改为0(表示撤销),搜索页表,当作业名相同时,根据页表修改位示图中相应单元为未分配(0).五、实验结果:六、实验小结本次试验是关于基本分页管理的,主要是能够实现物理块的分配与回收,在架构修改实验代码的过程中确实遇到了不少的问题,比如,分配不到指定的物理块,或者是有的分配到了而有的没有分配到,这个原因已经找到,是因为在求位示图的行和列时,行号和列号老是出错,如,blockNum%N求列号时,是否该-1操作,在那-1操作等。总之在系统设计时能够想到应该用怎样方法来模拟实

4、现页面分配以及相关函数所用的算法思想,但在实际研究修改代码的时候却遇到不少困难,不能把自己的设计通过代码实现出来,费了很多周折,暴露了自己在学习中眼高手低,实践能力差的问题。这让我认识到课本上的基本知识在实际应用中的重要作用,以后在学习过程中一定要克服自己的浮躁心理,把最最基本的知识彻底掌握,这样才能不断的提高和进步,最基本的总是最有用的。附录:#include #include typedef int datatype;typedef struct node datatype pageNum,blockNum; struct node *next;linknode;typedef linkn

5、ode *linklist;/*尾插法创建带头结点的单链表*/linklist creatlinklist(int n) linklist head,r,s;int x,y,i=0; head=r=(linklist)malloc(sizeof(linknode);printf(*创建页表*n); printf(n请分别输入页表的页号及块号(-1表示空):n);printf(n页号 | 块号n); while (ipageNum=x;s-blockNum=y; r-next=s; r=s;i+; r-next=NULL; return head;/*输出带头结点的单链表*/void print

6、(linklist head) linklist p; p=head-next; printf(n该页表为:n);printf(n);printf(n页号 | 块号n); while(p) printf(%d%7dn,p-pageNum,p-blockNum); p=p-next; printf(n);/*初始化位示图,将值全置为零,0表示空闲状态*/void init(int g100100,int N)int i,j;for(i=0;i100;i+)for(j=0;jnext;if(n=gN+10) /首先判断作业的页数是否小于等于位示图剩余空闲块的个数while(p)for(i=0;iN

7、;i+)for(j=0;jblockNum/N;j=p-blockNum%N;/将对应块号记录到页表gij=1; /将块置1,表示已被占用gN+10-; /剩余空闲块减1break; /跳出循环,进行下一个页的分配break; /跳出循环 p=p-next; /下一个页进行分配 return head;/*回收已经完成的页*/linklist Recy(linklist head,int g100100,int n,int N)int i,j;linklist p;p=head-next;while(p&p-pageNum!=n) /找出要回收的页号p=p-next;if(p) /找到i=p-

8、blockNum/N;j=p-blockNum%N;gij=0; /将该块置0,表空闲状态gN+10+;p-blockNum=-1; /页表中对应的块号为空,置成-1return head;/*打印位示图*/void printStr(int g100100,int N)int i,j;printf(n此时位示图为:n);printf(n );for(i=0;iN;i+)printf( );printf(%d,i);printf(n);for(i=0;iN;i+)printf(%d,i);for(j=0;jN;j+)printf( );printf(%d,gij);printf(n);prin

9、tf(n);void main()int n,N;int x,y;int graph100100;linklist head;printf(n请输入位示图的字长:);scanf(%d,&N);printf(n请输入作业的页数:);scanf(%d,&n);head=creatlinklist(n);print(head);init(graph,N); printStr(graph,N);printf(现在进行作业分配:n);head=Dis(head,graph,n,N);print(head); printStr(graph,N);printf(您是否想回收已完成的页,“是”请按1,“否”请按0:);scanf(%d,&x);if(x) /判断是否要回收printf(n请输入您要回收的页号:);scanf(%d,&y);head=Recy(head,graph,y,N);print(head); printStr(graph,N);

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 商业/管理/HR > 管理学资料

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号