教学文库网 - 权威文档分享云平台
您的当前位置:首页 > 文库大全 > 实用文档 >

实验四 页式虚拟存储管理中地址转换和页式中断 FIFO LRU OPT C(2)

来源:网络收集 时间:2026-07-24
导读: head=(head+1)%m; if(page[j].write==1) cout将页 j 写回磁盘第 page[j].dnumber 块!\n; page[j].flag=0; page[lnumber].pnumber=page[j].pnumber; page[lnumber].flag=1; page[lnumber].write=0; cout淘汰主存块

head=(head+1)%m;

if(page[j].write==1)

cout<<"将页 "<<j<<" 写回磁盘第 "<<page[j].dnumber<<" 块!\n"; page[j].flag=0;

page[lnumber].pnumber=page[j].pnumber;

page[lnumber].flag=1;

page[lnumber].write=0;

cout<<"淘汰主存块 "<<page[j].pnumber<<" 中的页 "<<j<<" ,从磁盘第 " <<page[lnumber].dnumber<<" 块中调入页 "<<lnumber<<endl;

}

/*地址转换函数,将逻辑地址转换成物理地址,如果要查找的页不在主存当中则产生缺页中断*/

void command(unsigned laddress,int write)

{

unsigned paddress,ad,pnumber;

int lnumber;

kk:

lnumber=laddress>>10; //取逻辑地址高6位,页号

ad=laddress&0x3ff; //页内地址

cout<<"该逻辑地址的页号为:"<<lnumber<<" 页内地址为:"<<ad<<endl; if(lnumber>=page_length)

{ //页号大于页表的长度,则无效页号

cout<<"该页不存在!\n";

return;

}

if(page[lnumber].flag==1){ //页号为lnumber 在内存当中

pnumber=page[lnumber].pnumber;

paddress=pnumber<<10|ad;

cout<<"逻辑地址是:"<<laddress<<" 对应物理地址是:

"<<paddress<<endl;

页式虚拟存储管理

if(write==1) //该页被修改过

page[lnumber].write=1;

}

else

{ //页号为lnumber不在内存当中,则产生缺页中断

page_interrupt(lnumber);

goto kk;

}

}//command

页式存储管理OPT ,LRU实验报告

一、实验目的:

掌握分页式存储管理的基本概念和实现方法。要求编写一个模拟的分页式管理程序,并能对分页式存储的页面置换算法进行编写和计算各个算法的缺页率。

二、程序设计:

首先创建页面链指针数据结构,并设计页面映像表,采用数组的方法给定页面映像。

申请缓冲区,将一个进程的逻辑地址空间划分成若干个大小相等的部分,每一部分称做页面或页。每页都有一个编号,叫做页号,页号从0开始依次编排,如0,1,2 。设置等大小的内存块。初始状态:将数据文件的第一个页面装入到该缓冲区的第0块。

设计页面置换算法,这里分别采用最佳页面置换算法OPT和最近最久未使用置换算法LRU,并分别计算它们的缺页率,以比较它们的优劣。

三、算法说明:

执行程序时,当主存没有可用页面时,为了选择淘汰主存中的哪一页面,腾出1个空闲块以便存放新调入的页面。淘汰哪个页面的首要问题是选择何种置换算法。该程序采用人工的方法选择,依置换策略选择一个可置换的页,并计算它们的缺页率以便比较。

/*分页式管理实验-源程序*/

#include<stdlib.h>

#include<conio.h>

#include<stdio.h>

#include<string.h>

#define N 16

#define num 5 /*进程分配物理块数目*/

int A[N]={1,2,3,4,5,6,7,8,5,2,3,2,7,8,1,4}; /*页表映像*/

typedef struct page

{

int address; /*页面地址*/

struct page *next;

}page;

struct page *head,*run,*rear;

void jccreat() /*进程分配物理块*/

{

页式虚拟存储管理

int i=1;

page *p,*q;

head=(page *)malloc(sizeof(page));

p=head;

for(i=1;i<=num;i++)

{

q=(page *)malloc(sizeof(page));

p->next=q;

q->address=0;

q->next=NULL;

p=q;

}

rear=p;

}

int search(int n)

{

page *p;

int i=0;

p=head;

while(p->next)

{

if(p->next->address==n)

{

printf("Get it at the page %d\n",i+1);

run=p;

return 1;

}

p=p->next;

i++;

}

return 0;

}

void changeOPT(int n,int position)

{

int i;

int total=0;

int flag=1;

int distance[num];

int MAX;

int order=0;

page *p,*q;

p=head->next;

q=head->next;

for(i=0;i<num;i++)

页式虚拟存储管理

distance[i]=100; i=0; while(p) { if(p->address==0) { flag=0;break; } p=p->next; i++; } if(!flag) { p->address=n; printf("Change the page %d\n",i+1); } else { while(q) { for(i=position;i<N;i++) { if(q->address==A[i]) distance[total]=i-position;} total++; q=q->next; } MAX=distance[0]; for(i=0;i<num;i++) { if(distance[i]>MAX) { MAX=distance[i]; order=i; } } printf("Change the page %d\n",order+1); i=0; while(p) { if(i==order) p->address=n; i++; p=p->next;

页式虚拟存储管理

}

}

}

void changeLRU(int n)

{

int i=0;

int flag=1;

page *p,*delect;

p=head->next;

while(p)

{

if(p->address==0)

{

flag=0;

p->address=n;

printf("Change the page %d\n",i+1);

break;

}

p=p->next;

i++;

}

if(flag)

{

delect=head->next;

head->next=delect->next;

printf("Delect from the head, and add new to the end.\n"); delect->address=n;

rear->next=delect;

rear=delect;

rear->next=NULL;

}

}

float OPT()

{

int i;

int lose=0;

float losef;

float percent;

for(i=0;i<N;i++)

{

if(search(A[i])==0)

{

lose++;

changeOPT(A[i],i);

页式虚拟存储管理

}

}

losef=lose;

percent=1-(losef/N);

return percent;

}

float LRU()

{

int i;

int lose=0;

float losef;

float percent;

page *p;

for(i=0;i<N;i++)

{

if(search(A[i])==0)

{

lose++;

changeLRU(A[i]);

}

else

{

p=run->next;

run->next=p->next;

rear->next=p;

rear=p;

rear->next=NULL;

printf("Move it to end of queue.\n");

}

}

losef=lose;

percent=1-(losef/N);

return percent;

}

void main() /*主 …… 此处隐藏:1977字,全部文档内容请下载后查看。喜欢就下载吧 ……

实验四 页式虚拟存储管理中地址转换和页式中断 FIFO LRU OPT C(2).doc 将本文的Word文档下载到电脑,方便复制、编辑、收藏和打印
本文链接:https://www.jiaowen.net/wenku/133911.html(转载请注明文章来源)
Copyright © 2020-2025 教文网 版权所有
声明 :本网站尊重并保护知识产权,根据《信息网络传播权保护条例》,如果我们转载的作品侵犯了您的权利,请在一个月内通知我们,我们会及时删除。
客服QQ:78024566 邮箱:78024566@qq.com
苏ICP备19068818号-2
Top
× 游客快捷下载通道(下载后可以自由复制和排版)
VIP包月下载
特价:29 元/月 原价:99元
低至 0.3 元/份 每月下载150
全站内容免费自由复制
VIP包月下载
特价:29 元/月 原价:99元
低至 0.3 元/份 每月下载150
全站内容免费自由复制
注:下载文档有可能出现无法下载或内容有问题,请联系客服协助您处理。
× 常见问题(客服时间:周一到周五 9:30-18:00)