分页存储管理实验报告
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
操作系统实验三报告
一.实验名称:分页存储管理
二.实验目的:了解分页存储管理在内存空间分配的作用
三.实验内容:
分页存储管理是将一个进程的逻辑地址空间分成若干个大小相等的片,称为页面或页,并为各页加以编号,相应的,也把内存空间分成与页面相同大小的若干个存储块,称为物理块或页框,同样加以编号,在为进程分配内存时,以块为单位将进程的若干个也分别装入到多个可以不相邻的物理块中。系统为每个进程建立了一张页面映像表,简称页表。位示图是利用二进制的一位来表示磁盘中的一个盘块的使用情况,这里用位示图来表示内存分配情况。
四.实验代码
#
#include <>
#include <>
#include <>
typedef int datatype;
typedef struct node
{
datatype pageNum,blockNum;
struct node *next;
}linknode;
typedef linknode *linklist;
linklist creatlinklist(int n)
{
linklist head,r,s;
int x,y,i=0;
head=r=(linklist)malloc(sizeof(linknode));
printf("开始创建页表\n");
printf("请分别输入页表的页号及块号(-1表示空):\n");
printf("\n页号块号\n");
while (i { scanf("%d %d",&x,&y); s=(linklist)malloc(sizeof(linknode)); s->pageNum=x; s->blockNum=y; r->next=s; r=s; i++; } r->next=NULL; return head; } void print(linklist head) { linklist p; p=head->next; printf("\n该页表为:"); printf("\n页号块号\n"); while(p) { printf("%d%7d\n",p->pageNum,p->blockNum ); p=p->next; } printf("\n"); } /*初始化位示图,将值全置为零,0表示空闲状态*/ void init(int g[100][100],int N) { int i,j; for(i=0;i<100;i++) { for(j=0;j<100;j++) { g[i][j]=0; } } g[N+1][0]=N*N; } /*对作业的每一个页进行分配对应位示图里的块*/ linklist Dis(linklist head,int g[100][100],int n,int N) { linklist p; int i,j; p=head->next; if(n<=g[N+1][0]) { while(p) { for(i=0;i { for(j=0;j { if(g[i][j]==0) { p->blockNum=N*i+j; g[i][j]=1; g[N+1][0]--; break; } } break; } p=p->next; } return head; } } /*回收已经完成的页*/ linklist Recy(linklist head,int g[100][100],int n,int N) { int i,j; linklist p; p=head->next; while(p&&p->pageNum!=n) { p=p->next; } if(p) { i=p->blockNum/N; j=p->blockNum%N; g[i][j]=0; g[N+1][0]++; p->blockNum=-1; } return head; } /*打印位示图*/ void printStr(int g[100][100],int N) { int i,j; printf("此时位示图为:\n "); for(i=0;i { printf(" "); printf("%d",i); } printf("\n"); for(i=0;i { printf("%d",i); for(j=0;j { printf(" "); printf("%d",g[i][j]); } printf("\n"); } } void main() { int n,N,x,y; int graph[100][100]; linklist head; printf("输入位示图的字长:"); scanf("%d",&N); printf("输入作业的页数:"); scanf("%d",&n); head=creatlinklist(n); print(head);