模拟请求分页虚拟存储管理中的硬件地址变换过程

合集下载

模拟页式虚拟存储管理中硬件的地址转心得体会

模拟页式虚拟存储管理中硬件的地址转心得体会

模拟页式虚拟存储管理中硬件的地址转心得体会
页式虚拟存储管理中,硬件的地址转换过程是非常复杂的,需要多个硬件组件的协同工作来完成。

在我的学习中,我有一些体会和心得体会:
首先,在页式虚拟存储管理中,硬件的地址转换是通过页表实现的。

每个进程都有自己的页表,其中包含了虚拟页与物理页之间的对应关系。

当进程需要访问内存时,其虚拟地址会被分为页号和页内偏移量两部分,而页号就是用来查找页表中对应的物理页号的。

其次,在硬件地址转换的过程中,还需要使用到一个称为MMU(内存管理单元)的硬件组件。

MMU的作用就是将虚拟地址转换为物理地址。

它会在页表中查找想要访问的虚拟页号对应的物理页号,并使用物理页号和页内偏移量重新构造出物理地址。

最后,在使用页式虚拟存储管理时,还需要注意物理页的分配和清除。

物理页可以被多个进程共享使用,但是在进程结束时,需要及时清除对应的物理页帧,以确保不会引起内存泄漏和资源浪费。

总之,页式虚拟存储管理中硬件的地址转换过程非常复杂,需要多个硬件组件的协同工作来完成。

正确理解这个过程,并且合理地进行管理和分配物理页,才能保证进程的正常运行。

模拟段页式存储管理地址变换

模拟段页式存储管理地址变换

模拟段页式存储管理地址变换-标准化文件发布号:(9456-EUATWK-MWUB-WUNN-INNUL-DDQTY-KII计算机科学与技术学院2007-2008 学年第一学期《操作系统》课程设计题目:模拟段页式存储管理地址变换教师:冯霞班级: 050341D班学号: 050341404姓名:陈玉虎成绩:1. 题目分析1.1 设计目的●了解内存管理机制,掌握段页式虚拟存储技术;●理解内存分配原理,特别是以页面为单位的虚拟内存分配方法;●用可视化界面来掌握操作系统的知识。

1.2 设计内容●根据逻辑地址中的段号进行查找,先查找快表。

如果找到,则形成物理地址,否则进行后续步骤;●通过段表始址寄存器,查找段表在内存中的始址;●通过段表并根据段号,查找页表所在位置;●访问页表,根据逻辑页号查找该页所在的物理块号;●将物理块号和逻辑地址中的页内地址拼接,形成访问内存单元的物理地址。

1.3 相关知识概述●段页式存储管理的主要内容是:●(1)用页式方法来分配和管理内存空间,即:把内存分为若干大小相等的页面;●(2)用段式方法对用户程序按照其内在的逻辑关系划分成若干段;●(3)再按照划分的内存页面的大小,把每一段内划分成若干大小相等的页面;●(4)用户程序的逻辑地址由三部分组成:段号(s),页号(p),页内地址(d);●(5)内存是以页为基本单位分配给每个用户程序的,在逻辑上相邻的页面在内存不一定相邻。

1.4 基本设计思路●(1)建立段表●系统为每个用户程序建立一张段表,用于记录各段的页表始址和页表长度。

●(2)建立页表●系统为用户程序的每一段各建立一张页表,用于记录该段中各逻辑页号与物理块号之间的对应关系。

●段表、页表和内存的关系如图所示。

如图段表、页表和内存的关系●(3)建立内存空闲页面表●整个系统建立一张内存空闲页面表,用于记录并管理内存空闲页面。

●(4)硬件支持●为加快地址映射速度,硬件需要提供如下2个寄存器:①段表始址寄存器;②段表长度寄存器;●(5)地址映射过程●在段页式存储管理中,要访问内存的单元,则要经过如下地址转换步骤,才能得到最终的物理地址。

模拟请求页式存储管理中硬件的地址转换和缺页中断处理

模拟请求页式存储管理中硬件的地址转换和缺页中断处理

一.实验内容模拟请求页式存储管理中硬件的地址转换和缺页中断处理 二.实验原理装入新页置换旧页时,若旧页在执行中没有被修改过,则不必将该页重写磁盘。

因此,页表中增加是否修改过的标志,执行“存”指令和“写”指令时将对应的修改标志置成“1”三.要求及方法:① 设计一个地址转换程序来模拟硬件的地址转换和缺页中断。

当访问的页在主存时则形成绝对地址,但不去模拟指令的执行,可以输出转换后的绝对地址来表示一条指令已执行完成。

当访问的页不在主存中时,则输出“*页号”来表示硬件产生了一次缺页中断。

模拟地址转换流程见图1。

② 编制一个FIFO 页面调度程序;FIFO 页面调度算法总是先调出作业中最先进入主存中的哪一页。

因此可以用一个数组来表示(或构成)页号队列。

数组中每个元素是该作业已在主存中的页面号,假定分配给作业的页架数为m ,且该作业开始的m 页已装入主存,则数组可由m 个元素构成。

P[0],P[1],P[2],…,P[m-1]它们的初值为P[0]:=0,P[1]:=1,P[2]:=2,…,P[m-1]:=m-1用一指针K 指示当要调入新页时应调出的页在数组中的位置,K 的初值为“0”,当产生缺页中断后,操作系统总是选择P[K]所指出的页面调出,然后执行:P[K]:=要装入的新页页号 K :=(k+1)mod m在实验中不必实际地启动磁盘执行调出一页和装入一页的工作,而用输出“OUT 调出的页号”和“IN 要装入的新页页号”来模拟一次调出和装入过程,模拟程序的流程图见附图1。

按流程控制过程如下:提示:输入指令的页号和页内偏移和是否存指令⎩⎨⎧ 0 1非存指令存指令,若d 为-1则结束,否则进入流程控制过程,得P1和d,查表在主存时,绝对地址=P1×1024+d③假定主存中页架大小为1024个字节,现有一个共7页的作业,其副本已在磁盘上。

系统为该作业分配了4个页架,且该作业的第0页至第3页已装入内存,其余3页未装入主四.主要代码及其说明#include <stdio.h>#include <string.h>#include <stdlib.h>#define M 1024#define R 4typedef struct _PTable{int Number; //页号int Flag; //标志int Fnum; //页架号int Mflag; //修改标志int Position; //该页存放在磁盘上的位置}PTable;//初始化PTable ptable[]={{0, 1, 5, 0, 11},{1, 1, 8, 0, 12},{2, 1, 9, 0, 13},{3, 1, 1, 0, 21},{4, 0, -1, 0, 22},{5, 0, -1, 0, 23},{6, 0, -1, 0, 121},};void menu();int change(char op,int number,int add);void display();int p[]={0,1,2,3},k=0;void main(void){int number,add,n;char op;while(n){display();fflush( stdin );printf("输入:操作页号页内地址(存指令用\"c\"代表)\n");scanf("%c %d %d",&op,&number,&add);change(op,number,add);printf("\"是否继续! (按1 继续按任意键结束)\"\n");scanf("%d",&n);system( "cls ");if(n==1)continue;elsebreak;}}void menu(){printf("操作码\t页号\t页内地址页架标志修改标志出入状态绝对地址(L)\n");}int change(char op,int number,int add){bool flag1=false;bool flag2=false;int i,address,cout,temp;;for(i=0;i<7;i++){if(op=='c'){ptable[number].Mflag=1;}if(ptable[i].Number==number && ptable[i].Flag==1){address=ptable[i].Fnum*M+add;flag1=true;}if(ptable[i].Number==number && ptable[i].Flag==0){cout=i;temp = p[k]; //将要出的页if(ptable[temp].Mflag==1){flag2=true;}//修改页表ptable[number].Flag=1; //修改新页标志ptable[number].Fnum=ptable[temp].Fnum; //修改新页页架address=ptable[number].Fnum*M+add;ptable[temp].Flag=0; //修改旧页ptable[temp].Fnum=-1; //修改页架ptable[temp].Mflag=0; //修改修改标志p[k]=number; //新页k=(k+1)%R;}}menu();if(flag1)printf("%c\t %d\t %d\t %d\t %d\t %d\t 无出入\t%d\n",op,number,add,ptable[number].Fnum,ptable[number].Flag,ptable[number].Mflag,address);else if(flag2)printf("%c\t *%d\t %d\t %d\t %d\t%d OUT:%d,IN:%d %d\n",op,number,add,number,ptable[number].Fnum,ptable[number].Flag,ptable[number].Mflag,temp,number,address);elseprintf("%c\t *%d\t %d\t %d\t %d\t %d\t IN%d\t %d\n",op,number,add,ptable[number].Fnum,ptable[number].Flag,ptable[number].Mflag,number,address);return 0;}void display(){int i;printf("********当前页表中的状态*********\n");printf("页号标志页架修标志\n");for(i=0;i<7;i++){printf("%d\t%d\t%d\t%d\n",ptable[i].Number,ptable[i].Flag,ptable[i].Fnum,ptable[i]. Mflag);}printf("当前主存中的页号为: ");for(i=0;i<4;i++){printf("%d ",p[i]);}printf("\n*********************************\n");}五,实验截图。

模拟设计页式存储管理中地址转换

模拟设计页式存储管理中地址转换

课程设计课程名称操作系统设计题目模拟设计页式存储管理中地址转换学院计算机科学与技术班级计算机姓名指导教师2011 年 1 月20 日课程设计任务书学生姓名:专业班级:指导教师:工作单位:计算机科学与技术学院题目: 模拟设计页式存储管理中地址转换初始条件:1.预备内容:阅读操作系统的内存管理章节内容,理解页式存储管理的思想及相应的分配主存的过程。

2.实践准备:掌握一种计算机高级语言的使用。

要求完成的主要任务:(包括课程设计工作量及其技术要求,以及说明书撰写等具体要求)1.实现页式存储管理中逻辑地址到物理地址的转换。

能够处理以下的情形:页式逻辑地址可以输入十进制或者十六进制,能检查地址的合法性,如果合法进行转换,否则显示“地址非法”;物理地址能够分别用十进制和十六进制表示。

2.设计报告内容应说明:⑴课程设计目的与功能;⑵需求分析,数据结构或模块说明(功能与框图);⑶源程序的主要部分;⑷测试用例,运行结果与运行情况分析;⑸自我评价与总结:i)你认为你完成的设计哪些地方做得比较好或比较出色;ii)什么地方做得不太好,以后如何改正;iii)从本设计得到的收获(在编写,调试,执行过程中的经验和教训);iv)完成本题是否有其他的其他方法(如果有,简要说明该方法);v)对实验题的评价和改进意见,请你推荐设计题目。

