两级页表&基本分段存储管理

学和思两者不能偏废其一

文章目录

  • 单级页表存在的问题
    • 解决问题
  • 两级页表实现原理、地址结构
    • 实现地址变换
    • 注意事项
    • 小结
  • 基本分段存储管理
    • 分段
    • 段表
    • 地址变换
    • 分段、分页管理对比
    • 小结

单级页表存在的问题

  • 某计算机系统按字节寻址,支持32位的逻辑地址,采用分页存储管理,页面大小为4KB,页表项长度为4B.
  • 4KB=212B,因此页内地址要用12位表示,剩余20位表示页号。因此,该系统中用户进程最多有220页。相应的,一个进程的页表中,最多会有220=1M=1,048,576个页表项,所以一个页表最大需要220 * 4B=222B,共需要222/212=210个页框存储该页表。(需要专门给进程分配210=1024个连续的页框来存放它的页表)
  • 根据页号查询页表的方法:K号页对应的页表项存放位置=页表始址+K*4要在所有的页表项都连续存放的基础上才能用这种方法找到页表项
  • 根据局部性原理可知,很多时候,进程在一段时间内只需要访问某几个页面就可以正常运行了。因此没有必要让整个页表都常驻内存

问题一:页表必须连续存放,因此当页表很大时,需要占用很多个连续的页框。
问题二:没有必要让整个页表常驻内存,因为进程在一段时间内可能只需要访问某几个特定的页面。

解决问题

  • 可将长长的页表进行分组,使每个内存块刚好可以放入一个分组(比如上个例子中,页面大小4KB,每个页表项4B,每个页面可存放1K个页表项,因此每1K个连续的页表项为一组,每组刚好占一个内存块,再将各组离散地放到各个内存块中)
  • 另外,要为离散分配的页表再建立一张页表,称为页目录表,或称外层页表,或称顶层页表

两级页表实现原理、地址结构

  • 如下图实现过程
    两级页表&基本分段存储管理_第1张图片
    两级页表&基本分段存储管理_第2张图片

实现地址变换

两级页表&基本分段存储管理_第3张图片

  • 问题二解:可以在需要访问页面时才把页面调入内存(虚拟存储技术).可以在页表项中增加一个标志位,用于表示该页面是否已经调入内存

两级页表&基本分段存储管理_第4张图片

注意事项

  • 1、若采用多级页表机制,则各级页表的大小不能超过一个页面
    两级页表&基本分段存储管理_第5张图片
  • 2、两级页表的访存次数分析(假设没有快表机构)
    第一次访存:访问内存中的页目录表
    第二次访存:访问内存中的二级页表
    第三次访存:访问目标內存单元

小结

两级页表&基本分段存储管理_第6张图片

基本分段存储管理

  • 与“分页”最大的区别就是一一离散分配时所分配地址空间的基本单位不同

分段

  • 进程的地址空间:按照程序自身的逻辑关系划分为若干个段,每个段都有一个段名(在低级语言中,程序员使用段名来编程),每段从0开始编址
  • 内存分配规则:以段为单位进行分配,每个段在内存中占据连续空间,但各段之间可以不相邻

两级页表&基本分段存储管理_第7张图片
两级页表&基本分段存储管理_第8张图片

  • 段号的位数决定了每个进程最多可以分几个段
  • 段内地址位数决定了每个段的最大长度是多少

两级页表&基本分段存储管理_第9张图片

段表

  • 程序分多个段,各段离散地装入内存,为了保证程序能正常运行,就必须能从物理内存中找到各个逻辑段的存放位置。为此,需为每个进程建立一张段映射表,简称“段表”.

两级页表&基本分段存储管理_第10张图片

地址变换

两级页表&基本分段存储管理_第11张图片
两级页表&基本分段存储管理_第12张图片
注意与分页的区别: 跳转链接

  • 分页中每个页的长度相同
  • 分段中每个端的长度不同

分段、分页管理对比

对比一

  • 是信息的物理单位。分页的主要目的是为了实现离散分配,提高内存利用率。分页仅仅是系统管理上的需要,完全是系统行为,对用户是不可见的。
  • 是信息的逻辑单位。分段的主要目的是更好地满足用户需求。一个段通常包含着一组属于一个逻辑模块的信息。分段对用户是可见的,用户编程时需要显式地给出段名。
  • 页的大小固定且由系统决定。段的长度却不固定,决定于用户编写的程序
    对比二
  • 分页的用户进程地址空间是一维的,程序员只需给出一个记忆符即可表示一个地址。
  • 分段的用户进程地址空间是二维的,程序员在标识一个地址时,既要给出段名,也要给出段内地址。

两级页表&基本分段存储管理_第13张图片
对比三

  • 分段比分页更容易实现信息的共享和保护

注意:不能被修改的代码称为纯代码或可入代码(不属于临界源),这样的代码是可以共享的。可修改的代码是不能共享的(比如,有一个代码段中有很多变量,各进程并发地同时访问可能造成数据不一致)

分段容易实现共享的原因如下图:
两级页表&基本分段存储管理_第14张图片
分页不易实现共享的原因如下图:
两级页表&基本分段存储管理_第15张图片
对比四
访问一个逻辑地址需要几次访存?

  • 分页(单级页表):第一次访存一一查内存中的页表,第二次访存一一访问目标内存单元。总共两次访存
  • 分段:第一次访存一一查内存中的段表,第二次访存一一访问目标内存单元。总共两次访存
  • 与分页系统类似,分段系统中也可以引入快表机构,将近期访问过的段表项放到快表中,这样可以少一次访问,加快地址变换速度。

小结

两级页表&基本分段存储管理_第16张图片

你可能感兴趣的:(#,内存管理,操作系统)