我是靠谱客的博主 无聊棉花糖,最近开发中收集的这篇文章主要介绍存储器管理存储器管理,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

存储器管理

物理地址和逻辑地址

  • 物理地址

    • 加载到内存地址寄存器中的地址,内存单元的真正地址。
    • 在前端总线上传输的内存地址都是物理内存地址,编号从0开始一直到可用物理内存的最高端。这些数字被北桥芯片(Nortbridge chip)映射到实际的内存条上。
    • 物理地址是明确的、最终用在总线上的编号,不必转换,不必分页,也没有特权级检查(no translation, no paging, no privilege checks)。
  • 逻辑地址

    • CPU所生成的地址。

    • 逻辑地址是内部和编程使用的、并不唯一。

      例如,在进行C语言指针编程中,可以读取指针变量本身值(&操作),实际上这个值就是逻辑地址,为相对于当前进程数据段的地址(偏移地址),与绝对物理地址无关。

内存管理的方式

  • 连续分配管理

    把内存分为连续的若干块,当所需的程序片段不在主存时就分配一块主存空间,把程序片段load入主存。平均浪费了50%的内存空间,但是易于管理。

  • 页式管理

    把内存分为一页一页的,每一页的空间要比一块一块的空间小很多,空间利用率要比连续块式管理高

  • 段式管理

    把内存分为一段一段的,每一段的空间又要比一页一页的空间小很多,这种方法在空间利用率上又比页式管理高,但一个程序片段可能会被分为几十段,很多时间就会被浪费在计算每一段的物理地址上。

  • 段页式管理

    结合了段式管理和页式管理的优点。把主存先分成若干段,每个段又分成若干页。

一种存储器抽象地址空间

使用位图的存储管理

块大小

太小 搜索空余内存代价过高

太大 可能出现浪费

使用链表的存储管理

对链表进行排序,可以更容易地合并空闲空间

空闲空间分配算法

  • 首次适配 (First fit):速度很快

  • 下次适配(next fit):记录上次的位置,速度反而略慢

  • 最佳适配(best fit):找到最小的适配区块,细小碎片

  • 最坏适配(worst fit):找最大的块,速度不差

  • 快速适配(quick fit):维护一个单独的空闲链表, 合并困难

对换

把内存中暂时不能运行的进程或者暂时不用的程序和数据调出到外存上,以便腾出足够的内存空间,再把已具备运行条件的进程或进程所需要的程序和数据调入内存。

对换是提高内存利用率的有效措施。

进程对换:以整个进程为单位的对换。

页面对换:是以“页”或“段”为单位进行的对换。

进程的换出与换入

进程的换出

系统首先选择处于阻塞状态且优先级最低的进程作为换出进程,然后启动磁盘,将该进程的程序和数据传送到磁盘的对换区上。

若传送过程未出现错误,便可回收该进程所占用的内存空间,并对该进程的进程控制块做相应的修改。

进程的换入

系统定时地查看所有进程的状态,从中找出“就绪”状态但已换出的进程,将其中换出时间最久(换出到磁盘上)的进程作为换入进程,将之换入,直至已无可换入的进程或无可换出的进程为止。

基本分页存储管理方式

  • 将程序的逻辑地址空间划分为固定大小的页(page),而物理内存划分为同样大小的页框(page frame)。

  • 程序加载时,可将任意一页放入内存中任意一个页框,这些页框不必连续,从而实现了离散分配。

  • 需要CPU的硬件支持,来实现逻辑地址和物理地址之间的映射。

  • 在页式存储管理方式中地址结构由两部构成,前一部分是页号,后一部分为页内地址W(位移量)

3.png

页表

在分页系统中,通过查找页表,实现从页号到物理块号的地址映射。

4.png

基本分段存储管理方式

  • 一个实际的程序往往是由若干段组成的,例如一个主程序段、若干子程序段、若干数据段和工作区段组成。
  • 每个段都有自己的名字,每个段都从0开始编址,并采用一段连续的地址空间。
  • 分段方式得到编译程序的支持,编译程序能自动地根据源程序的情况而产生若干个段。
  • 引入分段存储管理方式, 可以满足用户和程序员的方便编程、信息共享、信息保护、动态增长和动态链接的需要。

