页式虚拟存储器管理中地址转换和缺页中断
虚拟存储器的基本原理
虚拟存储器的基本原理虚拟存储器是一种计算机系统的组成部分,它扩展了计算机的主存储器,使得计算机可以同时执行更多的程序,提高了计算机的性能和效率。
虚拟存储器的基本原理包括内存管理、地址转换、页面置换和磁盘交换等。
首先,虚拟存储器的内存管理是通过将主存划分成固定大小的块,称为页(Page),与此同时,将磁盘划分成与页大小相等的块,称为页框(Page Frame)。
当一个程序被加载到内存时,将会依次将程序的页放入内存的页框中。
这种将程序划分为页的方式称为分页管理。
虚拟存储器的核心概念是虚拟地址和物理地址的转换。
每个进程都有自己的虚拟地址空间,虚拟地址是由进程所见到的地址,而不是物理内存的地址。
虚拟地址由两部分组成,即页号和页内偏移。
页号表示进程中的某个页面,页内偏移表示页面中的具体位置。
虚拟地址被通过一种页表机制转换为物理地址。
页面置换是虚拟存储器中重要的一环。
由于程序的页可能无法一次加载到内存中,因此当一个程序在执行过程中需要访问一个尚未调入内存的页面时,就会发生缺页中断(Page Fault)。
操作系统会根据缺页中断处理程序来选择进行页面置换。
常用的页面置换算法有最佳置换算法(OPT)、先进先出置换算法(FIFO)、最近最久未使用置换算法(LRU)等。
磁盘交换是虚拟存储器中的重要机制。
当物理内存不足以容纳所有的进程或者进程所需的数据时,操作系统会将一部分进程或者数据从内存交换到磁盘上,以释放物理内存空间给其他进程使用。
这种将页面从内存交换到磁盘的过程称为页面换出(Page Out),相反的过程称为页面换入(Page In)。
通过磁盘交换,计算机可以在有限的物理内存下运行更多的任务。
虚拟存储器的使用带来了诸多优势。
首先,它能够扩展主存的容量,使得计算机可以执行更多的程序。
其次,虚拟存储器可以提高内存的利用率,避免内存浪费。
同时,它允许多个进程共享同一份代码,减少内存占用。
另外,虚拟存储器还可以实现对进程的保护和隔离,使得不同的进程在执行过程中不会相互干扰。
操作系统实验报告-页式虚拟存储管理中地址转换和缺页中断
操作系统实验报告-页式虚拟存储管理中地址转换和缺页中断实验四页式虚拟存储管理中地址转换和缺页中断一.实验目的(1)深入了解存储管理如何实现地址转换。
(2)进一步认识页式虚拟存储管理中如何处理缺页中断。
二.实验内容编写程序完成页式虚拟存储管理中地址转换过程和模拟缺页中断的处理。
三.实验原理页式存储管理把内存分割成大小相等位置固定的若干区域,叫内存页面,内存的分配以“页”为单位,一个程序可以占用不连续的页面,逻辑页面的大小和内存页面的大小相同,内外存的交换也以页为单位进行,页面交换时,先查询快表,若快表中找不到所需页面再去查询页表,若页表中仍未找到说明发生了缺页中断,需先将所需页面调入内存再进行存取。
四.实验部分源程序#define size 1024//定义块的大小,本次模拟设为1024个字节。
#include "stdio.h"#include "string.h"#includestruct plist{int number; //页号int flag; //标志,如为1表示该页已调入主存,如为0则还没调入。
int block; //主存块号,表示该页在主存中的位置。
int modify; //修改标志,如在主存中修改过该页的内容则设为1,反之设为0int location; //在磁盘上的位置};//模拟之前初始化一个页表。
struct plist p1[7]={{0,1,5,0,010},{1,1,8,0,012},{2,1,9,0,013},{3,1,1,0,021},{4,0,-1,0,022},{5,0,-1,0,023},{6, 0,-1,0,125}};//命令结构,包括操作符,页号,页内偏移地址。
struct ilist{char operation[10];int pagenumber;int address;};//在模拟之前初始化一个命令表,通过程序可以让其顺序执行。
虚拟存储器附答案
第五章虚拟存储器一、单项选择题1. 虚拟存储器的最大容量___。
*A. 为内外存容量之和 B. 由计算机的地址结构决定(((实际容量C. 是任意的D. 由作业的地址空间决定虚拟存储器是利用程序的局部性原理,一个作业在运行之前,没有必要全部装入内存,而只将当前要运行那部分页面或段装入便可以运行,其他部分放在外部存储器内,需要时再从外存调入内存中运行,首先它的容量必然受到外存容量的限制,其次寻址空间要受到计算机地址总线宽度限制。
最大容量(逻辑容量)收内外存容量之和决定,实际容量受地址结构决定。
2.在虚拟存储系统中,若进程在内存中占3块(开始时为空),采用先进先出页面淘汰算法,当执行访问页号序列为1﹑2﹑3﹑4﹑1﹑2﹑5﹑1﹑2﹑3﹑4﹑5﹑6时,将产生___次缺页中断。
(开始为空,内存中无页面,3块物理块一开始会发生三次缺页。
)A. 7B. 8C. 9D. 103. 实现虚拟存储器的目的是___.A.实现存储保护B.实现程序浮动C.扩充辅存容量D.扩充主存容量4. 作业在执行中发生了缺页中断,经操作系统处理后,应让其执行___指令.(书本158页,(2)最后一句话)A.被中断的前一条B.被中断的C.被中断的后一条D.启动时的第一条5.在请求分页存储管理中,若采用FIFO页面淘汰算法,则当分配的页面数增加时,缺页中断的次数________。
(在最后一题做完后再作答)答案错误选择:DA.减少 B. 增加 C. 无影响 D. 可能增加也可能减少6. 虚拟存储管理系统的基础是程序的________理论.A. 局部性B. 全局性C. 动态性D.虚拟性7. 下述_______页面淘汰算法会产生Belady现象.A. 先进先出*B. 最近最少使用C. 最近不经常使用D. 最佳二. 填空题1. 假设某程序的页面访问序列为1.2.3.4.5. 2. 3. 1. 2. 3. 4. 5. 1. 2. 3. 4且开始执行时主存中没有页面,则在分配给该程序的物理块数是3 且采用FIFO方式时缺页次数是____13____; 在分配给程序的物理块数是4且采用FIFO方式时,缺页次数是___14______; 在分配给程序的物理块数是3且采用LRU方式时,缺页次数是______14____。
页式虚拟存储器管理中地址转换和缺页中断心得体会
页式虚拟存储器管理中地址转换和缺页中断心得体会
在页式虚拟存储器管理中,地址转换和缺页中断是非常重要的概念和机制。
地址转换是指将逻辑地址(在进程中使用的地址)转换为物理地址(实际存在于主存储器中的地址)的过程。
它实现了虚拟内存的核心功能,使得每个进程可以感觉到它有独立的连续内存空间,而不受实际的物理内存大小限制。
地址转换通过页表来实现,页表中记录了虚拟页面与物理页面的对应关系。
当进程引用一个虚拟页面时,地址转换会根据页表将其映射到相应的物理地址上。
地址转换过程中还需要使用页表维护一些权限位来控制对页面的读写权限,保障内存的安全性。
缺页中断是在地址转换过程中发现虚拟页面不存在于主存中时触发的事件。
当进程引用一个未加载到内存的页面时,操作系统会产生一个缺页中断。
处理缺页中断的过程一般包括以下几个步骤:首先,操作系统会将控制权转移到中断处理程序,保存当前执行进程的上下文。
然后,操作系统会查找该虚拟页面是否在辅存(如硬盘)上,并将其加载到空闲的物理页面中。
最后,更新页表,将虚拟页面的记录指向新加载的物理页面。
完成这些步骤后,操作系统可以重新执行原进程,并使其继续访问该页面。
通过地址转换和缺页中断机制,页式虚拟存储器管理可以实现更高效的内存管理。
它允许系统在有限的物理内存的情况下运行多个进程,减少了进程间的内存冲突。
同时,通过将未使用的页面交换到辅存中,它也能够提供更大的可用内存空间,提高系统的整体性能。
以上是我对地址转换和缺页中断的心得体会,希望对您有所帮助。
模拟请求页式存储管理中硬件的地址转换和缺页中断处理
一.实验内容模拟请求页式存储管理中硬件的地址转换和缺页中断处理 二.实验原理装入新页置换旧页时,若旧页在执行中没有被修改过,则不必将该页重写磁盘。
因此,页表中增加是否修改过的标志,执行“存”指令和“写”指令时将对应的修改标志置成“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");}五,实验截图。
shujuku第4章习题课
第四章存储器管理1.选择题1.存储保护的工作通常由实现。
A.软件B.硬件C.文件D.硬件和软件配合2.段页式存储管理中,访问快表失败时,每访问一条指令或存取一个操作数都要次访问主存。
A.1 B.2 C.3 D.43.在虚拟存储系统中,若进程在内存中占3块(开始时为空)采用先进先出页面淘汰算法,当执行访问页号序列为1、2、3、4、1、2、5、1、2、3、4、5、6时,将产生次缺页中断。
A.7 B.8 C.9 D.104.采用段页式存储管理,在CPU中应设置寄存器。
A.段表和页表控制B.段表控制C.页表控制D.界地址5.采用段页式存储管理时,内存地址分成段号、段内页号和页内地址三部分,地址。
A.但仍是线性B.但仍是二维C.故是三维D.从而成为四维6.用户程序的逻辑地址可以不连续的存储管理方式是。
A.固定分区B.可变分区C.页式D.段页7.在可变分区分配方案中,为了实现主存的空间分配,采用进行管理。
A.页表B.段表C.段表+页表D.分区分配表+空闲区表8.动态重定位是在完成的。
A.作业执行前集中一次B.作业执行过程中集中一次C.作业执行过程中D.作业执行过程中由用户9.在以下的存储管理方案中,能扩充主存容量的是。
A.固定式分区分配B.可变式分区分配C.页式存储管理D.分页虚拟存储管理10.在可变分区分配方案中,在空闲区表中以空闲区长度按递减顺序排列适合于________算法。
A.最坏适应算法B.最先适应算法C.最优适应算法D.首次循环适应算法11.在页式虚拟存储管理中,为实现地址变换,应建立。
A.空闲区表B.分区分配表C.页表D.段表12.在下述存储管理方案中,管理方式要求作业的逻辑地址与占有主存的存储区域都是连续的。
A.段页式B.页式C.段式D.可变分区13.将主存空闲区按地址顺序从小到大登记在空闲区表中,每次分配时总是顺序查找空闲区表,此种分配算法称为分配算法。
A.最先适应B.最优适应C.最坏适应D.随机适应14.页式存储管理中,每次从主存中取指令或取操作数,当读快表失败时,要读次主存。
页式虚拟存储管理缺页中断的模拟系统的设计
燕山大学课程设计说明书课程设计名称:操作系统OS题目:页式存储管理中页面置换(淘汰)的模拟程序班级:计算机应用二班开发小组名称:CAMPUS课题负责人:课题组成员:姓名学号班级自评成绩课题开发日期:2011-1-10至2011-1-14一.概述1目的通过分析、设计和实现页式虚拟存储管理缺页中断的模拟系统,熟悉和掌握请求分页式存储管理的实现过程,重点掌握当请求页面不在内存而内存块已经全部被占用时的替换算法,熟悉常见替换算法的原理和实现过程,并利用替换算法的评价指标——缺页次数和缺页率,来对各种替换算法进行评价比较。
2.主要完成的任务自行输入实际页数、内存可用页面数、存取内存时间、存取快表时间及缺页中断时间,然后由用户随机输入各页面号,模拟系统自动运行出FIFO、LRU、OPT、LFU四种算法的缺页次数、缺页率、命中率、总存取时间、存取平均时间等结果。
3 使用的开发工具(1)使用系统:Windows7(2)使用语言:C++(3)开发工具:Visual C++ 6.04 解决的主要问题设计的结果程序能实现FIFO、OPT、LRU、LFU算法模拟页式存储管理缺页中断,主要能够处理以下的问题:(1) 用户能够输入给作业分配的内存块数;(2) 用户能够输入给定的页面,并计算发生缺页的次数以及缺页率;(3) 程序可由用户输入页面序列;(4)系统自动计算总存取时间及平均存取时间。
二使用的基本概念和原理1.概念FIFO即先进先出页面置换算法,该算法总是淘汰最先进入内存的页面,即选择在内存中驻留时间最久的页面予以淘汰。
LRU 即最近最久未使用页面置换算法,该算法选择最近最久未使用的页面予以淘汰。
OPT 即最佳值换算法,其选择淘汰的页面是在最长时间内不再被访问的页面。
LFU 即最近使用最少页面置换算法,其淘汰的页面是最近一段时间内使用最少的页面。
缺页中断存取页面时页面不在内存中需从外存调入的现象。
缺页次数即在存取页面过程中发生缺页中断的次数。
页式虚拟存储地址变换.
页式虚拟存储管理中地址转换和缺页中断的模拟
实验目的:
1.深入了解页式虚拟存储管理技术如何实现地址转换。
2.进一步认识页式虚拟存储管理中如何处理缺页中断。
实验要求:
编写程序模拟实现页式虚拟存储管理中的地址转换过程以及缺
页中断的处理过程。
实验指导:
1.请求分页中硬件地址变换过程。
(1)
自己设计一个主存分配表。
(2)对逻辑地址进行划分为页号和页内地址
(3)越界检查,若越界直接中断退出程序的执行。
(不越界情况下)检索页表分2种情况:其一,若该页在内存,则找到其对应的物理块号;合并块号和块内地址形成物理地址。
进行输出。
(4)其二,若该页不再内存,产生缺页中断,调用缺页中断子
程序执行缺页中断处理过程。
中断返回后重新执行被中断的指令。
2.采用某一种页面置换算法实现分页管理的缺页调度。
(1)当硬件发出缺页中断后转操作系统处理缺页中断。
查看主存分块表看有无可用空闲块。
若有则为进程分配一块。
若无空闲块,当采用一种页面置换算法(例如FIFO形成队列),其头部放在变量K 中淘汰最先进入主存的一页,若该页修改过,好要重新写回磁盘。
然后再把当前要访问的页装入该内存块,并修改页表和存储分块表。
数组P中各个元素为作业已在主存的页号。
假定作业最多可分配m块。
当淘汰一页时,总是淘汰P[K]所指页。
之后调整数组P:
P[K]=要装入的页;
K=(K+1)mod m;
流程图如下:。
模拟分页式虚拟存储管理中硬件的地址转换和缺页中断--选择页面调度算法处理缺页中断
操作系统实验二〔第一题〕一.实验内容模拟分页式虚拟存储管理中硬件的地址转换和缺页中断,以及选择页面调度算法处理缺页中断。
二.实验目的在电脑系统总,为了提高主存利用率,往往把辅助存储器作为主存储器的扩充,使多道运行的作业的全部逻辑地址空间综合可以超出主存的绝对地址空间。
用这种方法扩充的主存储区成为虚拟存储器。
三.实验题目模拟分页式存储管理中硬件的地址转换和产生缺页中断。
四.程序清单//// 操作实验二.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 : 定义控制台应用程序的入口点。
第11讲虚拟存储:缺页中断
寄存器 高速缓存
内存 磁盘
100 秒
磁带
容量 <1 KB 1 MB 64-512 MB 5-50 GB 20-100 GB
操作系统的存储抽象
■ 操作系统对存储的抽象:地址空间
P1
0
P2
0
0
P3
0
内核
0
m
缓存 MM 硬件U
232-1 232-1 232-1 232-1
M>>m
虚拟存储需求
■ 计算机系统时常出现内存空间不够用
虚拟存储的基本概念■思路ຫໍສະໝຸດ 将不常用的部分内存块暂存到外存
■ 原理: 装载程序时
只将当前指令执行需要的部分页面或段装入内存
指令执行中需要的指令或数据不在内存(称为缺页或缺段)时
处理器通知操作系统将相应的页面或段调入内存
操作系统将内存中暂时不用的页面或段保存到外存
■ 实现方式
虚拟页式存储 虚拟段式存储
虚拟存储的基本特征
覆盖技术示例
程序调用结构:190K
内存总共:110K
A 20K
B
C
50K
30K
A BC
D
E
30K
20K
F
40K
DE
F
另一种调用方法: (100K)
— A占一个分区:20K — B、E和F共用一个分区:50K
— C和D共用一个分区:30K
程序X的常驻区 A(20K)
覆盖区0 (50K)
覆盖区1 (40K)
虚拟存储概念
■ 虚拟存储的需求背景 ■ 覆盖技术 ■ 交换技术 ■ 局部性原理 ■ 虚拟存储概念 ■ 虚拟页式存储 ■ 缺页异常
缺页异常(缺页中断)的处理流程
缺页中断及页面置换算法
缺页中断及页⾯置换算法1. 缺页中断 在请求分页系统中,可以通过查询页表中的状态位来确定所要访问的页⾯是否存在于内存中。
每当所要访问的页⾯不在内存时,会产⽣⼀次缺页中断,此时操作系统会根据页表中的外存地址在外存中找到所缺的⼀页,将其调⼊内存。
缺页本⾝是⼀种中断,与⼀般的中断⼀样,需要经过4个处理步骤: 1. 保护CPU现场 2. 分析中断原因 3. 转⼊缺页中断处理程序进⾏处理 4. 恢复CPU现场,继续执⾏ 但是缺页中断时由于所要访问的页⾯不存在与内存时,有硬件所产⽣的⼀种特殊的中断,因此,与⼀般的中断存在区别: 1. 在指令执⾏期间产⽣和处理缺页中断信号 2. ⼀条指令在执⾏期间,可能产⽣多次缺页中断 3. 缺页中断返回时,执⾏产⽣中断的那⼀条指令,⽽⼀般的中断返回时,执⾏下⼀条指令2. 页⾯置换算法 进程运⾏过程中,如果发⽣缺页中断,⽽此时内存中有没有空闲的物理块是,为了能够把所缺的页⾯装⼊内存,系统必须从内存中选择⼀页调出到磁盘的对换区。
但此时应该把那个页⾯换出,则需要根据⼀定的页⾯置换算法(Page Replacement Algorithm)来确定。
2.1 最佳置换(Optimal, OPT)2.1.1 基本思想 置换以后不再被访问,或者在将来最迟才回被访问的页⾯,缺页中断率最低。
但是该算法需要依据以后各业的使⽤情况,⽽当⼀个进程还未运⾏完成是,很难估计哪⼀个页⾯是以后不再使⽤或在最长时间以后才会⽤到的页⾯。
所以该算法是不能实现的。
但该算法仍然有意义,作为很亮其他算法优劣的⼀个标准。
2.1.2 算例 采⽤固定分配局部置换的策略,嘉定系统为某进程在内存中分配了3个物理块,页⾯访问顺序为2、3、2、1、5、2、4、5、3、2、5、2。
假定系统未采⽤预调页策略,即未事先调⼊任何页⾯。
进程运⾏时,⼀次将2、3、1三个页⾯调⼊内存,发⽣3次缺页中断。
当第⼀次访问页⾯5时,产⽣第4次缺页中断,根据OPT算法,淘汰页⾯1,因为它在以后不会在使⽤了;第5次缺页中断时,淘汰页⾯2,因为它在5、3、2三个页⾯中,是在将来最迟才会被页⾯访问的页⾯。
缺页中断处理的一般步骤
缺页中断处理的一般步骤缺页中断是指在虚拟存储管理中,当程序访问的页面不在内存中时,会发生缺页中断,操作系统需要进行相应的处理。
下面是一般的缺页中断处理步骤:1.中断处理程序的保存和恢复当发生缺页中断时,处理器会自动保存当前的执行现场到内核堆栈中,并根据中断号跳转到对应的中断处理程序。
在开始处理缺页中断之前,中断处理程序需要保存当前进程的上下文,包括程序计数器、寄存器、程序状态字等。
保存的执行现场需要在处理完缺页中断后恢复给中断发生时的进程。
2.判断缺页类型在中断处理程序中,首先需要判断缺页类型。
常见的缺页类型包括无效引用、只读引用和写引用。
无效引用表示程序引用了一个无效的地址,通常会导致进程终止;只读引用表示程序引用的页面在内存中存在,但是权限不允许写入;写引用表示程序引用的页面在内存中不存在,需要进行页面调入。
3.选择牺牲页面当发生缺页中断时,由于物理内存空间有限,需要选择一个页面进行替换。
常见的页面替换算法有最近未使用(LRU)算法、先进先出(FIFO)算法、最不经常使用(LFU)算法等。
根据选择的算法,操作系统会找到最合适的牺牲页面。
4.页面调入根据之前选择的牺牲页面,操作系统需要将缺失的页面从辅存(例如磁盘)中调入到物理内存中。
如果缺页中断发生的页面已经被修改,则还需要将修改后的页面写回到辅存中。
5.更新页表在将页面调入物理内存后,操作系统需要更新页表,将页面与虚拟地址进行映射。
页表中会记录页面的物理地址、权限等信息。
更新页表可以通过修改控制寄存器的值,将缺页中断发生时的虚拟地址重新映射到新调入的页面。
6.恢复中断现场在完成页面调入和页表更新后,需要将之前保存的中断现场恢复给中断发生时的进程。
恢复的现场包括程序计数器、寄存器、程序状态字等。
恢复完成后,将中断处理程序的执行权交还给中断发生时的进程,继续执行。
以上是一般的缺页中断处理步骤。
需要注意的是,在实际的操作系统中,可能会有一些优化措施,例如预取页面、页面换入换出算法的优化等,以提高缺页中断处理的效率和性能。
操作系统练习题和答案
操作系统练习题和答案一、单项选择题1.现代操作系统的基本特征是( C )、资源共享和操作的异步性。
P13A. 多道程序设计B. 中断处理C. 程序并发执行D. 实现分时和实时处理2.在页式虚拟存储管理中,为实现地址变换,应建立(C )P157A.空闲区表B.分区分配表C.页表D.移动表3.SPOOL技术用于(C)A. 处理器管理B. 存储管理C. 设备管理D. 文件管理4.在可变分区分配方案中,在空闲区表中以空闲区长度按递减顺序排列适合于(A)P131A.最坏适应算法B.最先适应算法C.最优适应算法D.首次循环适应算法5.用户程序发出磁盘I/O请求后,系统的正确处理流程是(B)A.用户程序→系统调用处理程序→中断处理程序→设备驱动程序B.用户程序→系统调用处理程序→设备驱动程序→中断处理程序C.用户程序→设备驱动程序→系统调用处理程序→中断处理程序D.用户程序→设备驱动程序→中断处理程序→系统调用处理程序6.从磁盘读取数据的下列时间中,对系统效率影响最大的是( D)A.处理时间B.传输时间C.延迟时间D.寻道时间7.以下关于进程的并发执行描述正确的是(A )A.多个进程在某个时间段内轮流占用处理器执行B.多个进程在某个时刻同时占用处理器执行C.单处理器的系统也允许进程并发执行D.只有多处理器的系统才能允许进程并发执行8.造成某进程状态从就绪态转变成运行态的原因是(D)A.上次分配给该进程的处理器时间太短B.有更高优先级的进程要运行C.该进程需要更多的处理器时间运行D.该进程被进程调度程序选中9.以下存储管理技术中,可以实现虚拟存储器的技术是(D )A.单用户连续存储管理B.固定分区存储管理C.可变分区存储管理D.页式存储管理10.PCB全称(B )A.进程队列B.进程控制块C.进程状态D.进程对象11.计算机系统能及时处理由过程控制反馈的数据,并做出响应的操作系统是(B)A. 批处理操作系统B. 实时操作系统C. 分时操作系统D. 多处理机操作系统12.某进程所要求的一次打印输出结束,该进程被唤醒,其进程状态将从(B )A. 就绪状态到运行状态B. 等待状态到就绪状态C. 运行状态到等待状态D. 运行状态到就绪状态13.内存分配的最差适应算法的空闲区表是(A )A. 按大小递减顺序排列B. 按大小递增顺序排列C. 按地址由小到大排列D. 按地址由大到小排列14.以下说法错误的是(D )A.并发进程中与共享变量有关的程序段称为临界区B.并发进程中涉及到相同变量的程序段称为相关临界区C.临界区的引入主要是为了解决并发进程执行时出现与时间有关的错误D.所有并发进程都会产生与时间有关的错误15.一种既有利于短小作业又兼顾到长作业的作业调度算法是(B )A. 先来先服务B.最高响应比优先C.轮转D.均衡调度16.按文件的逻辑结构可将文件分成(C )A. 数据文件,命令文件,文本文件B. 命令文件,库文件,索引文件C. 顺序文件,链式文件,索引文件D. 输入文件,输出文件,随机文件17.计算机操作系统的功能是(D )A.把源程序代码转换为目标代码B.实现计算机用户之间的相互交流C.完成计算机硬件与软件之间的转换D.控制、管理计算机系统的资源和程序的执行18.多道程序设计是指(C )A. 在多台处理机上同时执行多道程序B. 在多台处理机上同一时刻执行多道程序C. 在一台处理机上同时执行多道程序D. 在一台处理机上同一时刻执行多道程序19.有关进程的下列叙述中正确的是(D )A. 进程是静态的文本B. 进程与程序是一一对应的C. 进程与作业是一一对应的D. 多个进程可以在单个CPU上同时执行20.在下列操作系统中,对响应时间要求最高的是( C )。
页式存储管理中地址转换
操作系统课程设计报告课程设计题目:页式存储管理中的地址变换作者所在系部:计算机科学与工程系作者所在专业:网络工程专业作者所在班级: B09521 作者姓名:作者学号: 200940521指导教师姓名:完成时间: 2011-12-12北华航天工业学院教务处制摘要页表的功能可以由一组专门的寄存器来实现。
一个页表项一个寄存器。
由于寄存器具有较高的访问速度,因而有利于提高地址变换的速度;但由于寄存器成本较高,且大多数现在计算机的页表又可能很大,是页表项的总数可达几千甚至几十万个,显然这些页表项不可能都用寄存器来实现,因此,页表大多驻留在内存中。
在系统中只设置页表寄存器PTR(Page-Table-Register),在其中存放页表在的内存的始址和页表的长度。
平时,进程为执行时,页表的始址和页表长度存放在本进程的PCB中。
当调度程序调度到某进程时,才将这两个数据装入页表寄存器中。
因此,在单处理机环境下,虽然系统中可以运行多个进程,但只需一个页表寄存器。
当进程要访问某个逻辑地址中的数据时,分页地址变换机构会自动地将有效地址(相对地址)分为页号页内地址两部分,再以页号为索引去检索页表。
查找操作由硬件执行。
在执行检索之前,先将页号与页表长度进行比较,如果页号大于或等于页表长度,则表示本次所访问的地址已超越进程的地址空间。
于是,这一错误将被系统发现并产生一地址越界中断。
若未出现越界错误,则将页表始址与页号和页表项长度的乘积相加,便得到该表项在页表中的位置,于是可从中得到该页的物理块号,将之装入物理地址寄存器中。
与此同时,再将有效地址寄存器中的页内地址送入物理地址寄存器的块内地址字段中。
这样便完成了从逻辑地址到物理地址的变换。
在内存的管理的分页管理中,进程的存放是分为若干页的,这些可能存放在连续的内存中,也可能存放在不联系的内存中。
进程所分的页的大小与内存中块的大小相同。
在页表中存放着页与内存块的对应关系,调度进程时要先访问页表,将所需的页调入内存才能执行。
缺页中断处理过程和页面置换算法
缺页中断处理过程和页面置换算法是计算机内存管理中的重要概念。
缺页中断是指当程序访问的页面不在内存中时,产生的一种异常。
页面置换算法则是用于在内存中找不到空闲页面时,选择哪个页面将其移出内存,以便为新的页面腾出空间。
下面将详细介绍缺页中断处理过程和页面置换算法的原理及实现。
一、缺页中断处理过程当程序访问一个页面时,首先会检查页表,页表是一个记录了虚拟页号与物理页号映射的数据结构。
如果所要访问的页面在内存中,则直接使用;如果页面不在内存中,则会产生缺页中断。
缺页中断处理过程如下:1. 当发生缺页中断时,CPU会停止当前正在执行的指令,并将控制权交给操作系统。
2. 操作系统收到缺页中断请求后,会查找该页面在磁盘中的位置,并读取该页面数据到内存中。
3. 在内存中找到空闲的页面,将读取的页面数据写入该空闲页面。
4. 更新页表,将虚拟页号与物理页号的映射关系记录到页表中。
5. 重新启动CPU,继续执行之前被中断的指令。
二、页面置换算法当内存中没有空闲页面时,需要选择一个页面将其移出内存,为新的页面腾出空间。
页面置换算法就是用来确定哪个页面被替换的规则。
下面介绍几种常见的页面置换算法:1. 先进先出(FIFO)算法:FIFO算法选择最早进入内存的页面进行替换。
实现时可以使用一个队列来记录每个页面进入内存的时间,当需要替换页面时,选择队列头部的页面进行替换。
FIFO算法简单易实现,但性能较差,可能导致常用页面被频繁替换。
2. 最近最少用(LRU)算法:LRU算法选择最久未使用的页面进行替换。
实现时需要维护一个使用频率的链表,当发生缺页中断时,选择链表头部的页面进行替换。
LRU算法理论上较优,但实现复杂,需要维护链表和访问计数。
3. 最佳置换(OPT)算法:OPT算法选择未来最长时间内不再被访问的页面进行替换。
这是一个理想化的算法,实际中无法实现,但可以用来评估其他算法的性能。
4. 时钟(CLOCK)算法:CLOCK算法结合了FIFO算法和LRU算法的特点,选择距离当前时间最近且最久未使用的页面进行替换。
模拟分页式存储管理中硬件的地址转换和缺页中断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); //调度地址转换函数}。
页式虚拟存储器管理中地址转换和缺页中断
实验题目:页式虚拟存储器管理中地址转换和缺页中断一、实验目的1、深入了解页式存储管理如何实现地址转换;2、进一步认识页式虚拟存储管理中如何实现缺页中断。
二、实验预备知识1、页式存储管理中地址转换的方法;2、页式虚拟存储的缺页中断处理方法。
三、实验内容编写程序完成页式虚拟存储管理中地址转换过程和模拟缺页中断的处理。
实验具体包括:首先对给定的地址进行地址转换工作,若发生缺页则先进行缺页中断处理,然后再进行地址转换;最后编写主函数对所做工作进行测试。
假定内存64KB,每个内存块1K(1024字节),作业最大支持到64KB,系统中每个作业分得内存块4块。
[提示]1、页式存储管理中地址转换过程:假设内存块的大小为2n字节,内存大小为2m字节和逻辑地址m位,则进行地址转换时,首先从逻辑地址中的高m-n位中取得页号,然后根据页号查页表,得到块号,并将块号放入物理地址的高m-n位,最后从逻辑地址中取得低n位放入物理地址的低n位就得到了物理地址,实验中使用软件模拟地址的转换过程,模拟地址转换的流程如下:2、缺页处理过程(1)根据当前执行指令中逻辑地址的页号查页表,判断该页是否在主存储器中,若该页标志为“0”,形成缺页中断。
中断装置通过交换PSW让操作系统的中断处理程序占用处理机;(2)操作系统处理缺页中断的方法就是查内存分配表,找一个空闲内存块;若无空闲块,查找表,选择一个已在内存的页面,把它暂时调出内存。
若在执行过程中该页被修改过,则需将该页信息写回磁盘,否则不必写回;(3)找出该页的磁盘位置,启动磁盘读出该页信息,把磁盘上读出的信息装入到第2步找到内存块,修改页表中该页的标志为“1”;(4)由于产生缺页中断的那条指令没有执行完,所以页面装入后应重新执行被中断的指令。
当重新执行该指令时,由于要访问的页面已在内存中,所以可正常执行。
2程序代码ia#include#define n64//页表的最大长度#define length4//系统为每个作业分配的主存块数struct{int lnumber;//页号int flag;//表示页是否在主存中,“1”表示在,“0”表示不在int pnumber;//该页所在主存块的块号int write;//该页是否被修改过,“1”表示修改过,“0“表示没有修改过int dnumber;//该页存放在磁盘上的位置,即磁盘块号}page[n];//页表定义int m;int page_length;//页表的实际长度int p[length];//用向量模拟主存int head;void page_interrupt(int);//缺页中断处理函数void command(unsigned,int);//命令处理函数void main(){int lnumber,pnumber,write,dnumber;unsigned laddress;int i;cout<<"输入页表的信息,创建页表(页号从0开始,若页号为-1,则结束输入)";cout<<"请输入页号和辅存地址:";cin>>lnumber>>dnumber;cin.ignore();i=0;while(lnumber!=-1){page[i].lnumber=lnumber;page[i].flag=0;page[i].write=0;page[i].dnumber=dnumber;i++;cout<<"请输入页号和辅存地址:";cin>>lnumber>>dnumber;}//预先将输入的页调入主存块中page_length=i;cout<<"输入主存块号(输入少于或者等于"<<i<<"个数据,若块号数为-1,则结束输入):";cin>>pnumber;cin.ignore();m=0;head=0;while(m<LENGTH&&PNUMBER!=-1){if(m<I){3page[m].pnumber=pnumber;page[m].flag=1;//调入主存后,标志为置1p[m]=m;//记录主存中的页号m++;}cout<<"输入主存块号(输入少于或者等于"<<i<<"个数据,若块号数为-1,则结束输入):";cin>>pnumber;cin.ignore();}//whilecout<<"输入指令性质(1-修改,0-不需要,其他-结束程序运行)和逻辑地址"<<"逻辑地址最大能支持2的16次方-1=65535。
虚拟存储管理中几种缺页中断算法(最佳置换法OPT)
虚拟存储管理中⼏种缺页中断算法(最佳置换法OPT)
缺页中断就是要访问的页不在主存,需要操作系统将其调⼊主存后再进⾏访问。
在进⾏内存访问时,若所访问的页已在主存,则称此次访问成功;
若所访问的页不在主存,则称此次访问失败,并产⽣缺页中断。
最佳置换法:
例如:假定系统为某进程分配了3个物理块,进程访问的页⾯的顺序为0,7,6,5,7,4,7,3,5,4,7,4,5,6,5,7,6,0,7,6.求在访问过程中缺页中断?
解答:进程运⾏时先将0,7,6三个页⾯装⼊内存,当访问到第5时,产⽣页⾯中断,根据最佳置换法,(将未来最长时间内不再访问的页⾯置换出去),页⾯0将在18次才被访问到,所以它是这三页中最久不被访问到的页⾯,所以被淘汰置换出来,将5换进去。
接着访问第7页,因为第7页是在内存中,所以不会产⽣缺页中断,以此类推……
采⽤最佳置换算法,产⽣了9次缺页中断,发⽣了6次页⾯置换。
【2023年】安徽省蚌埠市全国计算机等级考试数据库技术真题(含答案)
【2023年】安徽省蚌埠市全国计算机等级考试数据库技术真题(含答案) 学校:________ 班级:________ 姓名:________ 考号:________一、1.选择题(10题)1. 在虚拟页式存储管理中,由于所需页面不在内存,则发缺页中断,缺页中断属于______。
A.硬件中断B.时钟中断C.程序性中断D.I/O中断2. 计算机的技术性能指标主要是指A.所配备语言、操作系统、外围设备B.字长、运算速度、内/外存容量和CPU的主频C.显示器的分辨率、打印机的配置D.磁盘容量、内存容量3.下列哪一个是上述所有操作结束后栈中的元素列表(从底到顶)?A.ACB.AC.ABCED.ABCDE4. 分页式存储管理中,地址转换工作是由什么完成的?A.硬件B.地址转换程序C.用户程序D.装入程序5. 在所有的关系数据库上的操作,________是核心,是其他操作的前提。
A.插入B.删除C.修改D.查询6. 下面关于函数依赖的叙述中,不正确的是Ⅰ.若X→Y,X→Z,则X→YZⅠ.若XY→Z,则X→Z,Y→ZⅠ.若X→Y,WY→Z,则XW→ZⅠ.若X→Y,则XZ→YZA.ⅠB.ⅠC.Ⅰ和ⅠD.全部7. 不同的实体是根据什么来区分的?A.所代表的对象B.实体名字C.属性多少D.属性的不同8. 在数据库物理设计阶段的存储方法设计中,主要采用顺序存放、散列存放和( )三种方式。
A.链式存放B.线性存放C.聚簇存放D.索引存放9. 数据库的网状模型应满足的条件是A.允许一个以上的无双亲,也允许一个结点有多个双亲B.必须有两个以上的结点C.有且仅有一个结点无双亲,其余结点都只有一个双亲D.每个结点有且仅有一个双亲10.在下图所示的二叉树中查找关键码值502,需要进行多少次关键码值比较?A.1B.2C.3D.4二、填空题(10题)11.JPEG是一种___________图像压缩编码的国际标准。
12.Blowfish算法由两部分组成:密钥扩展和___________。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
实验题目:页式虚拟存储器管理中地址转换和缺页中断
一、实验目的
1、深入了解页式存储管理如何实现地址转换;
2、进一步认识页式虚拟存储管理中如何实现缺页中断。
二、实验预备知识
1、页式存储管理中地址转换的方法;
2、页式虚拟存储的缺页中断处理方法。
三、实验内容
编写程序完成页式虚拟存储管理中地址转换过程和模拟缺页中断的处理。
实验具体包括:首先对给定的地址进行地址转换工作,若发生缺页则先进行缺页中断处理,然后再进行地址转换;最后编写主函数对所做工作进行测试。
假定内存64KB,每个内存块1K(1024字节),作业最大支持到64KB,系统中每个作业分得内存块4块。
[提示]
1、页式存储管理中地址转换过程:假设内存块的大小为2n字节,内存大小为2m字节和逻辑地址
m位,则进行地址转换时,首先从逻辑地址中的高m-n位中取得页号,然后根据页号查页表,得到块号,并将块号放入物理地址的高m-n位,最后从逻辑地址中取得低n位放入物理地址的低n位就得到了物理地址,实验中使用软件模拟地址的转换过程,模拟地址转换的流程如下:
2、缺页处理过程
(1)根据当前执行指令中逻辑地址的页号查页表,判断该页是否在主存储器中,若该页标志为“0”,形成缺页中断。
中断装置通过交换PSW让操作系统的中断处理程序占用处理机;
(2)操作系统处理缺页中断的方法就是查内存分配表,找一个空闲内存块;若无空闲块,查找表,选择一个已在内存的页面,把它暂时调出内存。
若在执行过程中该页被修改过,则需将该页信息写回磁盘,否则不必写回;
(3)找出该页的磁盘位置,启动磁盘读出该页信息,把磁盘上读出的信息装入到第2步找到内存块,修改页表中该页的标志为“1”;
(4)由于产生缺页中断的那条指令没有执行完,所以页面装入后应重新执行被中断的指令。
当重新执行该指令时,由于要访问的页面已在内存中,所以可正常执行。
程序代码
ia #include
#define n 64 //页表的最大长度
#define length 4 //系统为每个作业分配的主存块数
struct{
int lnumber; //页号
int flag; //表示页是否在主存中,“1”表示在,“0”表示不在
int pnumber; //该页所在主存块的块号
int write; //该页是否被修改过,“1”表示修改过,“0“表示没有修改过
int dnumber; //该页存放在磁盘上的位置,即磁盘块号
}page[n]; //页表定义
int m;
int page_length; //页表的实际长度
int p[length]; //用向量模拟主存
int head;
void page_interrupt(int); //缺页中断处理函数
void command(unsigned, int); //命令处理函数
void main(){
int lnumber,pnumber,write,dnumber;
unsigned laddress;
int i;
cout<<"输入页表的信息,创建页表(页号从0开始,若页号为-1,则结束输入)"; cout<<"请输入页号和辅存地址:";
cin>>lnumber>>dnumber;
cin.ignore ();
i=0;
while(lnumber!=-1){
page[i].lnumber=lnumber;
page[i].flag=0;
page[i].write=0;
page[i].dnumber=dnumber;
i++;
cout<<"请输入页号和辅存地址:";
cin>>lnumber>>dnumber;
}
//预先将输入的页调入主存块中
page_length=i;
cout<<"输入主存块号(输入少于或者等于"<<i<<"个数据,若块号数为-1,则结束输入):"; cin>>pnumber;
cin.ignore ();
m=0;
head=0;
while(m<LENGTH&&PNUMBER!=-1){
if(m<I){
page[m].pnumber=pnumber;
page[m].flag=1;//调入主存后,标志为置1
p[m]=m; //记录主存中的页号
m++;
}
cout<<"输入主存块号(输入少于或者等于"<<i<<"个数据,若块号数为-1,则结束输入):"; cin>>pnumber;
cin.ignore ();
}//while
cout<<"输入指令性质(1-修改,0-不需要,其他-结束程序运行)和逻辑地址"
<<"逻辑地址最大能支持2的16次方-1=65535。
";
cout<<"输入指令性质:";
cin>>write;
cin.ignore ();
cout<<"输入逻辑地址:";
cin>>laddress;
cin.ignore ();
while(write=0||write=1){
command(laddress,write); //将输入的逻辑地址转换成物理地址
cout<<"输入指令性质:";
cin.ignore ();
if(write!=0&&write!=1) break;
cout<<"输入逻辑地址:";
cin>>laddress;
cin.ignore ();
}//while
}//main
//中断处理函数,采用先进现出的页面调度算法//
void page_interrupt(int lnumber){
int j;
cout<<"发生缺页中断"<<LNUMBER<<ENDL;
j=p[head];
p[head]=lnumber;
head=(head+1)%m;
if(page[j].write==1)
cout<<"将页"<<J<<" 写回磁盘第?<<page[j].dnumber<
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<<"该页不存在!";
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
</i<<"个数据,若块号数为-1,则结束输入):";
</i<<"个数据,若块号数为-1,则结束输入):";。