段页式虚拟存储管理

段页式虚拟存储管理
段页式虚拟存储管理

课程设计

题目段页式虚拟存储管理

学院计算机科学与技术

专业

班级

姓名

指导教师吴利军

2013年1月16日

课程设计任务书

学生姓名:

指导教师:吴利军工作单位:计算机科学与技术学院题目: 模拟设计段页式虚拟存储管理中地址转换

初始条件:

1.预备内容:阅读操作系统的内存管理章节内容,理解段页式存储管理的思想及相应的分配主存的过程。

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

要求完成的主要任务:(包括课程设计工作量及其技术要求,以及说明书撰写

等具体要求)

1.实现段页式存储管理中逻辑地址到物理地址的转换。能够处理以下的情形:

⑴能指定内存的大小,内存块的大小,进程的个数,每个进程的段数及段内页

的个数;

⑵能检查地址的合法性,如果合法进行转换,否则显示地址非法的原因。

2.设计报告内容应说明:

⑴需求分析;

⑵功能设计(数据结构及模块说明);

⑶开发平台及源程序的主要部分;

⑷测试用例,运行结果与运行情况分析;

⑸自我评价与总结:

i)你认为你完成的设计哪些地方做得比较好或比较出色;

ii)什么地方做得不太好,以后如何改正;

iii)从本设计得到的收获(在编写,调试,执行过程中的经验和教训);

iv)完成本题是否有其他方法(如果有,简要说明该方法);

时间安排:

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

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

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

(注意事项:严禁抄袭,一旦发现,一律按0分记)

指导教师签名:年月日

系主任(或责任教师)签名:年月日

一、需求分析:

页式管理基本原理:

各个进程的虚拟空间被划分成若干个长度相等的页。页长的划分和内存与外存之间的数据传输速度及内存大小等有关。一般每个页长大约为1----4K,经过页划分之后,进程的虚拟地址变为页号p与页内地址w所组成。

除了将进程的虚拟空间划分为大小相等的页之外,页式管理还把内存空间也按页的大小划分为片或者页面。这些页面为系统中的任一进程所共享。从而与分区管理不一样,分页管理时,用户进程在内存空间内除了在每个页面内地址连续之外,每个页面之间不再连续。第一是实现了内存中碎片的减少,因为任意碎片都会小于一个页面。第二是实现了由连续存储到非连续存储的这个飞跃,为在内存中局部地、动态地存储那些反复执行或即将执行的程序和数据段打下了基础。

怎样由页式虚拟地址转变为内存页面物理地址页式管理把页式虚拟地址与内存页面物理地址建立一一对应页表,并用相应的硬件地址变换机构,来解决离散地址变换问题。

静态页面管理:

静态页面管理方法是在作业或进程开始执行之前,把该作业或进程的程序段和数据全部装入内存的各个页面,并通过页表和硬件地址变换机构实现虚拟地址到内存物理地址的地址映射。

1、内存页面的分配与回收

静态分页管理的第一步是为要求内存的作业或进程分配足够的页面。系统依靠存储页面表、请求页面表以及页表来完成内存的分配。

(1)页表

最简单的页表由页号与页面号组成,页表在内存中占有一块固定的存储区。页表的大小有进程或作业的长度决定。

每个进程至少要拥有一个页表。

(2)请求表

用来确定作业或进程的虚拟空间的各页在内存中的实际对应位置。系统必须知道每个作业或进程的页表起始地址和长度,以进行内存的分配和地址变换,另外请求表中还应包括每个作业或进程所要求的页面数。

(3)存储页面

存储页面表也是整个系统一张,存储页面表指出内存各个页面是否已被分配出去,以及未被分配页面总数。存储页面表也有两种构成方法,一种是在内存中划分一块固定区域,每个单元的每个比特代表一个页面,如果该页面已被分配,则对应比特位置置1,否则置0。

另一种方法空闲页面链,不占内存空间。

2、分配算法

3、地址变换

在程序执行过程中,执行的是虚拟空间中的代码,代码中的指令是相对于虚拟空间的,需要到内存的实际空间中寻找对应的要执行的指令。

静态页式管理的缺陷:

虽然解决了分区管理时的碎片问题,但是由于静态页式管理要求进程或作业在执行前全部装入内存,如果可用页面数小于用户要求时,改作业或进程只好等待。而且,作业或进程的大小仍受内存可用空间的限制。

动态页式管理:

动态页式管理是在静态页式管理的基础上发展起来的。它分为请求页式管理和与调入页式管理(调入方式上)。

请求页式管理和预调入页式管理在作业或进程开始执行之前都不把作业或进程的程序段和数据段一次性的调入内存,而是只装入被认为是经常反复执行和调用的工作区部分。其他部分都在执行过程中动态的装入。

请求式页式管理:当需要执行某条指令或某些数据时而又发现他不在内存中时,从而发生缺页中断,系统将相应的页面调入内存。

预调入:系统对于那些在外存中的页进行调入顺序计算,估计出这些页中指令和数据的执行和被访问的顺序,并按此顺序将他们顺次调入和调出内存。

请求页式管理的地址变换与静态页式相同,也是通过页表查出相应的页面号,由页面号与页内相对地址相加而得到实际物理地址。由于只有进程或程序的部分存在内存中因此怎样发现这些不在内存中的虚页以及怎样处理这种情况是必须解决的两个基本问题。

怎样发现这些不在内存中的虚页:扩充页表的方法。

即与每个虚页号相对应,除了页面号之外,再增设该页是否在内存中的中断位以及该页在外存中的副本起始地址。

(1)采用何种方法将所缺的页调入内存。

(2)如果内存中没有空闲页面时,把调进来的页面放在什么地方。即采用什么策略淘汰已占据内存的页。还有就是如果内存中的也被淘汰,但该页被修改过,显然该页应当被重新写到外存加以保存。所以还要增加一项记录是否该页已经被改变。

常见的置换算法:

(1)随机淘汰

(2)轮转法和先进先出法

(3)最近最久未使用

内存保护:

页式管理提供两种方式的内存保护:一是:地址越界保护。二是:通过页表控制对内存信息的存取操作方式以提供保护。

地址越界保护:由地址变换机构中的控制存储器的值——页表长度和所要访问的虚地址相比较来完成。

存取控制保护的实现则是在页表中增加相应的保护位即可。

段式管理:

分区式管理和页式管理时的进程的地址空间结构都是线性的,这要求对源程序进行编译连接时,把源程序中的主程序、子程序、数据区等按线性空间的一维地址顺序排列起来。共享子程序和数据变得很困难,再者从链接的角度来看,分区管理和页式管理只能采用静态链接。

段式存储管理是基于为用户提供一个方便的灵活的程序设计环境而提出来的。段式管理的基本思想是:把程序按内容或过程(函数)关系分成段,每段都有自己的名字。一个用户进程或作业所包含的段对应于一个二维线性虚拟空间,也就是二维虚拟存储器。段式管理程序以段为单位分配内存,然后通过地址映射机构把段式虚拟地址转换成实际的内存物理地址。和页式管理一样,段式管理也采用只把那些经常访问的段驻留内存,而把那些在将来一段时间内不被访问的段放在外存,待需要时自动调入的方法实现二维虚拟存储器。

段式管理把一个进程的虚拟空间设计成二维结构,即段号s与段内相对地址w。与页式管理不一样的是,页式管理中,被划分的页号按顺序编号递增排列,属一维空间,而段式管

理中段号与段号之间无顺序关系。另外段的划分也不像页的划分那样具有相同的页长,段的长度是不固定的。每个段定义一组逻辑上完整的程序或数据。例如,一个进程中的程序和数据可划分为主程序段、子程序段、数据段与工作区段。

每个段是一个首地址为零的、连续的一维线性空间。根据需要段长可以动态的增长。对端式虚拟空间地址的访问包括两个部分:段名和段内地址。

段式管理中以端为单位分配内存,每段分配一个连续的内存区,由于各段长度不等,所以这些存储区的大小不一,而且统一进程所包含的各段之间不要求连续。