时间安排:设计安排一周:周1、周2:完成程序分析及设计。

周2、周3:完成程序调试及测试。

周4、周5:验收、撰写课程设计报告。

(注意事项:严禁抄袭,一旦发现,抄与被抄的一律按0分记)指导教师签名:年月日系主任(或责任教师)签名:年月日模拟设计页式存储管理中地址转换1.课程设计目的与功能1.1设计目的了解有关虚拟存储器、页式存储管理等概念,并知道了如何将地址转换1.2设计目的实现页式存储管理中逻辑地址到物理地址的转换。

能够处理以下的情形:页式逻辑地址可以输入十进制或者十六进制,能检查地址的合法性,如果合法进行转换,否则显示“地址非法”;物理地址能够分别用十进制和十六进制表示。

实验四页式虚拟存储管理中地址转换和页式中断FIFOLRUOPTC++版本

实验四页式虚拟存储管理中地址转换和页式中断FIFOLRUOPTC++版本

实验四页式虚拟存储管理中地址转换和页式中断FIFO一、实验目的深入了解页式存储管理如何实现地址转换;进一步认识页式虚拟存储管理中如何处理缺页中断以及页面置换算法。

二、实验主要内容编写程序完成页式虚拟存储管理中地址转换过程和模拟缺页中断的处理。

实验具体内容包括:首先对给定的地址进行转换工作,若发现缺页则先进行缺页中断处理,然后再进行地址转换;最后编写主函数对所做工作进行测试。

假定主存64KB,每个主存块1024字节,作业最大支持到64KB,系统中每个作业分得主存块4块。

三、实验原理1)地址转换过程:首先从逻辑地址中的高位取得页号,然后根据页号查页表,得到块号;然后从逻辑地址中的低位取得页内地址,将块号和页内地址合并即得到物理地址。

2)缺页中断处理根据页号查找页表,判断该页是否在主存储器中,若该页标志位“0”,形成缺页中断。

操作系统让调出中断处理程序处理中断。