利用段表实现地址映射

  • 分段式为每个分段分配一个连续的分区,而进程中的各个段可以离散地移入内存中不同的分区中。

  • 为从物理内存中找出每个逻辑段所对应的位置,系统为每个进程建立一张段映射表,简称“段表”。

5.png

分页和分段的主要区别

  1. 页是信息的物理单位,分页是为实现离散分配方式,以消减内存的外零头,提高内存的利用率;段则是信息的逻辑单位,它含有一组其意义相对完整的信息。分段的目的是为了能更好地满足用户的需要。

  2. 页的大小固定且由系统决定,由系统把逻辑地址划分为页号和页内地址两部分,是由机器硬件实现的;段的长度却不固定,决定于用户所编写的程序。

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

段页式存储管理方式

  • 用户程序分成若干个段,再把每个段分成若干个页

4.PNG

虚拟内存 Virtual memory

  • 虚拟内存,也称虚拟存储:

    每个程序都有自己独立的地址空间

    这个空间又被是切分成小片,称之为页面(pages)

    每个页面拥有连续的地址范围

    并不是所有的页面都必须放入内存

  • 虚拟地址 (Virtual Addresses)

    虚拟地址空间 (Virtual Address Space)

    内存管理单元(Memory Management Unit, MMU)

    将虚拟地址转化为物理地址

    由程序产生的地址称为虚拟地址,它们构成了虚拟地址空间,在没有虚拟内存的计算机上,将虚拟地址直接送到内存总线,也就是直接读写物理内存,而在使用虚拟内存时,虚拟地址被送到内存管理单元(MMU),MMU将虚拟地址映射为物理内存地址。

分页(Paging)

虚拟地址空间按照固定大小划分为被称为page的若干单元。在物理内存中对应的单元称为页框,页面和页框的大小通常是一样的。

然后当程序试图访问某个地址时,会将该虚拟地址送到MMU,mmu判断落在那个page上,然后根据映射结果,对应相应的页框,然后将地址变换即可。

请求分页存储管理方式

页表机制

请求分页系统中所需要的主要数据结构是页表。其基本作用仍然是将用户地址空间中的逻辑地址变换为内存空间中的物理地址。

|页号|物理块号|状态位P|访问字段A|修改位M|外存地址|
|–|–|–|–|–|–|–|–|–|

状态位P:用于指示该页是否已调入内存,供程序访问时参考。

访问字段A:用于记录本页在一段时间内被访问的次数,供选择换出页面时参考。

修改位M:表示该页在调入内存后是否被修改过,M位供置换页面时参考。

外存地址:用于指出该页在外存上的地址,通常是物理块号,供调入该页时参考。

缺页中断机构

  • 当所要访问的页面不在内存时,便产生一缺页中断,请求OS将所缺之页调入内存。
    • 同样需要经历诸如保护CPU环境、分析中断原因、转入缺页中断处理程序进行处理、恢复CPU环境等几个步骤
    • 但有自己的特点
      • 在指令执行期间产生和处理中断信号
      • 一条指令在执行期间,可能产生多次缺页中断

页面置换算法

最佳置换算法

所选择的被淘汰页面,将是以后永不使用的,或许是在最长(未来)时间内不再被访问的页面。

但难以预知一个进程在内存的若干个页面中,哪一个页面是未来最长时间内不再被访问的,因而该算法是无法实现的,但可以利用该算法去评价其它算法。

6.png

先进先出页面置换算法

总是淘汰最先进入内存的页面,即选择在内存中驻留时间最久的页面予以淘汰。

7.PNG

最近最久未使用置换算法

选择最近最久未使用的页面予以淘汰。

–该算法赋予每个页面一个访问字段,用来记录一个页面自上次被访问以来所经历的时间t,当须淘汰一个页面时,选择现有页面中其t值最大的,即最近最久未使用的页面予以淘汰。

8.PNG

最后

以上就是无聊棉花糖为你收集整理的存储器管理存储器管理的全部内容,希望文章能够帮你解决存储器管理存储器管理所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(32)

评论列表共有 0 条评论

立即
投稿
返回
顶部