段式管理的内存分配与释放在作业或进程的执行过程中动态进行。首先,段式管理程序为一个准备进入内存准备执行的进程或作业分配部分内存,以作为该进程的工作区和放置即将执行的程序段。随着进程的执行,进程根据需要随时申请调入新段和释放老段。进程对于内存区的申请和释放可分为两种情况。一种是当进程要求调入某一段时,内存中有足够的空闲区满足该段的内存要求。另一种是内存中没有足够的空闲区。对于第一种情况,系统要用相应的表格或数据结构来管理内存空闲区,以便对用户进程或作业的有关程序段进行内存分配和回收。事实上,可以采用和动态分区式管理相同的空闲区管理方式。即把内存各空闲区按物理地址从低到高排列或按空闲区的大小从小到大或从大到小排列。与这几种空闲区自由链相对应,分区式管理时所用的几种分配算法:最先适应算法、最佳适应算法、最坏适应法都可以用来进行空闲区分配。当然分区式内存管理时用到的内存回收方法也可以用在段式管理中。

另一种内存管理的分配与回收方法是在内存中没有足够的空闲区满足调入段的内存时使用的。这时段式管理程序根据给定的置换算法淘汰内存中在今后一段时间内不再被CPU 访问的段,也就是淘汰那些访问率最低的段。不过任何一个段的长度都不允许超过内存的可用区长度。

除了段的初始分配之外,段的动态分配是在CPU所要访问的指令和数据不在内存时产生缺页中断的情况下发生的。因此段的淘汰或置换算法实际上是缺页中断处理过程的一部分。段式管理的地址变换:

由于段式管理只存放部分用户信息副本在内存,而大部分信息在外存中,这必然引起CPU访问内存时发成所访问的段不在内存中的情况,CPU如何感知所要访问的段不在内存中而启动中断处理程序呢还有,段式虚拟地址属于一个二维的虚拟空间。一个二维空间虚拟地址怎样变为一个一维的线性物理地址呢。

(1)段表

(2)段式管理程序在进行初始内存分配之前,首先根据用户要求的内存大小为一个作业或一个进程建立一个段表,以实现动态地址变换和缺页中断处理及存储保护等。段式管理是通过段表来进行内存管理的。

(3)段号与用户指定的段名一一对应,始址和长度分别表示该段在内存或外存的物理地址和实际长度。存取方式是用来对该段进行存取保护的。只有处理机状态字中的存取控制位与段表中的存取方式一致时才能访问该段。内外栏是指该段现在存储在外存还是内存中。如果如果该栏目指出所访问段在外存的话,则发生缺页中断。而访问位则是根据淘汰算法的需要而设的。

(4)

(5)动态地址变换

一般在内存中给出一块固定的区域放置段表。当某进程开始执行的时候,管理程序首先把该进程的段表始址放入段表地址寄存器。通过访问段表寄存器,管理程序得到该进程段表始址从而可以开始访问段表。然后由虚拟地址中的段号s为索引,查段表。若该段在内存中,

则判断其存取方式是否有错。如果存取方式正确,则从段表相应表目中查出该段在内存中的起始地址,并将其和段内相对地址w相加,从而得到实际内存地址。

如果该段不在内存,则产生缺页中断将CPU控制权交给内存分配程序。内存分配程序首先检查空闲区链,以找到足够长度的空闲区来装入所需要的段。如果可用的空闲区总数小于所要求的段长,检查段表中的访问位,以淘汰那些访问概率低的段并将所需要的段调入。段页式:

页式管理和段式管理各有特长。段式管理为用户提供了一个二维的虚拟空间地址,反映了程序的逻辑结构有利于段的动态增长以及共享和内存保护,方便了用户,而分页式管理则有效地克服了碎片问题,提高了存储器的利用率。段页式则是将段式管理与页式管理相结合,取长补短。段页式管理一般只用在大型系统中。

段页式管理的实现原理:

一个进程任然拥有一个自己的二维空间地址,这与段式管理相同。首先一个进程中所包含的具有独立逻辑功能的程序或数据仍被划分为段,并有各自段号s。这反映了段式管理的特征。其次,对于段s中的程序或数据,则按照一定的大小将其划分为不同的页。和页式系统一样最后不足一页的部分仍然占一页。这反映了页式特征。从而段页式管理时的进程的虚拟空间中的虚拟地址由三部分组成即段号s,页号p和页内相对地址d,如图1所示:

图1

程序员可见的仍是段号s和段内相对地址w。P和d是由地址变换机构把w高几位解释成页号p,以及把剩下的低位解释成页内地址d。

由于虚拟空间的最小单位是页而不是段,从而内存可用区也就被划分为若干个大小相等的页面,且每段所拥有的程序和数据在内存中可以分开存放。分段的大小也不受内存可用区的限制。

段表和页表:

为了实现段页式管理,系统必须为每个作业或进程建立一张段表,管理内存分配与释放、缺段处理、存储保护和地址变换等。另外,由于一个段又被划分成了若干页,每个段又必须建立一张页表,把段中虚页转变成内存中的实际页面。显然与页式管理相同,页表中也要有实现缺页中断处理和页面保护等功能的表项。另外由于在段页式管理中,页表不再是属于进程而是属于某个段,因此段表中应该有指出该段所对应的页表始址和页表长度。

动态地址变换过程:

在一般使用段页式存储管理的计算机系统中,都在内存中辟出一块固定的区域存放进程的段表和页表。因此,在段页式管理系统中,要对内存中指令或数据进行一次存取的话,至少需要访问3次以上的内存。

二、功能设计

定义一个数组来表示一个内存空间。只做一个数组来管理内存空间,应当能够显示当前可用的内存,管理内存的表应当占据空间最小,由于是段页式管理,所以将内存划分为页,最理想的方式是用一位来表示内存的一个页面,当内存页面在使用时,将其置为1,不使用时,

将其置为0,这样内存管理所占用的空间才是最小。由于使用位来管理内存空间页面在程序的处理方面比较麻烦,所以采用char类型来表示内存空间的一个页面,char类型只占一个字节,并且内存空间的大小是定长的。所以可用内存表即为:

char m[memMax];

egmentFlag==0){

[i].segNum=segNum;

[i].length=segLen; egmentFlag=1;

return i;

}

}

printf("段表没有可以填写的段!");

return -1; ageFlag!=0){

n++;

if(n<1024-q)goto L1;

printf("没有可用的连续页表空间!");

}

}

for(t=0;t

}

return n;

}

void single(){

tartAddr=&[n]; ageNum=j-n+1;

[j].MemPgnum=findIdlePage();tartAddr=&[n]; ageNum=j-n+1;

emPgnum=findIdlePage();ageNum,[i].MemPgnum);

}*/

}

void mapping(){

int s,p,d;int i;

printf("请输入段号,页号,页内地址:s,p,d\n");

scanf("%d,%d,%d",&s,&p,&d);

for(i=0;i<100;i++){

if[i].segNum==s){

if[i].length>p){

if(d

printf("输入的地址正确:\n");

int w=[i].startAddr[p].MemPgnum-1)*1024*pageLen+d;

printf("内存页面号:%d\n",[i].startAddr[p].MemPgnum-1));

printf("%dB\n",w);

return;

}else{

printf("偏移地址偏出该页!\n");return;

}

}else{

printf("没有该页!\n");return;

}

}

if((i+1)>=100)printf("没有该段!\n");

}

}

void swch(){

int flag=1,f=0;

while(flag){

int n;

printf("0------------退出---------------0\n");

printf("1---------程序段处理------------1\n");

printf("2----------地址转换-------------2\n");

printf("3------显示段页内存映射表-------3\n");

getchar();

scanf("%d",&n);

switch(n){

case 0:flag=0;break;

case 1:single();f=1;break;

case 2:if(f!=0)mapping();else{printf("请先输入程序段!\n");}break;

case 3:if(f!=0)prspm();else{printf("请先输入程序段!\n");};break;

default:printf("输入有误!!\n");

}

}

}

void prspm(){

printf(" 段页内存映射表 \n");

printf("---------------------------------\n");

for(int i=0;i<200;i++){

if[i].segmentFlag!=0){

printf("%d",[i].segNum); ength); ength;j++){

/*页号****页面号*/

printf("

|____%d____%d\n",[i].startAddr[j].pageNum,[i].startAddr[j].MemPgnum);

}

printf("\n");

}

}