四、实验方法与步骤实现地址转换与缺页中断处理,主要考虑三个问题:第一,设计页式虚拟存储管理方式中页表的数据结构;第二,地址转换算法的实现;第三,缺页中断处理算法的实现。

1)设计页表的数据结构页式虚拟存储管理方式中页表除了页号和该页对应的主存块号外,至少还要包括存在标志(该页是否在主存),磁盘位置(该页的副本在磁盘上的位置)和修改标志(该页是否修改过)。

在实验中页表用数组模拟,其数据结构定义如下:struct{int lnumber; //页号int flag; //表示页是否在主存中,“1”表示在,“0”表示不在int pnumber; // 该页所在主存块的块号int write; //该页是否被修改过,“1”表示修改过,“0“表示没有修改过int dnumber; //该页存放在磁盘上的位置,即磁盘块号}page[n]; //页表定义2)地址转换算法的实现地址转换是由硬件完成的,实验中使用软件程序模拟地址转换过程。

在实验中,每个主存块1024字节,则块内地址占10位;主存64KB,则主存共64块,即块号占6位;物理地址共占16位;作业最大64KB,则作业最大占64块,即页号占6位,逻辑地址共占16位。

模拟分页式存储管理中硬件的地址转换和产生缺页中断

模拟分页式存储管理中硬件的地址转换和产生缺页中断

实验三
课程名称:操作系统
课程类型:必修
实验项目名称:存储器管理
实验题目:模拟分页式存储管理中硬件的地址转换和产生缺页中断。

一、实验目的
在计算机系统中,为了提高主存利用率,往往把辅助存储器(如磁盘)作为主存储器的扩充,使多道运行的作业的全部逻辑地址空间总和可以超出主存的绝对地址空间。

用这种办法扩充的主存储器称为虚拟存储器。

通过本实验帮助同学理解在分页式存储管理中怎样实现虚拟存储器。

二、实验要求
模拟分页式存储管理中硬件的地址转换。

需要为作业建立页表,应说明哪些页已在主存,哪些页尚未装入主存。

作业执行时,指令中的逻辑地址指出了参加运算的操作存放的页号和单元号,硬件的地址转换机构按页号查页表,若该页对应标志为“1”,则表示该页已在主存,这时根据关系式“绝对地址=块号×块长+单元号”计算出欲访问的主存单元地址。

若产生缺页中断,引出操作系统来处理这个中断事件。

如果主存中已经没有空闲块,则可用FIFO 页面调度算法把该作业中最先进入主存的一页调出,存放到磁盘上,然后再把当前要访问的页装入该块。

调出和装入后都要修改页表页表中对应页的标志。

三、设计思想
1、物理设计
全局变量定义如下:
struct info//页表
{
int block;//物理页架号
int disk;//在磁盘上的物理块号
int flag; //内外标志
}pagelist[10];
int po;//队列标记
int t[4];
2、程序流程图
(见下图)
图1-1主程序的流程图
图1-2 init( )的流程图。

实验四 式虚拟存储管理中地址转换和 式中断 FIFO LRU OPT C 版本

实验四 式虚拟存储管理中地址转换和 式中断 FIFO LRU OPT C 版本

实验四页式虚拟存储管理中地址转换和页式中断FIFO一、实验目的深入了解页式存储管理如何实现地址转换;进一步认识页式虚拟存储管理中如何处理缺页中断以及页面置换算法。

二、实验主要内容编写程序完成页式虚拟存储管理中地址转换过程和模拟缺页中断的处理。

实验具体内容包括:首先对给定的地址进行转换工作,若发现缺页则先进行缺页中断处理,然后再进行地址转换;最后编写主函数对所做工作进行测试。

假定主存64KB,每个主存块1024字节,作业最大支持到64KB,系统中每个作业分得主存块4块。

三、实验原理1)地址转换过程:首先从逻辑地址中的高位取得页号,然后根据页号查页表,得到块号;然后从逻辑地址中的低位取得页内地址,将块号和页内地址合并即得到物理地址。

2)缺页中断处理根据页号查找页表,判断该页是否在主存储器中,若该页标志位“0”,形成缺页中断。

操作系统让调出中断处理程序处理中断。

四、实验方法与步骤实现地址转换与缺页中断处理,主要考虑三个问题:第一,设计页式虚拟存储管理方式中页表的数据结构;第二,地址转换算法的实现;第三,缺页中断处理算法的实现。

1)???????? 设计页表的数据结构页式虚拟存储管理方式中页表除了页号和该页对应的主存块号外,至少还要包括存在标志(该页是否在主存),磁盘位置(该页的副本在磁盘上的位置)和修改标志(该页是否修改过)。

