软考(软件设计师)--操作系统基础知识之存储管理(二)

一、基本分段式存储管理的实现

段表:
为使程序正常运行,须在系统中为每个进程建立一张段映射表,简称“段表”/每个段在表中占有一个表项。
段表结构:段号;段在内存中的其实地址(基址);段长。
段表可以存放在寄存器中,但更多的使存放在内存中。
段表用于实现从逻辑段到物理内存区域的映射。

地址变换机构:
在系统中设置段表寄存器,用于存放段表始址和段表长度,以实现从进程的逻辑地址到物理地址的变换。
当段表存放在内存中时,每访问一个数据,都需访问两次内存,降低了计算机的速率。
解决方法:设置联想寄存器,用于保存最近常用的段表项。

分页和分段的主要区别:
相似点:采用离散分配方式,通过地址映射机构实现地址变换。
不同点:

  • 页是信息的物理单位,分页是为了满足系统的需求;段时信息的逻辑段位,含有意义相对完整的信息,是为了满足用户的需求。
  • 页的大小固定且有系统确定,由系统把逻辑地址分为页号和页内地址,由机器硬件实现;段的长度不固定,取决于用户程序,编译程序对源程序编译时根据信息的性质划分。
  • 分页的作业地址空间是一维的;分段的作业地址空间是二维的。

二、段页式存储管理

分段和分页存储管理方式各有优点。把两者结合成一种新的存储管理方式–段页式存储管理方式,具有两者的长处。
基本原理:
先将用户车程序分成若干段,再把每个段分成若干页,并为每个段赋予一个段名。
基本段页式存储管理:把作业的所有段装入内存方可运行。
请求段页式存储管理:没必要把整个作业装入内存,可把作业的几段或几页装入内存即可运行。
段页式系统地址结构:段号;段内页号;页内地址。
在这里插入图片描述
在段页式系统中,为了获得一条指令或数据,需访问三次内存:
第一次:访问内存中的段表,取得页表始址
第二次:访问内存中的页表,取得该页所在的物理块号,将块号与业内地址形成物理地址
第三次:根据第二次所得的地址,取出指令或数据
缺点:访存次数增加两倍
解决方法:增设高速缓存寄存器。

三、页面置换算法

  1. 最佳置换算法
  2. 先进先出置换算法
  3. 最近醉酒未使用(LRU)算法

最佳置换算法:
一种理想化的算法,具有最好的性能,但难于实现。先进先出置换算法最直观,但可能性最差,故应用极少。
其所选择的被淘汰页面,将式以后永不再用,或许式在最长(未来)时间不再被访问的页面。
优点:保证获得最低的缺页率
缺点:无法预知一个进程在内存的若干个页面,哪个在未来最长时间内不再被访问。
(可以用来评价其它算法好坏)

先进先出置换算法
总是淘汰最先进入内存的页面,即选择在内存中驻留时间最久的页面予以淘汰。
算法实现简单,只需把一个进程已调入内存的页面,按先后次序链接成一个队列,并设置一个指针(替换指针),使它总是指向最老的页面。
算法与进程的实际运行规律不相适应,因为进程中的某些页面经常被访问,但先进先出置换算法不能保证这些页面不被淘汰。

Belady现象
如果对一个进程未分配它所要求的全部页面,有时就会出现分配的页面数增多但缺页率反而提高的异常现象。发生在FIFO算法。

最近醉酒未使用(LRU)算法:
根据页面调入内存后的使用情况进行决策。由于无法预测各页面将来的使用情况,只能利用“最近的过去”作为“最近的将来”的进士,因此,LRU置换算法使选择最近最久未使用的页面语义淘汰。
该算法赋予每个页面一个访问字段,用来记录一个页面自上次被访问以来所经历的时间T,当需要淘汰一个页面时,选择现有也买你中其T值最大的,即最近最久未使用的页面予以淘汰。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章