printf("---------------------------------\n");

}

int main(){

printf("现在进行初始化设置。。。\n");

printf("请指定内存的大小(MB):");

scanf("%d",&memLen);

printf("请设置页的大小(KB):"); egmentFlag=0;

}

for(int i=0;i<1024;i++){

[i].pageFlag=0;

}

swch();

/*for(int i=0;i<1024;i++){

if[i].pageFlag!=0){

printf("%d",i);

printf("页号:%d ",[i].pageNum);

printf("页面号:%d\n",[i].MemPgnum);

}

}*/

/*for(int i=0;i

if(m[i]!=0)printf("内存:%d:%d\n",i,m[i]);

}*/

system("pause");

return 0;

}

四、运行结果与运行情况分析:

初始界面如下图:

1、可以指定内存大小,页面大小一般页面大小为1--4KB左右,然后根据需要输入选项。选择选项1,就会提示需要输入的段数,然后依次输入段长。输入完成之后就会再次提示所需的操作。

但是一开始只能选择0,或者1。因为没有程序段就没有地址转换,同样也没有段页内存映射表。如果一开始就输入了2或者3,就会提示重新输入。

2、选择选项2,就会提示要转换的段页表,按要求输入之后,就会计算出内存实际地址,如果出错就会提示相应的出错原因。

当输入不存在的段时,程序就会提示不存在该段。并重新返回菜单页面,如上图。

当输入段内不存在的页时,就会有提示说没有该页,再次转入菜单页面,如上图。

当输入某一段某页的偏移地址超出了页的范围时,就会有提示说偏移地址偏出该页,并重新返回菜单页面,如上图。

3、当选择选项3时,该程序就会打印段页内存映射表,这个段页内存映射是采用树结构来显示的,如下图。

第一列的数字代表段号,段号后面的数字表示该段有多少页。段的下面的第一列数字表示该段的页表的页号,而页号后面的数字代表内存的页面号。

五、自我评价与总结:

总体来说我觉得比较优秀出彩的地方是段表和页表的设计方面,我觉得段表和页表的设计是在给定条件下最完美的实现。采用划分固定的区域来设置段页表,是一个很好的方法,因为如果设置链表的话,虽然会节省一部分的内存空间,但是采用链表的话,就会产生一个很明显的链表的固有缺陷,就是不能够随机存取,存取速度就会大打折扣,对于操作系统来说是致命的缺陷。但是采用结构体数组的话,这个问题就不会存在了,但是会有数组上的固有缺陷,就是数组的大小固定,没有办法动态的增加,这样就可能会浪费一定的内存空间。在权衡取舍的时候,还是决定使用结构体数组来表示段表和页表还有内存空间,这样可以获得较高的访问速度,这对操作系统来说是相当重要的。所以选择了固定长度的段表和页表。

还有一点就是在页表的设计时候采用的一种方法,段页式管理中的页表要求每一个段都有一个长度由段表指定的顺序存储的页表,再设计的时候需要认真考虑,由于每个页表的长度可变,一开始想到的是采用链表,但是链表不是顺序存储的,所以不行。但是数组长度又不可变。最终方案还是采用数组,只要活用指针就能够达到像是变长数组的效果,并且方法相当的简单。首先先设置一个总的页表,用来装载每一段的页表,在对每段进行页表的设计的时候,在总页表中寻找连续的空闲的页表空间,将这个页表分配之后,返回这个页表的数组的首地址,保存在段表的始址这个变量中。这样就相当于每个页表都是变长的,只是总页表是定长的,正好符合要求,我觉得这样是一个很好的设计。

最后在最后的输出上,我觉得我的设计方案很不错,就是有一个树状结构的段页内存映射图。最后的结果清晰直观,效果很不错。

不好的地方:内存管理方面不够节约,在内存管理的时候我采用的是使用char数组,使用一个字符来管理一个页面是否是在使用中,即用8bit来表示一个页面,但是实际上还是太过浪费了,可以使用1bit来表示一个页面,这样表示内存空间的那块区域就会缩小8倍。在改进的时候可以还是可以是char数组,不过可以使用一位来表示一个页面,但以后的操作就不是赋值操作,而是位操作,进行与、或、异或和移位等运算。这是一个缺陷,在内存很大的时候,内存的管理数组也将变得巨大。8倍的差距将会大大缩小内存管理的区域大小。

没有实现页面和段的调度置换算法,当段表填满的时候怎样进行段的置换,当页表填满的时候怎样进行页表的置换,这是一个很复杂,同时这也不是很容易进行模拟,现在做的这个程序只能在你填满段表或页表的时候进行提醒说段表或页表已经填满。

还有一个缺陷就是指定内存大小,设计的时候要求指定内存大小,但是从一般现实来考虑,实际成活中的内存大小都是固定的,要模拟动态大小的内存空间,就必须使用链表来进行内存空间的管理,我觉得这是很不合适的,这样会有两种方案来模拟,一种是使用链表来

对内存进行映射,即每一个节点代表内存的每一个页面,但是这样不如使用数组迅速,而且这样的方法的内存开销也不一定比数组小,因为每一个节点都会增加一个指针变量。另一种是将内存使用链表串联起来,但是在模拟过程中实际上这是很难实现的,因为实际的内存空间并不是真正划分了的,而是模拟出来的,所以在实现过程中还是采用了char数组来表示内存管理,并不真正的模拟内存。所以只能先设置一个较大的内存管理空间,当指定内存的时候只用其中的一部分。虽然会浪费一定的内存空间,但是我觉得比链表法要好很多。

我的收获:这次我的收获是相当的多,段页式内存管理,首先为了搞懂什么是段页式内存管理,我不得不去翻书查找资料,我在翻课本的时候我发现,课本上段式内存管理讲了很多,页式管理也讲了不少,唯独段页式管理,只讲了一点,所以我为了搞明白段页式管理我不得不将什么是段式管理和什么是页式管理全部看了一遍,搞懂了他们才对什么是段页式管理有了初步的了解,明白了他们的机理,一切才开始变得轻松起来,然后才是编程,尤其是在页表的设计上,让我了解了指针的灵活应用,让我更加了解了链表和数组的优势,以及实际中的操作系统的内存管理。不但让我巩固了课本上的知识,还提高了我的动手能力,培养了我对操作系统的兴趣。这些都将在以后的学习中给我带来莫大的好处。

至于是否有其他方法,本人感觉应该是没有什么更好的实现了,最多就是修改段表和页表还有内存管理数组的数据结构,例如将段表设计成链表结构,或者页表设计成链表结构,但是总体来说思路是一样的,他们之间难度也不会相差太多。总体结构一样也不能够算作一种新的实现方案吧。

总之,通过这次课程设计学到了很多有用的东西,尤其是对操作系统的实现更加清楚明白,同时也提高了我的编程能力。是一次很好的实践。

本科生课程设计成绩评定表

、及格(60-69分)、60分以下为不及格

指导教师签名:

20 年月日

段式虚拟存储管理

学号: 课程设计 题目段页式虚拟存储管理 学院计算机科学与技术 专业 班级 姓名 指导教师吴利军 2013 年 1 月16 日

课程设计任务书 学生姓名: 指导教师:吴利军工作单位:计算机科学与技术学院题目: 模拟设计段页式虚拟存储管理中地址转换 初始条件: 1.预备内容:阅读操作系统的内存管理章节内容,理解段页式存储管理的思想及相应的分配主存的过程。 2.实践准备:掌握一种计算机高级语言的使用。 要求完成的主要任务:(包括课程设计工作量及其技术要求,以及说明书撰写 等具体要求) 1.实现段页式存储管理中逻辑地址到物理地址的转换。能够处理以下的情形: ⑴能指定内存的大小,内存块的大小,进程的个数,每个进程的段数及段内 页的个数; ⑵能检查地址的合法性,如果合法进行转换,否则显示地址非法的原因。 2.设计报告内容应说明: ⑴需求分析; ⑵功能设计(数据结构及模块说明); ⑶开发平台及源程序的主要部分; ⑷测试用例,运行结果与运行情况分析; ⑸自我评价与总结: i)你认为你完成的设计哪些地方做得比较好或比较出色; ii)什么地方做得不太好,以后如何改正; iii)从本设计得到的收获(在编写,调试,执行过程中的经验和教训); iv)完成本题是否有其他方法(如果有,简要说明该方法); 时间安排: 设计安排一周:周1、周2:完成程序分析及设计。 周2、周3:完成程序调试及测试。 周4、周5:验收、撰写课程设计报告。 (注意事项:严禁抄袭,一旦发现,一律按0分记) 指导教师签名:年月日 系主任(或责任教师)签名:年月日

