实验三 虚拟存储器管理
实验三 存储管理实验--starof

实验三存储管理实验一. 目的要求:1、通过编写和调试存储管理的模拟程序以加深对存储管理方案的理解。
熟悉虚存管理的各种页面淘汰算法。
2、通过编写和调试地址转换过程的模拟程序以加强对地址转换过程的了解。
二 . 实验题:1、设计一个固定式分区分配的存储管理方案,并模拟实现分区的分配和回收过程。
可以假定每个作业都是批处理作业,并且不允许动态申请内存。
为实现分的分配和回收,可以设定一个分区说明表,按照表中的有关信息进行分配,并根据分区的分配和回收情况修改该表。
1.1、算法描述本算法将内存的用户区分成大小相等的四个的分区,设一张分区说明表用来记录分区的大小、起始地址和分区的状态,当系统为某个作业分配主存空间时,根据所需要的内存容量,在分区表中找到一个足够大的空闲分区分配给它,然后将此作业装入内存。
如果找不到足够大的空闲分区,则这个作业暂时无法分配内存空间,系统将调度另一个作业。
当一个作业运行结束时,系统将回收改作业所占据的分区并将该分区改为空闲。
1.2、程序运行结果:1.3程序代码:(C语言描述)#include <stdio.h>#include <stdio.h>#include<math.h>#include<stdlib.h>#define NUM 4#define alloMemory(type) (type*)malloc(sizeof(type))struct partiTab{int no;int size;int firstAddr;char state;}parTab[NUM];typedef struct partiTab PARTITAB;typedef struct jcb { /*定义作业控制块JCB ,部分信息省略*/ char name[10]; //作业名int size; //作业大小struct jcb* link; //链指针}JCB;typedef struct{JCB *front,*rear;}jcbQue;jcbQue *jcbReadyQue;void AllocateMemory(int size);void createTab();void checkTab();void recycleMemory(int i);void AllocateMemory(int size){int i;for(i=0;i<NUM;i++){PARTITAB p=parTab[i];if(p.state='N' && p.size>size)parTab[i].state='Y';elseprintf("没有空闲分区,无法分配内存!\n");}}void createTab(){int i;for( i=1;i<=NUM;i++){//getPartiTab(PARTITAB);parTab[i-1].no=i;parTab[i-1].size=20;parTab[i-1].firstAddr=21;parTab[i-1].state='N';}}void checkTab(){int i;printf("分区号\t大小\t起址\t状态\n");for(i=0;i<NUM;i++){printf("%d\t",parTab[i].no);printf("%d\t",parTab[i].size);printf("%d\t",parTab[i].firstAddr);printf("%c\t",parTab[i].state);printf("\n");}}void recycleMemory(int i){parTab[i-1].state='N';}int main(int argc, char* argv[]){int i;printf("****固定式分区分配存储管理******\n");createTab();checkTab();printf("请按任意键继续:\n");getchar();printf("每个分区装入一道作业:\n");for(i=0;i<NUM;i++){AllocateMemory((i+1)*3);}checkTab();printf("请按任意键继续:\n");getchar();printf("假如一段时间后,其中一个作业结束,回收给它分配的分区(假如该作业在第2分区)\n");recycleMemory(2);checkTab();printf("请按任意键继续:\n");getchar();printf("接着,从外存后备作业队列中选择一个作业装入该分区(假如该作业大小为10)\n");AllocateMemory(10);checkTab();return 0;}2、设计一个可变式分区分配的存储管理方案。
(完整word版)Linux操作系统实验报告 存储管理试验