在实验中页表用数组模拟,其数据结构定义如下:struct{int lnumber; number=lnumber;page[i].flag=0;page[i].write=0;page[i].dnumber=dnumber;i++;cout<<"请输入页号和辅存地址:";cin>>lnumber>>dnumber;}number=pnumber;page[m].flag=1;rite==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; lag==1){ number;paddress=pnumber<<10|ad;cout<<"逻辑地址是:"<<laddress<<" 对应物理地址是:"<<paddress<<endl;if(write==1) rite=1;}else{ 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() /*主函数部分*/{float percent;int choice;printf("Select the arithmetic:\n(1)OPT\n(2)LRU\nyour choice is:");scanf("%d",&choice);/*选择页面置换算法*/jccreat(); /*创建进程*/if(choice==1) /*采用OPT算法置换*/{percent=OPT(); /*计算OPT时的缺页率*/printf("The percent of OPT is %f",percent);}else if(choice==2) /*采用LRU算法置换*/{percent=LRU(); /*计算LRU时的缺页率*/printf("The percent of OPT is %f",percent);}else printf("Your choice is invalid.");getch();}。

请求分页式存储管理的地址转换过程实现

请求分页式存储管理的地址转换过程实现

第2部分、请求分页式存储管理的地址转换过程实现:●基本要求:在第1部分实验基础上实现进程的分页式内存分配和地址转换过程,并进一步实现请求分页式存储分配和地址转换过程。

页面置换算法至少应实现先进先出(FIFO )、最近最久未使用(LRU )等算法。

●参考学时:16学时 ●实验提示:1、建立一个位示图,用来模拟内存的分配情况,位示图的位数与设定的物理块个数相同。

程序启动时可利用一组随机0和1填充位示图,表示内存已被占用情况。

假设内存容量为64K ,块大小为1K ,则共有64个块,对应的位示图可能的值如下:该位示图表示内存的2(0字节第2位)、3(0字节第3位)、6(0字节第6位)、8(1字节第0位)、9(1字节第1位)、12(1字节第4位)、15(1字节第7位)…等块没有被占用。

2、创建进程时输入进程大小,并根据程序中设定的物理块大小为进程分配物理块,同时建立页表。

例如,在上图基础上,若要建立一个大小为5000字节的进程,则:● 计算出该进程共有“向上取整(5000/1024)=5”个页,需要占用5个内存块;● 建立空的页表,即长度为5的一维整数数组;● 从位示图中找出前5个“0”位在整个位示图中的位置号(即i 字节j 位为0,则该位的位置为8*i+j ),并将这些号依次填入页表中,同时把前5个“0”改为“1”,以示对应内存块已经分配。

第0字节 1 0 1 1 0 0 1 1 第2字节 1 1 1 0 0 1 1 1 第4字节 0 0 0 1 1 1 1 1 第6字节1 1 1 1 1 0 0 0第1字节 0 1 1 0 1 1 0 0 第3字节 1 0 0 0 0 1 1 1 第5字节 0 1 1 1 0 0 1 1 第7字节0 0 0 0 0 0 0 13、输入当前执行进程所要访问的逻辑地址,并将其转换成相应的物理地址。

4、进程退出时,根据其页表内容向位示图反向回填“1”。

5、扩充页表,将其变成支持请求和置换功能的二维页表(增加存在位等)。

页式虚拟存储地址变换.

页式虚拟存储地址变换.

页式虚拟存储管理中地址转换和缺页中断的模拟
实验目的:
1.深入了解页式虚拟存储管理技术如何实现地址转换。

2.进一步认识页式虚拟存储管理中如何处理缺页中断。

实验要求:
编写程序模拟实现页式虚拟存储管理中的地址转换过程以及缺
页中断的处理过程。

实验指导:
1.请求分页中硬件地址变换过程。

(1)
自己设计一个主存分配表。

(2)对逻辑地址进行划分为页号和页内地址
(3)越界检查,若越界直接中断退出程序的执行。

(不越界情况下)检索页表分2种情况:其一,若该页在内存,则找到其对应的物理块号;合并块号和块内地址形成物理地址。

进行输出。

(4)其二,若该页不再内存,产生缺页中断,调用缺页中断子
程序执行缺页中断处理过程。

中断返回后重新执行被中断的指令。

2.采用某一种页面置换算法实现分页管理的缺页调度。

(1)当硬件发出缺页中断后转操作系统处理缺页中断。

查看主存分块表看有无可用空闲块。

若有则为进程分配一块。

若无空闲块,当采用一种页面置换算法(例如FIFO形成队列),其头部放在变量K 中淘汰最先进入主存的一页,若该页修改过,好要重新写回磁盘。

然后再把当前要访问的页装入该内存块,并修改页表和存储分块表。

数组P中各个元素为作业已在主存的页号。

假定作业最多可分配m块。

当淘汰一页时,总是淘汰P[K]所指页。

之后调整数组P:
P[K]=要装入的页;
K=(K+1)mod m;
流程图如下:。

模拟页式虚拟存储管理中硬件的地址转换和用先进先出调度算法处理缺页中断

模拟页式虚拟存储管理中硬件的地址转换和用先进先出调度算法处理缺页中断

实验模拟页式虚拟存储管理中硬件的地址转换和用先进先出调度算法处理缺页中断1、实验目的1)理解页式虚拟存储管理中的地址转换。

2)理解用先进先出调度算法如何处理缺页中断。

2、实验原理在页式虚拟存储管理中,如果访问的页面在内存,计算出相应的物理地址,如果访问的页面不在内存,产生缺页中断,将所缺页从外存调入,如果内存没有空间需要将内存的一页淘汰,再将所缺页调入,然后计算出相应的物理地址。

3、实验仪器设备微型计算机、C或Visual C++开发软件4、实验内容与步骤编写程序,模拟页式虚拟存储管理中硬件的地址转换和用先进先出调度算法处理缺页中断。

假定主存的每块长度为1024个字节,现有一个共7页的作业,其副本已在磁盘上。

系统为该作业分配了4个主存块,且该作业的第0页至第3页已经装入主存,其余3页尚未装入主存,该作业的页表见下表。

实验步骤1)输入程序2)如果该作业执行的指令序列如下表所示:执行上述的指令序列来调试你所设计的程序(仅模拟指令的执行,不必考虑指令序列中具体操作的执行)5、预习及实验报告要求预习页式虚拟存储管理中地址转换和页面置换算法的有关内容。

实验报告要求写出程序的源代码及运行结果。

分析:主存块有4个,物理地址=块号*块长(这里是1024)+块内地址(块内地址=页内地址),若页号不在主存中,则产生缺页中断,根据先进先出原则,今要执行的页号置换最先进入主存的页号,计算得到如下值:5192,8242,9231,1050,5176,5160,8248,9239,1061,5198,8193,8278 012306451246000006666222111111444446222222255555333333331111英文版#define size 1024//定义块的大小,本次模拟设为1024个字节。

#include "stdio.h"#include "string.h"#include <conio.h>struct plist{int number; //页号int flag; //标志,如为1表示该页已调入主存,如为0则还没调入。

模拟分页式虚拟存储管理中硬件的地址转换和缺页中断--选择页面调度算法处理缺页中断

模拟分页式虚拟存储管理中硬件的地址转换和缺页中断--选择页面调度算法处理缺页中断

操作系统实验二〔第一题〕一.实验内容模拟分页式虚拟存储管理中硬件的地址转换和缺页中断,以及选择页面调度算法处理缺页中断。

二.实验目的在电脑系统总,为了提高主存利用率,往往把辅助存储器作为主存储器的扩充,使多道运行的作业的全部逻辑地址空间综合可以超出主存的绝对地址空间。

用这种方法扩充的主存储区成为虚拟存储器。

三.实验题目模拟分页式存储管理中硬件的地址转换和产生缺页中断。

四.程序清单//// 操作实验二.cpp : 定义控制台应用程序的入口点。