一、需求分析: 页式管理基本原理: 各个进程的虚拟空间被划分成若干个长度相等的页。页长的划分和内存与外存之间的数据传输速度及内存大小等有关。一般每个页长大约为1----4K,经过页划分之后,进程的虚拟地址变为页号p与页内地址w所组成。 除了将进程的虚拟空间划分为大小相等的页之外,页式管理还把内存空间也按页的大小划分为片或者页面。这些页面为系统中的任一进程所共享。从而与分区管理不一样,分页管理时,用户进程在内存空间内除了在每个页面内地址连续之外,每个页面之间不再连续。第一是实现了内存中碎片的减少,因为任意碎片都会小于一个页面。第二是实现了由连续存储到非连续存储的这个飞跃,为在内存中局部地、动态地存储那些反复执行或即将执行的程序和数据段打下了基础。 怎样由页式虚拟地址转变为内存页面物理地址?页式管理把页式虚拟地址与内存页面物理地址建立一一对应页表,并用相应的硬件地址变换机构,来解决离散地址变换问题。 静态页面管理: 静态页面管理方法是在作业或进程开始执行之前,把该作业或进程的程序段和数据全部装入内存的各个页面,并通过页表和硬件地址变换机构实现虚拟地址到内存物理地址的地址映射。 1、内存页面的分配与回收 静态分页管理的第一步是为要求内存的作业或进程分配足够的页面。系统依靠存储页面表、请求页面表以及页表来完成内存的分配。 (1)页表 最简单的页表由页号与页面号组成,页表在内存中占有一块固定的存储区。页表的大小有进程或作业的长度决定。 每个进程至少要拥有一个页表。 (2)请求表 用来确定作业或进程的虚拟空间的各页在内存中的实际对应位置。系统必须知道每个作业或进程的页表起始地址和长度,以进行内存的分配和地址变换,另外请求表中还应包括每个作业或进程所要求的页面数。 (3)存储页面 存储页面表也是整个系统一张,存储页面表指出内存各个页面是否已被分配出去,以及未被分配页面总数。存储页面表也有两种构成方法,一种是在内存中划分一块固定区域,每个单元的每个比特代表一个页面,如果该页面已被分配,则对应比特位置置1,否则置0。 另一种方法空闲页面链,不占内存空间。 2、分配算法 3、地址变换 在程序执行过程中,执行的是虚拟空间中的代码,代码中的指令是相对于虚拟空间的,需要到内存的实际空间中寻找对应的要执行的指令。 静态页式管理的缺陷: 虽然解决了分区管理时的碎片问题,但是由于静态页式管理要求进程或作业在执行前全部装入内存,如果可用页面数小于用户要求时,改作业或进程只好等待。而且,作业或进程的大小仍受内存可用空间的限制。

操作系统-页式虚拟存储管理程序模拟

操作系统-页式虚拟存储管理程序模拟

FIFO页面置换算法 1在分配内存页面数(AP)小于进程页面数(PP)时,当然是最先运行的AP个页面放入内存。 2这时有需要处理新的页面,则将原来内存中的AP个页面最先进入的调出(是以称为FIFO),然后将新页面放入。 3以后如果再有新页面需要调入,则都按2的规则进行。 算法特点:所使用的内存页面构成一个队列。LRU页面置换算法 1当分配内存页面数(AP)小于进程页面数(PP)时,当然是把最先执行的AP个页面放入内存。2当需要调页面进入内存,而当前分配的内存页面全部不空闲时,选择将其中最长时间没有用到的那个页面调出,以空出内存来放置新调入的页面(称为LRU)。 算法特点:每个页面都有属性来表示有多长时间未被CPU使用的信息。 结果分析

#include #include using namespace std; const int MaxNum=320;//指令数 const int M=5;//内存容量 int PageOrder[MaxNum];//页面请求 int Simulate[MaxNum][M];//页面访问过程 int PageCount[M],LackNum;//PageCount用来记录LRU算法中最久未使用时间,LackNum记录缺页数 float PageRate;//命中率 int PageCount1[32]; bool IsExit(int i)//FIFO算法中判断新的页面请求是否在内存中 { bool f=false; for(int j=0;j

第五、六章 存储器管理 练习题

第五、六章存储器管理练习题 (一)单项选择题 1.存储管理的目的是( ) A、方便用户 B.提高主存空间利用率 C.方便用户和提高主存利用率 D.增加主存实际容量2.动态重定位是在作业的( )中进行的。 A.编译过程 B.装入过程 C.修改过程 D.执行过程 3.提高主存利用率主要是通过( )实现的。 A.内存分配 B.内存保护 c.地址转换 D.内存扩充 4.可变分区管理方式按作业需求量分配主存分区,所以( )。 A.分区的长度是固定 B.分区的个数是确定的 C.分区长度和个数都是确定的 D.分区的长度不是预先固定的,分区的个数是不确定的5.( )存储管理不适合多道程序系统。 A.一个分区 B.固定分区 C.可变分区 D.段页式 6.可变分区管理方式下( )分配作业的主存空间。 A.根据一张主存分配表 B.根据一张已分配区表和一张空闲区表 C.根据一张“位示图”构成的主存分配表 D.由系统自由 7.可变分区常用的主存分配算法中不包括( )。 A.最先适应分配算法 B.顺序分配算法 C.最优适应分配算法 D.最坏适应分配算法8.在可变分区方式管理下收回主存空间时,若已判定“空闲区表第j栏始址=归还的分区始址+长度”,则表示( )。 A.归还区有下邻空闲区 B.归还区有上邻空闲区 C.归还区有上、下邻空闲区 D.归还区无相邻空闲区 9.当可变分区方式管理内存空间去配时,要检查有无相邻的空闲区,若归还区始地址为S,长度为L,符合( )表示归还区有上邻空闲区。 A.第j栏始址=S+L B.第j栏始址+长度=S C.第j栏始址+长度=S且第k栏始址=S+L D.不满足A、B、C任一条件 10.碎片现象的存在使( )。 A.主存空间利用率降低 B.主存空间利用率提高 C.主存空间利用率得以改善 D.主存空间利用率不受影响 11.最佳适应分配算法把空闲区( )。 A.按地址顺序从小到大登记在空闲区表中 B.按地址顺序从大到小登记在空闲区表个 C.按长度以递增顺序登记在空闲区表中 D.按长度以递减顺序登记在空闲区表中 12.分页存储管理时,每读写一个数据,要访问( )主存。 A.1次 B.2次 C.3次 D.4次 13.段式存储管理中分段是由用户决定的,因此( )。 A.段内的地址和段间的地址都是连续的 B.段内的地址是连续的,而段间的地址是不连续的 C.段内的地址是不连续的,而段间的地址是连续的 D.段内的地址和段间的地址都是不连续的 14.可变分区存储管理的( )总是按作业要求挑选一个最大的空闲区。 A.顺序分配算法 B.最先适应分配算法 C.最优适应分配算法 D.最坏适应分配算法15.虚拟存储器的容量是由计算机的地址结构决定的,若cPu有32位地址,则它的虚地址空间为( )字节。

实验五动态页式存储管理实现过程的模拟