(3)实现FIFO页面淘汰算法。
(4)实现页故障率反馈模型。
2、实验目的与要求
①(1)用C语言是实现模拟Linux系统中连续内存分配用到的伙伴对算法。
(2)通过链表的形式输出在内存申请和释放过程中内存状态的对比图。
②(1)了解工作集模型的原理及其特点。
printmem();
}
int power(int x,int y){
int k=0,tmp=1;
for(;k<y;k++){
tmp=tmp*x;
}
return tmp;
}
int root(int x,int y){
int result=y,count=0;
while(result!=1){
result=result/x;
merge(tempId,merger);
}else {
return 0;
}
return 1;
}else {
second=second->next;
isFirst++;
}
}
return 1;
}
int freeb(int size){
block * first=(struct block *)malloc(sizeof(struct block));
if((second->start==nextStart || second->start==preStart) && second->loc==0){
merger->size=(first->size)+(second->size);
实验3虚拟存储器

在进程装入之前,整个虚拟内存的地址空间都被设置为只有 PAGE_NOACCESS 权限
的自由区域。当系统装入进程代码和数据后,才将内存地址的空间标记为已调配区或保留
区,并将诸如 EXECUTE、READWRITE 和 READONLY示,给出了 MEMORY_BASIC_INFORMATION 的结构,此数据描述了进程
2 实验目的
1)通过实验了解 Windows 内存的使用,学习如何在应用程序中管理内存,体会 Windows 应用程序内存的简单性和自我防护能力。
2)学习检查虚拟内存空间或对其进行操作。 3)了解 Windows 的内存结构和虚拟内存的管理,进而了解进程堆和 Windows 为使用内 存而提供的一些扩展功能。
分成三部分:
对全部高中资料试卷电气设备,在安装过程中以及安装结束后进行高中资料试卷调整试验;通电检查所有设备高中资料电试力卷保相护互装作置用调与试相技互术关,系电,力通根1保据过护生管高产线中工敷资艺设料高技试中术卷0资配不料置仅试技可卷术以要是解求指决,机吊对组顶电在层气进配设行置备继不进电规行保范空护高载高中与中资带资料负料试荷试卷下卷问高总题中2体2资配,料置而试时且卷,可调需保控要障试在各验最类;大管对限路设度习备内题进来到行确位调保。整机在使组管其高路在中敷正资设常料过工试程况1卷下中安与,全过要,度加并工强且作看尽下护可1都能关可地于以缩管正小路常故高工障中作高资;中料对资试于料卷继试连电卷接保破管护坏口进范处行围理整,高核或中对者资定对料值某试,些卷审异弯核常扁与高度校中固对资定图料盒纸试位,卷置编.工写保况复护进杂层行设防自备腐动与跨处装接理置地,高线尤中弯其资曲要料半避试径免卷标错调高误试等高方,中案要资,求料编技试5写术卷、重交保电要底护气设。装设备管置备4高线动调、中敷作试电资设,高气料技并中课3试术且资件、卷中拒料中管试包绝试调路验含动卷试敷方线作技设案槽,术技以、来术及管避系架免统等不启多必动项要方高案式中;,资对为料整解试套决卷启高突动中然过语停程文机中电。高气因中课此资件,料中电试管力卷壁高电薄中气、资设接料备口试进不卷行严保调等护试问装工题置作,调并合试且理技进利术行用,过管要关线求运敷电行设力高技保中术护资。装料线置试缆做卷敷到技设准术原确指则灵导:活。在。对分对于线于调盒差试处动过,保程当护中不装高同置中电高资压中料回资试路料卷交试技叉卷术时调问,试题应技,采术作用是为金指调属发试隔电人板机员进一,行变需隔压要开器在处组事理在前;发掌同生握一内图线部纸槽故资内障料,时、强,设电需备回要制路进造须行厂同外家时部出切电具断源高习高中题中资电资料源料试,试卷线卷试缆切验敷除报设从告完而与毕采相,用关要高技进中术行资资检料料查试,和卷并检主且测要了处保解理护现。装场置设。备高中资料试卷布置情况与有关高中资料试卷电气系统接线等情况,然后根据规范与规程规定,制定设备调试高中资料试卷方案。
OS实验三虚拟存储器的管理