//#include "stdafx.h"#include<iostream>#include<string>#include<fstream>using namespace std;class ins{private:string ope;long int page;long int unit;public:ins(){ }ins(string o,long int p,long int u):ope(o),page(p),unit(u){}void setope(string o){ ope=o;}void setpage(long int p){ page=p;}void setunit(long int u){ unit=u;}string getope(){return ope;}long int getpage(){return page;}long int getunit(){return unit;}};class work{private:long int Page;int sym;long int inum;long int onum;public:work(){}work(long int P, int s,long int i,long int o):Page(P),sym(s),inum(i),onum(o){} void setPage(long int P){ Page=P;}void setsym( int s){ sym=s;}void setinum(long int i){ inum=i;}void setonum(long int o){ onum=o;}long int getPage(){return Page;}int getsym(){return sym;}long int getinum(){return inum;}long int getonum(){return onum;}};void diaodu(work *w,ins * i,int numofins){ for(int j=0;j<numofins;j++){long int tempofk;long int a =i[j].getpage();for(int k=0;k<7;k++) //7是页表的页数if(w[k].getPage()!=a)continue;else{tempofk=k;break;}if(w[tempofk].getsym()==1)cout<<"绝对地址:"<<w[tempofk].getinum()*128+i[j].getunit()<<" "<<"磁盘地址为:"<<w[tempofk].getonum()<<" "<<"操作为:"<<i[j].getope()<<endl;else cout<<"*"<<"发生缺页中断"<<endl;}}int main(){ins*INS=new ins[12];INS[0].setope ("+");INS[0].setpage(0);INS[0].setunit(70);INS[1].setope ("+");INS[1].setpage(1);INS[1].setunit(50);INS[2].setope ("×");INS[2].setpage(2);INS[2].setunit(15);INS[3].setope ("存"); INS[3].setpage(3);INS[3].setunit(21);INS[4].setope ("取"); INS[4].setpage(0);INS[4].setunit(56);INS[5].setope ("-");INS[5].setpage(6);INS[5].setunit(40);INS[6].setope ("移位"); INS[6].setpage(4);INS[6].setunit(53);INS[7].setope ("+");INS[7].setpage(5);INS[7].setunit(23);INS[8].setope ("存"); INS[8].setpage(1);INS[8].setunit(37);INS[9].setope ("取"); INS[9].setpage(2);INS[9].setunit(78);INS[10].setope ("+"); INS[10].setpage(4);INS[10].setunit(1);INS[11].setope ("存"); INS[11].setpage(6);INS[11].setunit(84);work*W =new work[7]; ifstream in("g://operate1.txt");long int p;int s;long int i;long int o;for(int jj=0;jj<7 ;jj++){in>>p;in>>s;in>>i;in>>o ;W[jj].setPage(p);W[jj].setsym(s);W[jj].setinum(i);W[jj].setonum(o);}diaodu(W,INS,12);}五.结果显示操作系统实验二〔第二题〕一.用先进先出〔FIFO〕九.程序清单/ 操作系统实验二.cpp : 定义控制台应用程序的入口点。

《操作系统》实验报告三 页式虚拟存储管理中地址转换和缺页中断

《操作系统》实验报告三 页式虚拟存储管理中地址转换和缺页中断

实验项

名称
页式虚拟存储管理中地址转换和缺页中断
实验目的及要求1、深入了解页式存储管理如何实现地址转换。

2、进一步认识页式虚拟存储管理中如何处理缺页中断。

实验内容
编写程序完成页式虚拟存储管理中地址转换过程和模拟缺页中断的处理。

实验具体包括:首先对给定的地址进行地址转换工作,若发生缺页则先进行缺页中断处理,然后再进行地址转换;最后编写主函数对所做工作进行测试。

假定内存64KB,每个内存块1024字节;作业最大支持到64KB,系统中每个作业分得内存块4块。

实验步骤
注:可根据实际情况加页。

实验四 页式虚拟存储管理

实验四 页式虚拟存储管理

页式虚拟存储管理中地址转换和缺页中断一、实验目的模拟请求页式存储管理中硬件的地址转换和缺页中断,并用先进先出调度算法(FIFO)处理缺页中断。

二、实验内容1.内容:模拟请求页式存储管理中硬件的地址转换和缺页中断处理2.思想:装入新页置换旧页时,若旧页在执行中没有被修改过,则不必将该页重写磁盘。

因此,页表中增加是否修改过的标志,执行“存”指令和“写”指令时将对应的三、程序及截图程序主要代码:#include<iostream>#include<iomanip>#include<list>using namespace std;char useSign[12][5]={{'+'},{'-'},{'*'},{"存"},{"取"},{'-'},{"移位"},{'+'},{"存"},{"取"},{'+'},{"存"}};int PageAddress[12]={70,50,15,21,56,40,53,23,37,78,01,84};int PageNum[12]={0,1,2,3,0,6,4,5,1,2,4,6};int S_Station;int pPageNum[7];//页号pPageint pSign[7];int pStool[7];//页架号int pModify[7];//修改标志int pStation[7];//磁盘位置static int z=0;void Store(){for(int i=0;i<7;i++){if(i<4){pSign[i]=1;}elsepSign[i]=0;pPageNum[i]=i;pModify[i]=0;}int p1=1,p2=2,p3=3;for(i=0;i<7;i++){if(i<3){pStation[i]=p1;p1++;}elseif(i<6){pStation[i]=p2;p2++;}elsepStation[i]=p3;}pStool[0]=5;pStool[1]=8;pStool[2]=9;pStool[3]=1;}void CShow(){cout<<"操作";cout<<"页号";cout<<"页内地址";cout<<"标志";cout<<"绝对地址";cout<<"修改页号";cout<<"页架号";cout<<"绝对地址";cout<<endl;}void Find(){int m_Pagenum;int m_Station;int Y_Station;//绝对地址int m_Stool;cout<<"输入页号及页内地址查询操作:";cin>>m_Pagenum>>m_Station;CShow();int i,j=0;//string m_Modify;for(i=0;i<12;i++){if(PageAddress[i]==m_Station){break;}}Y_Station=pStool[m_Pagenum]*1024+m_Station;if(pSign[m_Pagenum]==1){if(strcpy(useSign[i],"存")!=0){pModify[m_Pagenum]=1;}}cout<<useSign[i]<<" ";cout<<m_Pagenum<<" ";cout<<m_Station<<" ";cout<<pSign[m_Pagenum]<<" ";if(Y_Station!=m_Station){cout<<Y_Station<<" ";cout<<" ";cout<<pStool[m_Pagenum]<<" ";cout<<Y_Station<<endl;}else{cout<<"*"<<m_Pagenum<<" ";for(j=z;j<7;j++){if(pSign[j]==1){z++;break;}}cout<<m_Pagenum<<"->"<<j<<" ";pStool[m_Pagenum]=pStool[j];pSign[j]=0;pStool[j]=0;cout<<pStool[m_Pagenum]<<" ";cout<<pStool[m_Pagenum]*1024+m_Station<<endl;}}int main(void){Store();char judge='Y';while(judge=='Y'){Find();cout<<"是否继续输入?Y = 是N=否"<<endl;cin>>judge;}return 0;}运行结果截图:五.心得体会在实验过程中,在调试的过程中遇到了一些问题,导致出现很多错误,在同学的帮助下,基本都解决了所有问题。

