段页式内存管理

1 页式存储管理

 基本原理

    1 .等分内存

    页式存储管理将内存空间划分成等长的若干区域,每个区域的大小一般取 2 的整数幂,称为一个物理页面有时称为块。内存的所有物理页面从 0 开始编号,称作物理页号。

    2 .逻辑地址

    系统将程序的逻辑空间按照同样大小也划分成若干页面,称为逻辑页面也称为页。程序的各个逻辑页面从 0 开始依次编号,称作逻辑页号或相对页号。每个页面内从 0 开始编址,称为页内地址。程序中的逻辑地址由两部分组成:

逻辑地址

页号p

页内地址 d

    3 .内存分配

    系统可用一张“位示图”来登记内存中各块的分配情况,存储分配时以页面(块)为单位,并按程序的页数多少进行分配。相邻的页面在内存中不一定相邻,即分配给程序的内存块之间不一定连续。

    对程序地址空间的分页是系统自动进行的,即对用户是透明的。由于页面尺寸为 2 的整数次幂,故相对地址中的高位部分即为页号,低位部分为页内地址。

2 实现原理

    1 .页表

    系统为每个进程建立一张页表,用于记录进程逻辑页面与内存物理页面之间的对应关系。地址空间有多少页,该页表里就登记多少行,且按逻辑页的顺序排列,形如:

逻辑页号

主存块号

0

B0

1

B1

2

B2

3

B3

    2 .地址映射过程

    页式存储管理采用动态重定位,即在程序的执行过程中完成地址转换。处理器每执行一条指令,就将指令中的逻辑地址( p,d )取来从中得到逻辑页号 (p) ,硬件机构按此页号查页表,得到内存的块号 B’ ,便形成绝对地址( B’,d ) , 处理器即按此地址访问主存。

    3 .页面的共享与保护

    当多个不同进程中需要有相同页面信息时,可以在主存中只保留一个副本,只要让这些进程各自的有关项中指向内存同一块号即可。同时在页表中设置相应的“存取权限”,对不同进程的访问权限进行各种必要的限制。

2 段式存储管理

1基本原理

    1.逻辑地址空间

    程序按逻辑上有完整意义的段来划分,称为逻辑段。例如主程序、子程序、数据等都可各成一段。将一个程序的所有逻辑段从0开始编号,称为段号。每一个逻辑段都是从0开始编址,称为段内地址。

    2.逻辑地址

    程序中的逻辑地址由段号和段内地址(s,d)两部分组成。

    3.内存分配

    系统不进行预先划分,而是以段为单位进行内存分配,为每一个逻辑段分配一个连续的内存区(物理段)。逻辑上连续的段在内存不一定连续存放。

2实现方法

    1.段表

    系统为每个进程建立一张段表,用于记录进程的逻辑段与内存物理段之间的对应关系,至少应包括逻辑段号、物理段首地址和该段长度三项内容。

    2.建立空闲区表

    系统中设立一张内存空闲区表,记录内存中空闲区域情况,用于段的分配和回收内存。

    3.地址映射过程

段式存储管理采用动态重定位,处理器每执行一条指令,就将指令中的逻辑地址( s,d )取来从中得到逻辑段号 (s) ,硬件机构按此段号查段表,得到该段在内存的首地址 S’ , 该段在内存的首地址 S’ 加上段内地址 d ,便形成绝对地址( S’+d ),处理器即按此地址访问主存。

3 段页式存储管理

    页式存储管理的特征是等分内存,解决了碎片问题;段式存储管理的特征是逻辑分段,便于实现共享。为了保持页式和段式上的优点,结合两种存储管理方案,形成了段页式存储管理。

    段页式存储管理的基本思想是:把内存划分为大小相等的页面;将程序按其逻辑关系划分为若干段;再按照页面的大小,把每一段划分成若干页面。程序的逻辑地址由三部分组成,形式如下:

逻辑地址

段号 s

页号p

页内地址d

    内存是以页为基本单位分配给每个程序的,在逻辑上相邻的页面内存不一定相邻。

     系统为每个进程建立一张段表,为进程的每一段各建立一张页表。地址转换过程,要经过查段表、页表后才能得到最终的物理地址。