OS实验三虚拟存储器的管理虚拟存储器管理南京理工大学泰州科技学院实验报告书课程名称:《计算机操作系统》实验题目:实验三班级: 08计算机2班学号:姓名:叶萌指导教师:袁宝华虚拟存储器管理一实验目的1. 理解虚拟存储器概念;2. 掌握分页式存储管理地址转换和缺页中断。
二实验内容1.模拟分页式存储管理中硬件的地址转换和产生缺页中断分页式虚拟存储系统是把作业信息的副本存放在磁盘上,当作业被选中时,可把作业的开始几页先装入主存且启动执行。
为此,在为作业建立页表时,应说明哪些页已在主存,哪些页尚未装入主存。
作业执行时,指令中的逻辑地址指出了参加运算的操作存放的页号和单元号,硬件的地址转换机构按页号查页表,若该页对应标志为“1”,则表示该页已在主存,这时根据关系式“绝对地址=块号×块长+单元号”计算出欲访问的主存单元地址。
如果块长为2的幂次,则可把块号作为高地址部分,把单元号作为低地址部分,两者拼接而成绝对地址。
若访问的页对应标志为“0”,则表示该页不在主存,这时硬件发“缺页中断”信号,有操作系统按该页在磁盘上的位置,把该页信息从磁盘读出装入主存后再重新执行这条指令。
2.用先进先出(FIFO)页面调度算法处理缺页中断在分页式虚拟存储系统中,当硬件发出“缺页中断”后,引出操作系统来处理这个中断事件。
如果主存中已经没有空闲块,则可用FIFO页面调度算法把该作业中最先进入主存的一页调出,存放到磁盘上,然后再把当前要访问的页装入该块。
调出和装入后都要修改页表中对应页的标志。
FIFO页面调度算法总是淘汰该作业中最先进入主存的那一页,因此可以用一个数组来表示该作业已在主存的页面。
假定作业被选中时,把开始的m个页面装入主存,则数组的元素可定为m个。
三实验准备1. 设计一个“地址转换”程序来模拟硬件的地址转换工作当访问的页在主存时,则形成绝对地址,但不去模拟指令的执行,而用输出转换后的地址来代替一条指令的执行。
当访问的页不在主存时,则输出“* 该页页号”,表示产生了一次缺页中断,程序流程图如图4-1所示。
虚拟存储管理实验报告

虚拟存储管理实验报告实验概述虚拟存储管理实验是操作系统课程中的一项重要实验,旨在通过模拟内存管理中的分页机制和页面置换算法,深入理解操作系统中的虚拟内存管理技术。
本实验主要包括以下几个关键点:- 模拟内存的分页机制- 实现页面置换算法- 分析不同页面置换算法的性能指标实验环境本次实验基于C语言和Linux操作系统进行实现,使用gcc编译器进行编译和调试。
实验过程及实现细节在本次实验中,我们实现了一个简单的虚拟内存系统,主要包括以下几个模块:页面管理、页面分配、页面置换和性能分析。
下面对每个模块的实现细节进行详细描述。
页面管理页面管理模块主要负责管理虚拟内存和物理内存之间的映射关系。
我们采用了分页机制进行管理,将虚拟内存和物理内存划分为固定大小的页面。
页面的大小由实验设置为4KB。
页面分配页面分配模块负责分配物理内存空间给进程使用。
我们使用一个位图作为物理内存管理的数据结构,记录每个页面的使用情况。
在每次页面分配时,我们会查找位图中第一个空闲的页面,并将其分配给进程。
页面置换页面置换模块是虚拟存储管理中的核心算法,主要用于解决内存中页面不足时的页面置换问题。
本次实验中我们实现了两种常用的页面置换算法:FIFO(先进先出)和LRU(最近最少使用)算法。
FIFO算法是一种简单的页面置换算法,它总是选择最早被加载到物理内存的页面进行置换。
LRU算法是一种基于页面访问历史的算法,它总是选择最长时间未被访问的页面进行置换。
性能分析性能分析模块主要用于评估不同的页面置换算法的性能指标。
我们使用了缺页率(Page Fault Rate)和命中率(Hit Rate)作为评价指标。
缺页率表示物理内存中的页面不能满足进程请求的比例,命中率表示进程请求的页面已经在物理内存中的比例。
实验结果为了评估不同的页面置换算法的性能,在实验过程中,我们通过模拟进程的页面访问序列,统计页面置换次数、缺页率和命中率等指标。
以一个包含100个页面访问请求的序列为例,我们分别使用FIFO算法和LRU 算法进行页面置换。
虚拟页面管理实验报告(3篇)