页式存储管理中地址转换

页式存储管理中地址转换

操作系统课程设计报告课程设计题目:页式存储管理中的地址变换作者所在系部:计算机科学与工程系作者所在专业:网络工程专业作者所在班级: B09521 作者姓名:作者学号: 200940521指导教师姓名:完成时间: 2011-12-12北华航天工业学院教务处制摘要页表的功能可以由一组专门的寄存器来实现。

一个页表项一个寄存器。

由于寄存器具有较高的访问速度,因而有利于提高地址变换的速度;但由于寄存器成本较高,且大多数现在计算机的页表又可能很大,是页表项的总数可达几千甚至几十万个,显然这些页表项不可能都用寄存器来实现,因此,页表大多驻留在内存中。

在系统中只设置页表寄存器PTR(Page-Table-Register),在其中存放页表在的内存的始址和页表的长度。

平时,进程为执行时,页表的始址和页表长度存放在本进程的PCB中。

当调度程序调度到某进程时,才将这两个数据装入页表寄存器中。

因此,在单处理机环境下,虽然系统中可以运行多个进程,但只需一个页表寄存器。

当进程要访问某个逻辑地址中的数据时,分页地址变换机构会自动地将有效地址(相对地址)分为页号页内地址两部分,再以页号为索引去检索页表。

查找操作由硬件执行。

在执行检索之前,先将页号与页表长度进行比较,如果页号大于或等于页表长度,则表示本次所访问的地址已超越进程的地址空间。

于是,这一错误将被系统发现并产生一地址越界中断。

若未出现越界错误,则将页表始址与页号和页表项长度的乘积相加,便得到该表项在页表中的位置,于是可从中得到该页的物理块号,将之装入物理地址寄存器中。

与此同时,再将有效地址寄存器中的页内地址送入物理地址寄存器的块内地址字段中。

这样便完成了从逻辑地址到物理地址的变换。

在内存的管理的分页管理中,进程的存放是分为若干页的,这些可能存放在连续的内存中,也可能存放在不联系的内存中。

进程所分的页的大小与内存中块的大小相同。

在页表中存放着页与内存块的对应关系,调度进程时要先访问页表,将所需的页调入内存才能执行。

页式存储管理模拟

页式存储管理模拟

实验内容:此实验模拟页式虚拟存储管理中硬件的地址转换和采用先进先出算法(FIFO)的缺页中断处理。

地址转换是由硬件完成的,实验中使用软件程序模拟地址转换过程,模拟地址转换的流程图如图1所示(模拟实验中假定主存64KB,每个主存块1024字节,即n=10,m=16,物理地址中块号6位,块内地址10位;作业最大64KB,即m=16,逻辑地址中页号6位,页内地址10位)。

在模拟实验中页表格式如图2所示。

实验原理:页表用数组模拟,在模拟实验中,页表数据结构定义为:define n 32 /*模拟实验中假定的页表长度*/struct{int lnumber; /*页号*/int flag; /*表示该页是否在主存,“1”表示在主存,“0”表示不在主存*/int pnumber; /*该页所在主存块的块号*/int write; /*该页是否被修改过,“1”表示修改过,“0”表示没有修改过*/int dnumber /*该页存放在磁盘上的位置,即磁盘快号*/}page[n]; /*页表定义*/本实验系统采用页面预置的方法分配主存空间时将前几页调入主存,假定系统中每个作业分得主存块m(m=4)块,则将第0~m-1页装入主存。

因为是模拟硬件工作,所以模拟实验中如果访问的页不在主存时,则输出该页页号,表示硬件产生缺页中断,然后直接转去缺页中断处理。

模拟实验中,由于采用页面预置方法,在给定的主存块中一定无空闲块,只能淘汰已在主存的一页。

模拟实验中,没有启动磁盘的工作,淘汰的页需要写回磁盘时,用输出页号表示,调入新的一页时,将该页在页表中的存在标志置为“1”,输出页号表示将该页调入主存。

模拟实验中使用先进先出调度算法。

可以把在主存储器的页的页号按进入主存的先后次序排成队列,每次总是调出队首的页,当装入一个新页后,把新页的页号排入队尾。

模拟实验中,用一个数组存放页号的队列。

假定分配给作业的主存块数为m,数组可由m个元素组成,p[0],p[1]…….p[m-1],队首指针head和队尾指针tail,当装入一个新的页时,将其页号存入数组:tail=(tail+1)%m;p[tail]=新装入页的页号;当选择淘汰的页时,淘汰页的页号=p[head];head=(head+1)%m;模拟实验中,采用页面预置的方法,页号队列的长度总是m,tail等于(head+1)%m。

模拟分页式存储管理中硬件的地址转换和缺页中断2

模拟分页式存储管理中硬件的地址转换和缺页中断2

模拟分页式存储管理中硬件的地址转换和产生缺页中断分页式虚拟存储系统是把作业信息的副本存放在磁盘上,当作业被选中时,可把作业的开始几页先装入主存且启动执行。

为此,在为作业建立页表时,应说明哪些页已在主存,哪些页尚未装入主存。

作业执行时,指令中的逻辑地址指出了参加运算的操作存放的页号和单元号,硬件的地址转换机构按页号查页表,若该页对应标志为“1”,则表示该页已在主存,这时根据关系式“绝对地址=块号×块长+单元号”计算出欲访问的主存单元地址。

如果块长为2 的幂次,则可把块号作为高地址部分,把单元号作为低地址部分,两者拼接而成绝对地址。

若访问的页对应标志为“0”,则表示该页不在主存,这时硬件发“缺页中断”信号,有操作系统按该页在磁盘上的位置,把该页信息从磁盘读出装入主存后再重新执行这条指令。