3虚拟存储管理

    前面介绍的各种存储管理方案有一点是共同的,即当一个参与并发执行的进程运行时,其整个程序都在内存,存在的缺点是:若一个进程的尺寸比内存可用空间大,则该进程无法运行;而实际上由于局部特性,一个进程在运行的任一阶段只使用所占存储空间的一部分,因此未用到的内存区域就被浪费。

    虚拟存储管理是当进程要求运行时,不是将它的全部信息装入内存,而是将其一部分先装入内存,另一部分暂时留在外存(通常是磁盘)。进程在运行过程中,如果要访问的信息不在内存时,发中断由操作系统将它们调入内存,以保证进程的正常运行。

    虚拟存储管理分为页式虚拟存储管理、段式虚拟存储管理和段页式虚拟存储管理。

1页式虚拟存储管理

    一、基本原理

    基本思想是,在进程开始执行之前,不是装入全部页面,而是只装入一个或几个页面,然后根据进程执行的需要,动态地装入其他页面。

    页表中将增加若干项:标志位(又称驻留位),指示该页是否装入内存;外存地址给出该页在外存(磁盘)的地址。

    地址映射时当从页表标志位得知此页不在内存时,发缺页中断。此时暂停进程执行,CPU转去执行缺页中断处理程序,负责把所需的页从外存调入到内存某空闲块中,并把物理页号填入页表、更改标志位,然后再返回继续执行被中断的进程。

    二、页面淘汰

    当内存已无空闲块而又发生缺页中断时,必须在内存中选择一页面将其淘汰并写回到外存,然后再换进新的页面,这一过程称为页面调度,选择被淘汰页面的算法称作页面调度算法。如果页面淘汰算法不合理,可能产生刚被淘汰出去的一页,又要访问它,因而又要把它调入,如此反复,使系统的页面调入调出工作非常频繁从而降低系统效率,这种现象称为“颠簸”或“抖动”。

    常用的页面调度算法有:先进先出调度算法(FIFO)、最近最少使用调度算法(LRU)和最近最不经常使用调度算法(LFU)。

   注意,对于单用户连续、固定分区、可变分区存储管理是不能实现虚拟存储管理的,因为它们的共同点是,在对作业进行内存分配时是将整个作业全部、连续地放入内存。

********************************************************************************************************  

自我总结:
分页是采用一种动态重定位方式,其大小一般为2^m,通常为4K或者8K。分页会产生内部碎片但是不会产生外部碎片。例如页的大小为2048B,一个大小为72766B的进程需要35页和1086B但是实际会分配36页,这样最后一页就会产生内部碎片。分页是操作系统决定的,分段是用户决定的。进程不能访问非它所占有的内存空间,所以进程之间不能进行数据共享。分页的地址空间是一维的,分段的地址空间是二维的即需要知道段号和段内偏移地址。分段之所以产生外部碎片是因为当所有空闲内存块太小而不能容下一个段时将不会装入内存所以产生外部碎片。


4. 分页和分段的主要区别

  (1) 页是信息的物理单位,分页是为实现离散分配方式(页和页之间内存可以不连续),以消减内存的外零头,提高内存的利用率。或者说,分页仅仅是由于系统管理的需要而不是用户的需要。段则是信息的逻辑单位,它含有一组其意义相对完整的信息。分段的目的是为了能-满足用户的需要。

  (2) 页的大小固定且由系统决定,由系统把逻辑地址划分为页号和页内地址两部分,是由机器硬件实现的,因而在系统中只能有一种大小的页面;而段的长度却不固定,决定于用户所编写的程序,通常由编译程序在对源程序进行编译时,根据信息的性质来划分。

  (3) 分页的作业地址空间是一维的,即单一的线性地址空间,程序员只需利用一个记忆符,即可表示一个地址;而分段的作业地址空间则是二维的,程序员在标识一个地址时,既需给出段名,又需给出段内地址

如果有错误欢迎指正微笑


  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值