实验五动态页式存储管理实现过程的模拟 一、实验目的与要求 在计算机系统中,为了提高主存利用率,往往把辅助存储器(如磁盘)作为主存储器的扩充,使多道运行的作业的全部逻辑地址空间总和可以超出主存的绝对地址空间。用这种办法扩充的主存储器称为虚拟存储器。通过本实验帮助学生理解在分页式存储管理中怎样实现虚拟存储器;掌握物理内存和虚拟内存的基本概念;掌握重定位的基本概念及其要点,理解逻辑地址与绝对地址;掌握动态页式存储管理的基本原理、地址变换和缺页中断、主存空间的分配及分配算法;掌握常用淘汰算法。 二、实验环境 VC++6.0集成开发环境或java程序开发环境。 三、实验内容 模拟分页式虚拟存储管理中硬件的地址转换和缺页中断,以及选择页面调度算法处理缺页中断。 四、实验原理 1、地址转换 (1)分页式虚拟存储系统是把作业信息的副本存放在磁盘上,当作业被选中时,可把作业的开始几页先装入主存且启动执行。为此,在为作业建立页表时,应说明哪些页已在主存,哪些页尚未装入主存,页表的格式如图10所示: 图10 页表格式 其中,标志----用来表示对应页是否已经装入主存,标志位=1,则表示该页已经在主存,标志位=0,则表示该页尚未装入主存。 主存块号----用来表示已经装入主存的页所占的块号。

在磁盘上的位置----用来指出作业副本的每一页被存放在磁盘上的位置。 (2)作业执行时,指令中的逻辑地址指出了参加运算的操作存放的页号和单元号,硬件的地址转换机构按页号查页表,若该页对应标志为“1”,则表示该页已在主存,这时根据关系式: 绝对地址=块号×块长+单元号 计算出欲访问的主存单元地址。如果块长为2的幂次,则可把块号作为高地址部分,把单元号作为低地址部分,两者拼接而成绝对地址。若访问的页对应标志为“0”,则表示该页不在主存,这时硬件发“缺页中断”信号,有操作系统按该页在磁盘上的位置,把该页信息从磁盘读出装入主存后再重新执行这条指令。 (3)设计一个“地址转换”程序来模拟硬件的地址转换工作。当访问的页在主存时,则形成绝对地址,但不去模拟指令的执行,而用输出转换后的地址来代替一条指令的执行。当访问的页不在主存时,则输出“* 该页页号”,表示产生了一次缺页中断。该模拟程序的算法如图11。 图11 地址转换模拟算法 2、用先进先出(FIFO)页面调度算法处理缺页中断。

第4章-存储器管理练习题(答案)

第四章存储器管理 一、单项选择题 1、存储管理的目的是(C )。 A.方便用户 B.提高内存利用率 C.方便用户和提高内存利用率 D.增加内存实际容量 2、在(A)中,不可能产生系统抖动的现象。 A.固定分区管理 B.请求页式管理 C.段式管理 D.机器中不存在病毒时 3、当程序经过编译或者汇编以后,形成了一种由机器指令组成的集合,被称为(B )。 A.源程序 B.目标程序 C.可执行程序 D.非执行程序 4、可由CPU调用执行的程序所对应的地址空间为(D )。 A.符号名空间 B.虚拟地址空间 C.相对地址空间 D.物理地址空间 5、存储分配解决多道作业[1C]划分问题。为了实现静态和动态存储分配,需采用地址重定位,即把[2C]变成[3D],静态重定位由[4D]实现,动态重定位由[5A]实现。 供选择的答案: [1]:A 地址空间B 符号名空间C 主存空间D 虚存空间 [2]、[3]:A 页面地址B 段地址C 逻辑地址D 物理地址E 外存地址F 设备地址 [4]、[5]:A 硬件地址变换机构B 执行程序C 汇编程序 D 连接装入程序 E 调试程序 F 编译程序 G 解释程序 6、分区管理要求对每一个作业都分配(A )的内存单元。 A.地址连续 B.若干地址不连续 C.若干连续的帧 D.若干不连续的帧 7、(C )存储管理支持多道程序设计,算法简单,但存储碎片多。 A.段式 B.页式 C.固定分区 D.段页式 8、处理器有32位地址,则它的虚拟地址空间为(B)字节。A.2GB B.4GB C.100KB D.640KB 9、虚拟存储技术是(A)。 A.补充内存物理空间的技术 B.补充相对地址空间的技术 C.扩充外存空间的技术 D.扩充输入输出缓冲区的技术 10、虚拟内存的容量只受(D)的限制。 A.物理内存的大小 B.磁盘空间的大小 C.数据存放的实际地址 D.计算机地址字长 11、虚拟存储技术与(A )不能配合使用。

内存的存储管理段式和页式管理的区别

内存的存储管理段式和页式管理的区别 页和分段系统有许多相似之处,但在概念上两者完全不同,主要表现在: 1、页是信息的物理单位,分页是为实现离散分配方式,以消减内存的外零头,提高内存的利用率;或者说,分页仅仅是由于系统管理的需要,而不是用户的需要。 段是信息的逻辑单位,它含有一组其意义相对完整的信息。分段的目的是为了能更好的满足用户的需要。 2、页的大小固定且由系统确定,把逻辑地址划分为页号和页内地址两部分,是由机器硬件实现的,因而一个系统只能有一种大小的页面。 段的长度却不固定,决定于用户所编写的程序,通常由编辑程序在对源程序进行编辑时,根据信息的性质来划分。 3、分页的作业地址空间是维一的,即单一的线性空间,程序员只须利用一个记忆符,即可表示一地址。 分段的作业地址空间是二维的,程序员在标识一个地址时,既需给出段名,又需给出段内地址。 参考资料:/ctsn/os/skja4.htm 添加评论 炎炎1981|2009-08-2618:28:33 有0人认为这个回答不错|有0人认为这个回答没有帮助 一页式管理 1页式管理的基本原理将各进程的虚拟空间划分成若干个长度相等的页(page),页式管理把内存空间按页的大小划分成片或者页面(pageframe),然后把页式虚拟地址与内存地址建立一一对应页表,并用相应的硬件地址变换机构,来解决离散地址变换问题。页式管理采用请求调页或预调页技术实现了内外存存储器的统一管理。 它分为 1静态页式管理。静态分页管理的第一步是为要求内存的作业或进程分配足够的页面。系统通过存储页面表、请求表以及页表来完成内存的分配工作。静态页式管理解决了分区管理时的碎片问题。但是,由于静态页式管理要求进程或作业在执行前全部装入内存,如果可用页面数小于用户要求时,该作业或进程只好等待。而且作业和进程的大小仍受内存可用页面数的限制。 2动态页式管理。动态页式管理是在静态页式管理的基础上发展起来的。它分为请求页式管理和预调入页式管理。 优点:没有外碎片,每个内碎片不超过页大小。一个程序不必连续存放。便于改变程序占用空间的大小(主要指随着程序运行而动态生成的数据增多,要求地址空间相应增长,通常由系统调用完成而不是操作系统自动完成)。 缺点:程序全部装入内存。 要求有相应的硬件支持。例如地址变换机构,缺页中断的产生和选择淘汰页面等都要求有相应的硬件支持。这增加了机器成本。增加了系统开销,例如缺页中断处理机,请求调页的算法如选择不当,有可能产生抖动现象。虽然消除了碎片,但每个作业或进程的最后一页内总有一部分空间得不到利用果页面较大,则这一部分的损失仍然较大。 二段式管理的基本思想 把程序按内容或过程(函数)关系分成段,每段有自己的名字。一个用户作

段页式虚拟存储管理

课程设计 题目段页式虚拟存储管理 学院计算机科学与技术 专业 班级 姓名 指导教师吴利军 2013年1月16日 课程设计任务书 学生姓名:

指导教师:吴利军工作单位:计算机科学与技术学院题目: 模拟设计段页式虚拟存储管理中地址转换 初始条件: 1.预备内容:阅读操作系统的内存管理章节内容,理解段页式存储管理的思想及相应的分配主存的过程。 2.实践准备:掌握一种计算机高级语言的使用。 要求完成的主要任务:(包括课程设计工作量及其技术要求,以及说明书撰写 等具体要求) 1.实现段页式存储管理中逻辑地址到物理地址的转换。能够处理以下的情形: ⑴能指定内存的大小,内存块的大小,进程的个数,每个进程的段数及段内页 的个数; ⑵能检查地址的合法性,如果合法进行转换,否则显示地址非法的原因。 2.设计报告内容应说明: ⑴需求分析; ⑵功能设计(数据结构及模块说明); ⑶开发平台及源程序的主要部分; ⑷测试用例,运行结果与运行情况分析; ⑸自我评价与总结: i)你认为你完成的设计哪些地方做得比较好或比较出色; ii)什么地方做得不太好,以后如何改正; iii)从本设计得到的收获(在编写,调试,执行过程中的经验和教训); iv)完成本题是否有其他方法(如果有,简要说明该方法); 时间安排: 设计安排一周:周1、周2:完成程序分析及设计。 周2、周3:完成程序调试及测试。 周4、周5:验收、撰写课程设计报告。 (注意事项:严禁抄袭,一旦发现,一律按0分记) 指导教师签名:年月日 系主任(或责任教师)签名:年月日 一、需求分析: 页式管理基本原理:

各个进程的虚拟空间被划分成若干个长度相等的页。页长的划分和内存与外存之间的数据传输速度及内存大小等有关。一般每个页长大约为1----4K,经过页划分之后,进程的虚拟地址变为页号p与页内地址w所组成。 除了将进程的虚拟空间划分为大小相等的页之外,页式管理还把内存空间也按页的大小划分为片或者页面。这些页面为系统中的任一进程所共享。从而与分区管理不一样,分页管理时,用户进程在内存空间内除了在每个页面内地址连续之外,每个页面之间不再连续。第一是实现了内存中碎片的减少,因为任意碎片都会小于一个页面。第二是实现了由连续存储到非连续存储的这个飞跃,为在内存中局部地、动态地存储那些反复执行或即将执行的程序和数据段打下了基础。 怎样由页式虚拟地址转变为内存页面物理地址页式管理把页式虚拟地址与内存页面物理地址建立一一对应页表,并用相应的硬件地址变换机构,来解决离散地址变换问题。 静态页面管理: 静态页面管理方法是在作业或进程开始执行之前,把该作业或进程的程序段和数据全部装入内存的各个页面,并通过页表和硬件地址变换机构实现虚拟地址到内存物理地址的地址映射。 1、内存页面的分配与回收 静态分页管理的第一步是为要求内存的作业或进程分配足够的页面。系统依靠存储页面表、请求页面表以及页表来完成内存的分配。 (1)页表 最简单的页表由页号与页面号组成,页表在内存中占有一块固定的存储区。页表的大小有进程或作业的长度决定。 每个进程至少要拥有一个页表。 (2)请求表 用来确定作业或进程的虚拟空间的各页在内存中的实际对应位置。系统必须知道每个作业或进程的页表起始地址和长度,以进行内存的分配和地址变换,另外请求表中还应包括每个作业或进程所要求的页面数。 (3)存储页面 存储页面表也是整个系统一张,存储页面表指出内存各个页面是否已被分配出去,以及未被分配页面总数。存储页面表也有两种构成方法,一种是在内存中划分一块固定区域,每个单元的每个比特代表一个页面,如果该页面已被分配,则对应比特位置置1,否则置0。 另一种方法空闲页面链,不占内存空间。 2、分配算法 3、地址变换 在程序执行过程中,执行的是虚拟空间中的代码,代码中的指令是相对于虚拟空间的,需要到内存的实际空间中寻找对应的要执行的指令。 静态页式管理的缺陷: 虽然解决了分区管理时的碎片问题,但是由于静态页式管理要求进程或作业在执行前全部装入内存,如果可用页面数小于用户要求时,改作业或进程只好等待。而且,作业或进程的大小仍受内存可用空间的限制。 动态页式管理: 动态页式管理是在静态页式管理的基础上发展起来的。它分为请求页式管理和与调入页式管理(调入方式上)。

页式虚拟存储管理中地址转换和缺页中断实验参考2

页式虚拟存储管理中地址转换和缺页中断 一.实验目的 (1)深入了解存储管理如何实现地址转换。 (2)进一步认识页式虚拟存储管理中如何处理缺页中断。 二.实验内容 编写程序完成页式虚拟存储管理中地址转换过程和模拟缺页中断的处理。 三.实验原理 页式存储管理把内存分割成大小相等位置固定的若干区域,叫内存页面,内存的分配以“页”为单位,一个程序可以占用不连续的页面,逻辑页面的大小和内存页面的大小相同,内外存的交换也以页为单位进行,页面交换时,先查询快表,若快表中找不到所需页面再去查询页表,若页表中仍未找到说明发生了缺页中断,需先将所需页面调入内存再进行存取。 四.实验部分源程序 #define size 1024//定义块的大小,本次模拟设为1024个字节。 #include "stdio.h" #include "string.h" #include struct plist { int number; //页号 int flag; //标志,如为1表示该页已调入主存,如为0则还没调入。 int block; //主存块号,表示该页在主存中的位置。 int modify; //修改标志,如在主存中修改过该页的内容则设为1,反之设为0 int 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; }; //在模拟之前初始化一个命令表,通过程序可以让其顺序执行。 struct ilist p2[12]={{"+",0,72},{"5+",1,50},{"*",2,15},{"save",3,26},

存储管理同步练习及答案

第3章存储管理 一、单项选择题 1.为避免主存中各种作业相互干扰,必须进行() A 重定位 B 地址映射 C 地址转换 D 存储保护 2.固定分区存储管理中,CPU在执行作业的指令时,均为核对不等式()是否成立,若不成立,则产生地址越界中断事件,终止该指令的执行。 A 界限地址≤绝对地址≤最大地址 B 下限地址≤绝对地址<上限地址 C 基址寄存器内容≤绝对地址≤限长寄存器内容 D 基址寄存器内容<绝对地址≤限长寄存器内容 3.在请求分页系统中,LRU算法是指()。 A 最早进入内存的页先淘汰 B 近期最长时间以来没被访问的页先淘汰 C 近期被访问次数最少的页先淘汰 D 以后再也不用的页面先淘汰 4.虚拟存储器是()。 A 可以提高计算机运算速度的设备 B 容量扩大了主存的实际空间 C 通过SPOOLING技术实现的 D 可以容纳和超出主存容量的多个作业同时运行的一个地址空间 5.下列存储管理方式中,相比而言,碎片最少,而且主存利用率最高的是()。 A 固定分区 B 可变分区 C 单用户连续存储管理 D 页式 6.采用可变分区存储管理主存时,使用移动技术可以()。 A 加快作业执行速度 B 集中分散的空闲区 C 扩大主存容量 D 加快地址转换 7.在一个请求页式存储管理中,一个程序的页面走向为4,3,2,1,4,3,5,4,3,2,1,5,并且采用LRU算法。设分配给程序的存储块数M分别为3和4,在访问总发生的缺页次数F为()。 A M=3,F=8;M=4,F=5 B M=3,F=10;M=4,F=8 C M=3,F=9;M=4,F=10 D M=3,F=7;M=4,F=6 8.单道系统中经常采用的存储管理方式是()存储管理。 A 固定分区 B 单用户连续 C 可变分区 D 页式 9.请求页式管理中,缺页中断率与进程所分得的内存页面数、()和进程页面流的走向等因素有关。 A 页表的地址 B 置换算法 C 外存管理算法 D 进程调度算法 10.下列存储管理方式中,一般采用静态重定位方式进行逻辑地址到物理地址转换的是()。 A 固定分区 B 段页式 C 可变分区 D 页式 11.下列管理方式中,能实现虚拟存储器的是()。 A 单用户连续方式 B 页式存储管理 C 固定分区 D可变分区 12.所谓LFU页面置换算法,是指()。 A 驻留在内存中的页面随便挑选一页淘汰 B 将驻留在内存中时间最长的页页淘汰 C 将驻留在内存中最近最久未使用的一页淘汰 D 将驻留在内存中最近最不经常用的一页淘汰 13.页式存储管理中,每当CPU形成一个有效的地址时,则要查找页面。这一工作是由()实现的。 A 查表程序 B 存取控制 C 硬件自动 D 软件自动 14.设基址寄存器的内容为1000,在采用动态重定位的系统中,当执行指令“LOAD A 2000”时,操作数的实际地址是()。 A 1000 B 2000 C 3000 D 4000 15.虚拟内存的容量受到()的限制。

操作系统段页式存储实验报告