第1篇一、实验目的1. 理解虚拟存储器的概念和作用。
2. 掌握分页式存储管理的基本原理和地址转换过程。
3. 熟悉几种常见的页面置换算法,并比较其优缺点。
4. 通过实验,加深对虚拟存储器管理机制的理解。
二、实验内容1. 模拟分页式存储管理中的地址转换过程。
2. 比较几种常见的页面置换算法:FIFO、LRU、LFU和OPT。
三、实验原理虚拟存储器是一种将内存和磁盘结合使用的存储管理技术,它允许程序使用比实际物理内存更大的地址空间。
虚拟存储器通过将内存划分为固定大小的页(Page)和相应的页表(Page Table)来实现。
1. 分页式存储管理分页式存储管理将内存划分为固定大小的页,每个页的大小相同。
程序在运行时,按照页为单位进行内存访问。
分页式存储管理的主要优点是内存碎片化程度低,便于实现虚拟存储器。
2. 页面置换算法当内存中没有足够的空间来存放新请求的页面时,需要将某个页面从内存中移除,这个过程称为页面置换。
以下介绍几种常见的页面置换算法:(1)FIFO(先进先出):优先淘汰最早进入内存的页面。
(2)LRU(最近最少使用):优先淘汰最近最少被访问的页面。
(3)LFU(最不频繁使用):优先淘汰最不频繁被访问的页面。
(4)OPT(最佳置换):优先淘汰未来最长时间内不再被访问的页面。
四、实验步骤1. 模拟分页式存储管理中的地址转换过程(1)创建一个模拟内存的数组,表示物理内存。
(2)创建一个模拟页表的数组,用于存放虚拟页号和物理页号之间的映射关系。
(3)模拟进程对内存的访问,将访问的虚拟页号转换为物理页号。
2. 比较几种常见的页面置换算法(1)创建一个模拟进程的数组,包含访问的虚拟页号序列。
(2)对每个页面置换算法,模拟进程的运行过程,记录缺页中断次数。
(3)计算不同页面置换算法的缺页率,并比较其性能。
五、实验结果与分析1. 分页式存储管理中的地址转换过程实验结果表明,分页式存储管理能够有效地将虚拟地址转换为物理地址,实现虚拟存储器。
操作系统实验3虚拟存储器管理[1]
![操作系统实验3虚拟存储器管理[1]](https://img.taocdn.com/s3/m/77f86034e2bd960590c67728.png)
实验报告班级:系统本111 学号:2011415108 姓名:张国锋日期:2013.6.27⒈实验题目模拟分页式虚拟存储管理实验。
2.实验要求编写一段程序来模拟页面置换算法。
要求能分别显示最佳(Optimal)置换算法、先进先出(FIFO)页面置换算法和最近最久未使用(LRU)置换算法的置换过程。
3. 实验目的通过本实验帮助学生理解虚拟存储器的工作方法。
了解分页式存储管理里中各页面置换算法是怎样实现的,各算法有怎样的优缺点。
⒋实验原理分析⑴页面置换算法是在分页存储管理方式中为了合理的将进程运行所需的页面调入内存而产生的算法。
一个好的页面转换算法,应具有较低的页面更换频率。
最常见的页面置换算法有最佳(Optimal)置换算法、先进先出(FIFO)页面置换算法和最近最久未使用(LRU)置换算法。
⑵算法的说明最佳置换算法:选择以后永不使用或是在最长时间内不再被访问的页面作为被淘汰的页面。
这种算法通常可保证获得最低的缺页率,但因为内存中哪个页面是以后永不使用的是无法预知的,所以该算法是无法实现的。
先进先出页面置换算法:选择内存中驻留时间最长的页面作为被淘汰的页面。
该算法实现简单,只需将调入内存中的页面链成一个队列,并设置一个指针指向最老的页面即可。
最近最久未使用置换算法:选择最近最久未使用的页面作为被淘汰的页面。
该算法需要为每个页面设置一个访问字段用来记录页面上次被访问的时间,通过这个时间来决定淘汰哪一个页面。
⑶主要变量及函数说明如表1所示表1 主要变量及函数说明表PRA(void) 初始化int findSpace(void) 查找是否有空闲内存int findExist(int curpage) 查找内存中是否有该页面int findReplace(void) 查找应予置换的页面void display(void) 显示void FIFO(void) FIFO算法void LRU(void) LRU算法void Optimal(void) OPTIMAL算法void BlockClear(void) BLOCK恢复struct pageInfor * block 物理块struct pageInfor * page 页面号串5.实验代码清单#include <stdio.h>#include <stdlib.h>#include <conio.h>#define Bsize 3#define Psize 20struct pageInfor{int content; /*页面号*/int timer; /*被访问标记*/};void PRA(); /*初始化*/int findSpace(); /*查找是否有空闲内存*/int findExist(int curpage);/*查找内存中是否有该页面*/int findReplace(); /*查找应予置换的页面*/void display(); /*显示*/void FIFO(); /*FIFO算法*/void LRU(); /*LRU算法*/void Optimal(); /*OPTIMAL算法*/void BlockClear(); /*BLOCK恢复*/struct pageInfor * block; /*物理块*/struct pageInfor * page; /*页面号串*/int QString[20];void PRA(){int i,n;printf("请输入页面号引用串:\n");for(i=0;i<20;i++){scanf("%d",&QString[i]);}printf("您输入页面号引用串为:\n");printf("==================\n");for(i=0;i<20;i++){printf("%d\t",QString[i]);}printf("==================\n");block=(struct pageInfor *)malloc(sizeof(struct pageInfor));for(i=0; i<Bsize; i++) {block[i].content = -1;block[i].timer = 0;}page = (struct pageInfor *)malloc(sizeof(struct pageInfor)*Psize); for(i=0; i<Psize; i++) {page[i].content = QString[i];page[i].timer = 0;}}int findSpace(){int i=0;for(i=0; i<Bsize; i++)if(block[i].content == -1)return i; /*找到空闲内存,返回BLOCK中位置*/ return -1;}int findExist(int curpage){int i=0;for(i=0; i<Bsize; i++)if(block[i].content == page[curpage].content)return i; /*找到内存中有该页面,返回BLOCK中位置*/ return -1;}int findReplace(){int pos = 0,i;for(i=0; i<Bsize; i++)if(block[i].timer >= block[pos].timer)pos = i; /*找到应予置换页面,返回BLOCK中位置*/ return pos;}void display(){int i=0;for(i=0; i<Bsize; i++)if(block[i].content != -1)printf("%d\t",block[i].content);printf("\n");}void Optimal(){int exist,space,position,i,k,j ;for(i=0; i<Psize; i++) {exist = findExist(i);if(exist != -1) {printf("不缺页\n");}else {space = findSpace();if(space != -1) {block[space] = page[i];display();}else {for(k=0; k<Bsize; k++)for(j=i; j<Psize; j++) {if(block[k].content != page[j].content) { block[k].timer = 1000;}else {block[k].timer = j;break;}}position = findReplace();block[position] = page[i];display();}}}getch();system("cls");}void LRU(){int exist,space,position,i,k,j ; for(i=0; i<Psize; i++) { exist = findExist(i);if(exist != -1) {printf("不缺页\n");block[exist].timer = -1; } else {space = findSpace();if(space != -1) {block[space] = page[i]; display();}else {position = findReplace(); block[position] = page[i]; display();}}for(j=0; j<Bsize; j++)block[j].timer++;}getch();system("cls");}void FIFO(){int exist,space,position,i,k,j ;for(i=0; i<Psize; i++) {exist = findExist(i);if(exist != -1) {printf("不缺页\n");}else {space = findSpace();if(space != -1) {block[space] = page[i];display();}else {position = findReplace();block[position] = page[i];display();}}for(j=0; j<Bsize; j++)block[j].timer++; /*BLOCK中所有页面TIMER++*/ }getch();system("cls");}void BlockClear() //清空页面信息{int i;for(i=0; i<Bsize; i++) {block[i].content = -1;block[i].timer = 0;}}void main(){PRA();system("color 2");int select=1;while(select) {printf("系统本111项静怡小组页面置换算法程序\n"); printf("请按以下菜单选择:\n");printf("[1]\tOptimal\t算法\n");printf("[2]\tFIFO\t算法\n");printf("[3]\tLRU\t算法\n");printf("[0]\t退出\n");scanf("%d",&select);switch(select) {case 0:break;case 1:printf("Optimal算法结果如下:\n");Optimal();break;case 2:printf("FIFO算法结果如下:\n");FIFO();break;case 3:printf("LRU算法结果如下:\n");LRU();break;default:printf("菜选项输入错误,请输入(1,2,3,0)\n");break;}BlockClear();}}6.实现①输入课本中例题数据,创建3个物理模块,页面引用串为7 0 1 2 0 3 0 4 2 3 0 3 2 12 0 1 7 0 1运行界面如图1所示图1 输入②用最佳置换算法,运行后如图2所示图2 Optinal算法③用FIFO先进先出算法运行后如图3所示图3 FIFO算法④用LRU最久未使用算法,运行后如图4所示图4 LRU算法。
虚拟器存储实验报告

一、实验目的1. 了解虚拟器存储的基本概念和原理;2. 掌握虚拟器存储的安装和配置方法;3. 通过虚拟器存储实验,验证虚拟器存储在计算机系统中的作用和优势。
二、实验环境1. 操作系统:Windows 102. 虚拟器软件:VMware Workstation 153. 实验内容:创建虚拟机、配置虚拟机、安装操作系统、配置网络、使用虚拟机存储三、实验步骤1. 创建虚拟机(1)打开VMware Workstation,点击“创建新的虚拟机”;(2)选择“自定义(高级)”,点击“下一步”;(3)选择虚拟机兼容性,点击“下一步”;(4)选择操作系统类型和版本,点击“下一步”;(5)输入虚拟机名称和安装路径,点击“下一步”;(6)分配内存大小,点击“下一步”;(7)创建虚拟硬盘,选择硬盘文件类型和容量,点击“下一步”;(8)选择虚拟机网络类型,点击“下一步”;(9)选择I/O设备设置,点击“下一步”;(10)完成创建虚拟机。
2. 配置虚拟机(1)双击打开虚拟机;(2)选择“自定义设置”;(3)在“硬件”选项卡中,调整虚拟机CPU核心数、内存大小等;(4)在“选项”选项卡中,配置网络连接、USB控制器等;(5)在“虚拟硬盘”选项卡中,调整硬盘容量、存储模式等;(6)在“CD/DVD选项”选项卡中,添加安装操作系统所需的镜像文件;(7)在“其他设置”选项卡中,配置USB控制器、打印机等。
3. 安装操作系统(1)启动虚拟机,进入操作系统安装界面;(2)按照安装向导完成操作系统安装。
4. 配置网络(1)在虚拟机中打开网络管理工具;(2)选择合适的网络连接方式,如桥接模式;(3)配置IP地址、子网掩码、网关等信息。
5. 使用虚拟机存储(1)在虚拟机中安装文件管理器;(2)将需要存储的文件复制到虚拟机中;(3)在虚拟机中打开文件管理器,查看存储的文件。
四、实验结果与分析1. 实验结果通过本次实验,成功创建了一个虚拟机,并安装了操作系统。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
实验三虚拟存储器管理
一、实验目的
为了使大的进程(其地址空间超过主存可用空间)或多个进程的地址空间之和超过实际主存空间时,仍能运行,引入了虚拟存储器的概念。
使进程的一部分地址空间在主存,另一部分在辅存,由操作系统实现多级存储器的自动管理,实现主存空间的自动覆盖。
模拟请求分页虚拟存储器管理技术中的硬件地址变换、缺页中断以及页式置换算法,处理缺页中断。
通过本实验,使学生对请求分页存储管理的概念有一个清楚的理解。
二、实验内容
1、模拟请求分页存储管理中的硬件地址变换的过程
(1)请求分页虚拟存储器管理技术是把进程地址空间的全部信息存放在磁盘对换区上。
当进程被选中运行时,先把进程的开始几页装入主存并启动运行。
为此在为进程建立页表时,应说明哪些页已在主存,哪些页不在主存。
页表的格式如表1 所示。
在表1中
①"标志位"表示对应页是否已经装入主存的标志: "0"表示对应页未装入主存;"1"表示对应页已装入主存。
②"主存块号"表示该页对应的主存块号。
③"修改位"指示该页进主存后是否修改过的标志。
④"外存地址"表示该页所在的外存地址。
设计一个主存分块表,假定分配给进程的主存块数为M,且该进程开始的M页已装入主存。
(2)进程执行时,指令中的逻辑地址指出指令或操作数的地址中的页号和页内地址。
硬件地址转换机构按页号查页表。
①若该页的有效位为"1" ,表示该页已在主存,从而找到该页对应的主存块号。
根据如下的关系式,计算出欲访问的主存地址:
绝对地址=块号×块的长度+页内地址
由于页的大小为2 的整次幕,所以只要将块号与页内地址相拼接,放入主存地址寄存器,形成绝对地址。
不去模拟指令的执行,而是输出被转换的地址即可。
②若该页的有效位为"0" ,对应的页不在主存,由硬件产生缺页中断,转操作系统处理。
这里不去设计缺页处理程序,仅输出"*该页号的页不在主存,产生缺页中断"即可,以表示产生了一次缺页中断。
假定主存的每块长度为128个字节。
现有一个具有8页的进程,系统为它分配了4 个主存块(即m=4)。
其中第0~3页已经装入主存。
该进程的页表如表2 所示,进程执行的指令序列如表3 所示,地址变换算法流程如图1所示。
图1 地址变换算法流程
运行自己设计的地址变换程序,显示或打印运行结果。
因为只是模拟地址变换,并不模拟指令的执行,故不考虑上述指令的操作结果。
2、采用先进先出(或LRU)算法实现分页管理的缺页中断处理
在请求分页存储管理系统中,当硬件发出缺页中断后转操作系统处理缺页中断。
如果主存中已无空闲块,采用适当算法(FIFO 或LRU) 进程缺页处理。
(1)当采用先进先出算法时,用一个数组P构成先进先出(FIFO) 队列,数组中各个元素为进程已在主存的页号,其队列头指针放在HEAD变量中,初始化为0 。
假定分配给每个进程的内存块数固定不变,为M。
当队列满需淘汰时,掏汰最先进入主存的一页。
若该页修改过,还要存入磁盘。
然后再把当前要访问的页装入该块,并修改页表和存储分块表中的对应标志。
采用先进先出(FIFO) 置换算法的流程如图2 所示。
每一次调整,要求输出队列中的元素。
(2)当采用LRU 算法时,用一个数组P构成堆栈,堆栈中各个元素为进程已在主存的页号,为了进行页面置换,可设置一个栈指针HEAD ,初始化为0。
假定分配给每个进程的内存块数固定不变,为M。
当队列满需淘汰时,操作系统选择栈底的元素淘汰,其他元素向下移一个位置,将新调入页放HEAD指示的钱顶。
当访问的页在栈中时,还应调整页号从当前位置到栈顶。
采用LRU 置换算法的流程如图3 所示。
每一次调整,要求输出栈中的元素。
图2 FIFO置换算法流程
图3 LRU置换算法流程。