设计一个“地址转换”程序来模拟硬件的地址转换工作。

当访问的页在主存时,则形成绝对地址,但不去模拟指令的执行,而用输出转换后的地址来代替一条指令的执行。

当访问的页不在主存时,则输出“* 该页页号”,表示产生了一次缺页中断。

①定义相关数据结构如下typedef struct{int address; //进程的逻辑地址int meaddress; //进程的物理地址int page; //进程所在页号int add; //进程的位移量}arccell,AdjMatrix[MAX];typedef struct{char vex[MAX]; //进程名AdjMatrix arcs; //指向进程地址的数组int vexnum; //进程总数}Pro;typedef struct{int page; //页号int block; //块号int status; //该页是否在内存的状态位}pa_cell,pa_matrix[MAX];typedef struct{pa_matrix ptab; //指向页表相关信息的数组}pa_tab;②定义必要函数:void create_ptable(pa_tab & pa) //创建页表void exchange(Pro & P,pa_tab & pa) //地址转换函数③具体实验代码:#include<iostream.h>#define MAX 64#define eachpage 1024 // eachpage为每页(每块大小)int m; //m为简化后的页表行数typedef struct{int address; //进程的逻辑地址int meaddress; //进程的物理地址int page; //进程所在页号int add; //进程的位移量}arccell,AdjMatrix[MAX];typedef struct{char vex[MAX]; //进程名AdjMatrix arcs; //指向进程地址的数组int vexnum; //进程总数}Pro;void Create_pro(Pro & P)//创建进程{int i;cout<<"请输入进程总数:";cin>>P.vexnum;cout<<"请输入各进程名:";for(i=0;i<P.vexnum;i++)cin>>P.vex[i];cout<<"请输入各进程地址: ";for(i=0;i<P.vexnum;i++)cin>>P.arcs[i].address;for(i=0;i<P.vexnum;i++){P.arcs[i].page=P.arcs[i].address/eachpage;P.arcs[i].add=P.arcs[i].address%eachpage; // 逻辑地址=页号*页大小+位移量}}void print(Pro & P) //输出进程的相关信息{cout<<"各进程的页号页内地址为:"<<endl;for(int i=0;i<P.vexnum;i++)cout<<"进程名"<<P.vex[i]<<" 页号"<<P.arcs[i].page<<" 页内地址"<<P.arcs[i].add<<endl;cout<<endl;}//-------------页表的结构体-----------------typedef struct{int page; //页号int block; //块号int status; //该页是否在内存的状态位(为1表示在内存,为0表示不在内存)}pa_cell,pa_matrix[MAX];typedef struct{pa_matrix ptab; //指向页表相关信息的数组}pa_tab;void create_ptable(pa_tab & pa) //创建页表{int a,b,c;cin>>m; //输入页表行数cout<<"请输入页表相关信息:"<<endl;for(int i=0;i<m;i++){cin>>a>>b>>c;pa.ptab[i].page=a;pa.ptab[i].block=b;pa.ptab[i].status=c; //依次输入每行的页表信息}}//--------------地址转换函数-----------------void exchange(Pro & P,pa_tab & pa){for(int i=0;i<P.vexnum;i++)for(int j=0;j<m;j++)if(pa.ptab[j].page==P.arcs[i].page) //查询到页表里相对应的页号{if(pa.ptab[j].status==1) //若进程访问的页状态位为1,输出该进程物理地址{P.arcs[i].meaddress=pa.ptab[j].block*eachpage+P.arcs[i].address;//物理地址=块号*块大小+位移量cout<<"第"<<i+1<<"个进程物理地址为: "<<P.arcs[i].meaddress<<endl;}else //若访问的页状态位为0,表示该页不在主存,发生“缺页中断”信号cout<<"第"<<i+1<<"个进程地址转换发生缺页中断!"<<endl;}}void main(){Pro P;Create_pro(P); //创建进程cout<<endl;print(P);pa_tab pa;cout<<"由于页表信息太大,为了简化运算,请输入想输入的页表行数: ";create_ptable(pa); //创建页表exchange(P,pa); //调度地址转换函数}。

计算机操作系统实验_源码_模拟请求分页虚拟存储管理中的硬件地址变换过程[技巧]

计算机操作系统实验_源码_模拟请求分页虚拟存储管理中的硬件地址变换过程[技巧]
4. 进行缺页中断处理。中断返回后,重新执行该指令。 假定主存的每块长度为64个字节,现有一个具有8页的作业,系统为其分配了4个主存块(即 m=4),且最多分4块。其中第0页至第3页已经装入主存 。该作业的页表如表10—2所示。
地址变换算法框图如图10—1所示。
运行设计的地址变换程序 ,显示或打印运行结果。。因为只是模拟地址变换,并不
cin>>menu;
while(menu)
{
switch(menu)
{
case 1:
cout<<"请输入指令的逻辑地址:";
cin>>ins;
changeaddr(p,ins);
break;
case 2:
cout<<"谢谢使用,下次再见~"<<endl;
exit(0);
break;
default:
cout<<"输入有误,请重新输入~"<<endl;
cout<<"----------\t\t1.输入指令\t\t---------"<<endl;
cout<<"----------\t\t2.退出程序\t\t---------"<<endl;
cout<<"----------欢迎使用分页虚拟存储器硬件地址变换算法---------"<<endl;
cout<<endl<<"请输入您的选择:";
p[2].pno=2;p[2].flag=1;p[2].cno=9;p[2].modf=0;p[2].addr=013;

实验七 请求页式存储管理中常用页面置换算法模拟

实验七 请求页式存储管理中常用页面置换算法模拟

实验七请求页式存储管理中常用页面置换算法模拟实验学时:4实验类型:设计实验要求:必修一、实验目的(1)了解内存分页管理策略(2)掌握调页策略(3)掌握一般常用的调度算法(4)学会各种存储分配算法的实现方法。

(5)了解页面大小和内存实际容量对命中率的影响。

二、实验内容(1)采用页式分配存储方案,通过分别计算不同算法的命中率来比较算法的优劣,同时也考虑页面大小及内存实际容量对命中率的影响;(2)实现OPT 算法(最优置换算法) 、LRU 算法(Least Recently) 、FIFO 算法(First IN First Out)的模拟;(3)会使用某种编程语言。

三、实验原理分页存储管理将一个进程的逻辑地址空间分成若干大小相等的片,称为页面或页。

在进程运行过程中,若其所要访问的页面不在内存而需把它们调入内存,但内存已无空闲空间时,为了保证该进程能正常运行,系统必须从内存中调出一页程序或数据,送磁盘的对换区中。

但应将哪个页面调出,须根据一定的算法来确定。

通常,把选择换出页面的算法称为页面置换算法(Page_Replacement Algorithms)。

一个好的页面置换算法,应具有较低的页面更换频率。

从理论上讲,应将那些以后不再会访问的页面换出,或将那些在较长时间内不会再访问的页面调出。

1、最佳置换算法OPT(Optimal)它是由Belady于1966年提出的一种理论上的算法。

其所选择的被淘汰页面,将是以后永不使用的或许是在最长(未来)时间内不再被访问的页面。

采用最佳置换算法,通常可保证获得最低的缺页率。

但由于人目前还无法预知一个进程在内存的若干个页面中,哪一个页面是未来最长时间内不再被访问的,因而该算法是无法实现的,便可以利用此算法来评价其它算法。

2、先进先出(FIFO)页面置换算法这是最早出现的置换算法。

该算法总是淘汰最先进入内存的页面,即选择在内存中驻留时间最久的页面予以淘汰。

该算法实现简单只需把一个进程已调入内存的页面,按先后次序链接成一个队列,并设置一个指针,称为替换指针,使它总是指向最老的页面。

操作系统实验请求分页存储管理模拟实验

操作系统实验请求分页存储管理模拟实验

实验四请求分页存储管理模拟实验一:实验目的通过对页面、页表、地址转换和页面置换过程的模拟,加深对请求分页存储管理系统的原理和实现技术的理解;二:实验内容假设每个页面可以存放10条指令,分配给进程的存储块数为4;用C语言或Pascal语言模拟一进程的执行过程;设该进程共有320条指令,地址空间为32个页面,运行前所有页面均没有调入内存;模拟运行时,如果所访问的指令已经在内存,则显示其物理地址,并转下一条指令;如果所访问的指令还未装入内存,则发生缺页,此时需要记录缺页产生次数,并将相应页面调入内存,如果4个内存块已满,则需要进行页面置换;最后显示其物理地址,并转下一条指令;在所有指令执行完毕后,显示进程运行过程中的缺页次数和缺页率;页面置换算法:分别采用OPT、FIFO、LRU三种算法;进程中的指令访问次序按如下原则生成:50%的指令是顺序执行的;25%的指令是均匀分布在低地址部分;25%的指令是均匀分布在高地址部分;三:实验类别分页存储管理四:实验类型模拟实验五:主要仪器计算机六:结果OPT:LRU: FIFO:七:程序include<>include<>include<>define blocknum 4agenum=-1;blocki.accessed=0;m=0;}}int pageExistint curpageagenum == curpagereturn i; agenum==-1return i; ccessed > blockpos.accessedpos = i; agenum = -1{printf" %02d ",blocki.pagenum;printf"%p |",&blocki.pagenum;}}printf"\n";}void randamagenum = curpage; agenum= numj/10{blockk.accessed = 1000;} ccessed = j;break;}}}position = findReplace;agenum = curpage;agenum = curpage; agenum = curpage;display;n++; ccessed = -1;ccessed++;}}printf"缺页次数:%d\n",n;printf"缺页率:%f%%\n",n/100;}void FIFO{int n=0;agenum=curpage; agenum = curpage; //将此页面调入内存n++;display;}}}printf"缺页次数:%d\n",n;printf"缺页率:%f%%\n",n/100;}void main{int choice;printf"请求分页存储管理模拟系统\n";randam;printf"此进程的页面调用序列如下\n";pagestring;whilechoice = 4{printf"1:OPT 2:LRU 3:FIFO 4:退出\n";printf"请选择一种页面置换算法:";scanf"%d",&choice;init;switchchoice{case 1:printf"最佳置换算法OPT:\n";printf"页面号物理地址页面号物理地址页面号物理地址页面号物理地址\n";OPT;break;case 2:printf"最近最久未使用置换算法LRU:\n";printf"页面号物理地址页面号物理地址页面号物理地址页面号物理地址\n";LRU;break;case 3:printf"先进先出置换算法FIFO:\n";printf"页面号物理地址页面号物理地址页面号物理地址页面号物理地址\n";FIFO;break;}}}。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

模拟请求分页虚拟存储管理中的硬件地址变换过程
提示
(1)
请求分页虚拟存储管理技术是把作业地址空间的全部信息存放在磁盘上.当作业被选中运行时,,先把作业的开始几页装入主存并启动运行.为此在为作业建立页表时,应说明哪些页已在主存,哪些页不在主存.页表的格式如表1-1所示,其中,”标志”表示对应页是否已经装入主存:
“1”表示对应页已经装入主存;
“0”表示对应页未装入主存;
“主存快号”表示该页对应的主存快号;
“修改位”指示该页调入主存后是否修改过的标志.
“外存地址”指示该页所在的外存地址.
自己设计一个主存分块表.
(2)作业执行时,指令中的逻辑地址指出参加运算的操作数(或指令)地址中的页号和页内偏移量.硬件地址转换机构按页号查页表.
若该页的标志为1 ,则表示该页已在主存,从而找到该页对应的主存块号.
根据关系式:
绝对地址=块号*块的长度+页内偏移量
计算出欲访问的主存地址.由于页号为2的整次幂,所以只要将块号与页内偏移量相拼接,放入主存地址寄存器即可.按照该地址取指令或取操作数,完成指定的操作.
(3)设计一个”地址变换”程序,模拟硬件地址变化过程.当访问的页在主存时,则形成绝对地址后,不去模拟指令的执行,而是输出被转换的地址.当访问的页不在主存时,输出”该页不在主存,产生缺页中断”,以表示产生一次缺页中断.
(4)进行缺页中断处理.中断返回后,重新执行该指令.
假定主存的每块长度为64个字节,现有一个具有8页的作业,系统为其分配了4个主存块(即m=4),且最多分4块.其中第0页至第3页已经装入主存.该作业的页表如表10—2所示.
地址变换算法框图如图10—1所示.
运行设计的地址变换程序,显示或打印运行结果..因为只是模拟地址变换,并不模拟指令的执行,故不考虑上述指令的操作结果.
表10-1 页表
表10-2 页表1。

相关文档
最新文档