昆明理工大学(操作系统)实验报告 实验名称:段页式存储管理 专业班级:电科112 姓名:学号: 一、实验目的 通过编程加深对基本分页、分段储存管理方式和段页式存储管理的理解,并对每种方式的过程与优缺点进行比较。 二、段页式系统的基本原理 基本分段存储管理方式和基本分页存储管理方式原理的结合,即先将用户程序分成若干个段,再把每个段分成若干个页,并为每一个段赋予一个段名。下图示出了一个作业的地址空间和地址结构。该作业有三个段,页面大小为4 KB。在段页式系统中,其地址结构由段号、段内页号及页内地址三部分所组成,如下图所示。 地址变换过程 存放段表始址和段表长TL。进行地址变换时,首先利用段号S,将它与段表长TL进行比较。若S

在段页式系统中,为了获得一条指令或数据,须三次访问内存。第一次访问是访问内存中的段表,从中取得页表始址;第二次访问是访问内存中的页表,从中取出该页所在的物理块号,并将该块号与页内地址一起形成指令或数据的物理地址;第三次访问才是真正从第二次访问所得的地址中,取出指令或数据。显然,这使访问内存的次数增加了近两倍。为了提高执行速度,在地址变换机构中增设一个高速缓冲寄存器。每次访问它时,都须同时利用段号和页号去检索高速缓存,若找到匹配的表项,便可从中得到相应页的物理块号,用来与页内地址一起形成物理地址;若未找到匹配表项,则仍须再三次访问内存。 实验内容: 编写一个段页式存储管理程序:内存的大小为2048,分为四段:512、1024、128、384,每个页面大小为8,内存中四个段对应首地址分别为:1000、2000、3500、4000,要求输入一个逻辑地址,输出段表项、页表项、基址寄存器及物理地址。 实验程序及结果: 实验程序: #include void main() { int shu,y,y1,d,d1,wu,ji,da,da1; printf("输入逻辑地址:\n"); scanf("%d",&shu); y1=shu%8; if(y1==0) y=(shu/8)-1; else y=shu/8; if(0<=shu&&shu<=512) { d=1;

VMware 虚拟机存储管理

VMware 虚拟机存储管理 1)实现虚拟机共享存储 VMware vSphere环境中对共享存储的访问是通过VMware vStorage VMFS 实现的,这是一种专为虚拟机设计的高性能集群文件系统。 VMware vStorage VMFS 是专为虚拟服务器环境而设计、构造和优化的,可让多个虚拟机对由集群式存储构成的整合池进行共享访问,从而提高资源利用率。VMware vStorage VMFS 还为分布式基础架构服务奠定了基础,例如虚拟机和虚拟磁盘文件实时迁移,以及分布式资源调度、整合备份和自动灾难恢复。 作为文件系统,VMware vStorage VMFS 将构成虚拟机的所有文件存储在一个目录中。经过优化,可以支持大型文件,同时也可以执行许多小型的并发写操作。通过自动处理虚拟机文件,VMware vStorage VMFS 对整个虚拟机进行封装,使其很容易成为灾难恢复解决方案的一部分。事实上,VMware Infrastructure 3 之所以被TechTarget 评为“2006 年度灾难恢复产品”,VMware vStorage VMFS 是主要原因之一。 作为逻辑卷管理器,VMware vStorage VMFS 实现了一个存储资源界面,使得多种类型的存储(SAN、iSCSI 和NAS)能够以可承载虚拟机的数据存储的形式出现。通过以聚合存储资源方式实现那些数据存储的动态增长,VMware vStorage VMFS 可提供在最少停机或无停机的情况下增加共享存储资源池的能力。 VMware vStorage VMFS 与传统文件系统 传统文件系统在指定时间只允许一台服务器对同一文件进行读写访问。与之相对,VMware vStorage VMFS 使用共享存储来允许多个VMware ESX 实例对同一存储资源进行并发读写访问。 VMware vStorage VMFS 利用分布式日志来允许跨这些多服务器资源池进行快速、弹性的恢复。此外,VMware vStorage VMFS 提供了进行灾难恢复所必需的虚拟机快照功能,并且是VMware Consolidated Backup (VCB) 用来提供虚拟环境代理备份的界面。 VMware vStorage VMFS 与CFS 和CVM VMware vStorage VMFS 并不包含当今的其他集群文件系统(CFM) 和集群卷管理(CVM)

页式虚拟存储管理FIFO、LRU和OPT页面置换算法

目录 1 需求分析 (2) 1.1 目的和要求 (2) 1.2 研究内容 (2) 2 概要设计 (2) 2.1 FIFO算法 (3) 2.2 LRU算法 (3) 2.3 OPT算法 (3) 2.4 输入新的页面引用串 (3) 3 详细设计 (4) 3.1 FIFO(先进先出)页面置换算法: (4) 3.2 LRU(最近最久未使用)置换算法: (4) 3.3 OPT(最优页)置换算法 (4) 4 测试 (5) 5 运行结果 (5) 6 课程设计总结 (10) 7 参考文献 (10) 8 附录:源程序清单 (11)

1 需求分析 1.1 目的和要求 在熟练掌握计算机虚拟存储技术的原理的基础上,利用一种程序设计语言模拟实现几种置换算法,一方面加深对原理的理解,另一方面提高学生通过编程根据已有原理解决实际问题的能力,为学生将来进行系统软件开发和针对实际问题提出高效的软件解决方案打下基础。 1.2 研究内容 模拟实现页式虚拟存储管理的三种页面置换算法(FIFO(先进先出)、LRU(最近最久未使用)和OPT(最长时间不使用)),并通过比较性能得出结论。 前提: (1)页面分配采用固定分配局部置换。 (2)作业的页面走向和分得的物理块数预先指定。可以从键盘输入也可以从文件读入。 (3)置换算法的置换过程输出可以在显示器上也可以存放在文件中,但必须清晰可读,便于检验。 2 概要设计 本程序主要划分为4个功能模块,分别是应用FIFO算法、应用LRU算法、应用OPT算法和页面引用串的插入。

1.1各模块之间的结构图 2.1 FIFO 算法 该模块的主要功能是对相应页面引用串进行处理,输出经过FIFO 算法处理之后的结果。 2.2 LRU 算法 该模块的主要功功能是对相应的页面引用串进行处理,输出经过LRU 算法处理之后的结果。 2.3 OPT 算法 该模块的主要功功能是对相应的页面引用串进行处理,输出经过OPT 算法处理之后的结果。 2.4 输入新的页面引用串 该模块的主要功能是用户自己输入新的页面引用串,系统默认的字符串是0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0,用户可以自定义全新的20个数字页面引用串。 主界面 FIFO 算法 LRU 算法 OPT 算法 新的页面引用 串

操作系统复习-存储管理

3.1 内存管理基础 内存管理的主要任务是:为多道程序的运行提供良好的环境,方便用户使用存储器,提高存储器的利用率以及从逻辑上扩充存储器。内存管理包括:内存分配,内存保护,地址映射,内存扩充。 --------------------------------------------------------------------------------------------- 应用程序的处理一般过程:由相应的语言处理程序将源程序模块对应转换成目标模块->由链接程序将所有相关的目标模块链接到一起,整合成一个可执行程序->由装入程序将程序装入内存后予以执行。 重定位的概念: 由于编译程序无法确定目标代码在执行时所对应的地址单元,故一般从0号单元开始为其编址。这样的地址称为相对地址、程序地址或虚拟地址。因此当装入程序将可执行代码装入内存时,必须通过地址转换将逻辑地址转换成内存地址,这个过程称为地址重定位。 重定位分为静态重定位和动态重定位两种,静态重定位在装入时将所有相对地址转换成绝对地址,这种装入方式要求作业在装入时就必须分配其要求的所有空间,整个运行过程中不能在内存中移动,也不能申请新空间;动态重定位是装入时不地址转换,在执行过程中由硬件的地址转换机构转换成绝对地址,这种装入方式可以将程序分配到不连续的存储区中,不必装入所有代码就可以运行,但是需要硬件支持。 在重定位中通常设置一个重定位寄存器,里面放的是程序的基址,物理地址=基址+相对地址程序链接的方式: 静态链接:在运行前链接 装入时动态链接:边装入边链接 运行时动态链接:运行到需要处才链接,便于修改和更新,便于实现共享 程序装入的方式: 绝对装入方式:在编译时就知道程序要驻留的内存地址(和静态重定位完全不是一回事)可重定位装入方式:有静态重定位和动态重定位两种 其他方式:和分页和分段相结合 --------------------------------------------------------------------------------------------- 交换和覆盖的目的都是扩充逻辑内存 交换技术:把暂时不用的某个程序及数据部分(或全部)从内存中移到外存,或吧指定的程序或数据从外存读到内存。交换技术打破了一个程序一旦进入主存便一直运行到结束的限制。 覆盖技术:(定义略)覆盖技术要求程序员实现把一个程序划分成不同的程序段,并规定好它们的覆盖结构。打破了一个进程必须在全部信息都装入内存后才可运行的限制。 --------------------------------------------------------------------------------------------- 连续分配管理方式: (1)单一连续分配:把内存空间分为系统区和用户区,每次只装入运行一个程序,存储器利用率极低。 (2)固定分区分配:将内存用户空间划分为若干个固定大小的区域,每个分区只装一道作业,分区大小可以相等也可以不等 优点:可用于多道程序系统最简单的存储分配

第4章存储管理作业题答案

第四章存储管理 一、单项选择题 1. 在存储管理方案中,___可与覆盖技术配合。 A. 页式管理 B. 段式管理 C.段页式管理 D.可变分区管理 2. 在存储管理中,采用覆盖与交换技术的目的是___。 A.节省存储空间 B. 物理上扩充主存容量 C. 提高CPU利用率 D. 实现主存共享 3.动态重定位技术依赖于___。 A. 重定位装入程序 B.重定位寄存器 C. 地址机构 D. 目标程序 4. 设内存的分配情况如图 5.7所示。若要申请一块40K字节的内存空间,若采用最佳适应算法,则所得到的分区首址为___。 A. 100K B. 190K C. 330K D. 410K 10(占用)->30(占用)->50(占用)->60->80->90->100(占用)-> 5.很好地解决了"零头"问题的存储管理方法是___. A.页式存储管理 B.段式存储管理 C.多重分区管理 D.可变式分区管理 6. 在固定分区分配中,每个分区的大小是___. A.相同 B.随作业长度变化 C.可以不同但预先固定 D.可以不同但根据作业长度固定 7. 在连续存储管理方式中,可重定位分区管理采用紧凑技术的目的是____________。 A. 增加主存容量 B. 缩短访问周期 C. 集中空闲区 D.加速地址转换 8.分区管理中采用"最佳适应"分配算法时,宜把空闲区按___次序登记在空闲区表中. A.长度递增 B.长度递减 C.地址递增 D.地址递减

9.若一个系统采用分页存储管理方式,当一个进程处于执行态时,该进程的页表始址和页表长度信息将被送至。 A. PCB B. 物理地址寄存器 C. 页表寄存器 D. 重定位寄存器 10.采用段式存储管理的系统中,若地址用24位表示,其中8位表示段号,则允许每段的最大长度是___. A.2的24次方 B.2的16次方 C.2的8次方 D.2的32次方 11. 把作业地址空间使用的逻辑地址变成内存中物理地址的过程为___. A.重定位 B.物理化 C.逻辑化 D.加载 12.首次适应算法的空闲区是___. A.按地址递增顺序连在一起 B.始端指针表指向最大空闲区 C.按大小递增顺序连在一起 D.寻找从最大空闲区开始 13.在分页地址环境下,程序员编制的程序,其地址空间是连续的,分页是由___完成的。 A.程序员 B.编译地址 C.用户 D.系统 14.在段页式存储管理系统中,内存等分成__1______,程序按逻辑模块划分成若干__4_____ A. 块 B. 基块 C. 分区 D. 段 E. 页号 F. 段长 15. 某段表的内容表示如下: 段号段首址段长度 0 120K 40K 1 760K 30K 2 480K 20K 3 370K 20K 一逻辑地址为 (2,154) , 它对应的物理地址为_________. A. 120K+2 B. 480K+154 C. 30K+154 D. 2+480K 16. 在一个页式存储管理系统中, 页表内容如下所示: 页号块号 0 2 1 1

虚拟存储器管理实验报告

淮海工学院计算机科学系实验报告书 课程名:《操作系统》 题目:虚拟存储器管理 页面置换算法模拟实验 班级: 学号: 姓名:

一、实验目的与要求 1.目的: 请求页式虚存管理是常用的虚拟存储管理方案之一。通过请求页式虚存管理中对页面置换算法的模拟,有助于理解虚拟存储技术的特点,并加深对请求页式虚存管理的页面调度算法的理解。 2.要求: 本实验要求使用C语言编程模拟一个拥有若干个虚页的进程在给定的若干个实页中运行、并在缺页中断发生时分别使用FIFO和LRU算法进行页面置换的情形。其中虚页的个数可以事先给定(例如10个),对这些虚页访问的页地址流(其长度可以事先给定,例如20次虚页访问)可以由程序随机产生,也可以事先保存在文件中。要求程序运行时屏幕能显示出置换过程中的状态信息并输出访问结束时的页面命中率。程序应允许通过为该进程分配不同的实页数,来比较两种置换算法的稳定性。 二、实验说明 1.设计中虚页和实页的表示 本设计利用C语言的结构体来描述虚页和实页的结构。 在虚页结构中,pn代表虚页号,因为共10个虚页,所以pn的取值范围是0—9。pfn代表实页号,当一虚页未装入实页时,此项值为-1;当该虚页已装入某一实页时,此项值为所装入的实页的实页号pfn。time项在FIFO算法中不使用,在LRU中用来存放对该虚页的最近访问时间。 在实页结构中中,pn代表虚页号,表示pn所代表的虚页目前正放在此实页中。pfn代表实页号,取值范围(0—n-1)由动态指派的实页数n所决定。next是一个指向实页结构体的指针,用于多个实页以链表形式组织起来,关于实页链表的组织详见下面第4点。 2.关于缺页次数的统计 为计算命中率,需要统计在20次的虚页访问中命中的次数。为此,程序应设置一个计数器count,来统计虚页命中发生的次数。每当所访问的虚页的pfn项值不为-1,表示此虚页已被装入某实页内, 此虚页被命中,count加1。最终命中率=count/20*100%。 3.LRU算法中“最近最久未用”页面的确定 为了能找到“最近最久未用”的虚页面,程序中可引入一个时间计数器countime,每当要访问 一个虚页面时,countime的值加1,然后将所要访问的虚页的time项值设置为增值后的当前

页式虚拟存储管理中地址转换和缺页中断实验报告

页式虚拟存储管理中地址转换和缺页中断实验报告一.实验目的 1.深入了解页式存储管理如实现地址转换; 2.进一步认识页式虚拟存储管理中如处理缺页中断。 二.实验仪器 PC、windows操作系统、Visual C++6.0 三.实验原理 编写程序完成页式存储管理中地址转换过程和模拟缺页中断的处理。实验具体包括:首先对给定的地址进行地址转换工作,若发生缺页则先进行缺页中断处理,然后再进行地址转换;最后编写主函数对所做工作进行测试。 四.实验步骤 代码一 #include #include #define n 64 //模拟实验中假定的页表长度 #define length 10 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;//主存中页号队列头指针 page_interrupt(lnumber) //缺页中断 int lnumber; { int j; printf("发生缺页中断* %d\n",lnumber); j=p[head];//淘汰页的页号 p[head]=lnumber; //新装入的页号 head=(head+1) %m; if (page[j].write==1) //如果该页被修改过 printf("将页%d写回磁盘第%d块\n",j,page[j].dnumber);//输出页号page[j].flag=0; //该页不在主存,执行缺页中断,将标志改为不在主存 page[lnumber].pnumber=page[j].pnumber; //使j转去执行缺页中断 page[lnumber].flag=1;//将所需页重新调入存 page[lnumber].write=0;//将标志改为未被修改过 printf("淘汰主存%2d 中的页数%2d,从磁盘第%d 块中调入

相关文档
最新文档