系统内存管理简介

系统内存管理简介

系统以为单位,将内存划分为一个个存储单位,每个存储单位都有一个地址。指向地址的指针以字的大小为单位移动。目前常见的字单位为32位(4byte)或者64位(8byte)。

常见的名词解释

  • 逻辑地址(logical address):仅对程序可见,从0开始计量
  • 真实地址(physical addr):系统对内存的真实地址编号
  • 地址联编(addr binding):将逻辑地址映射到真实地址

就地址联编这一块,不同的内存管理方式联编的方式也不同。逻辑与物理两套地址的规划,使得内存管理有极大的自由。程序编译阶段,使用地址就是逻辑地址,当机器码loading进系统开始运行的时候,系统才开始地址联编。这使得程序中地址表示是一致的,具体真实占用哪些地址,到地址联编的决定。

单块内存管理法

想象这样一种理想状况,系统中除了操作系统(OS)只有一个APP。那么除了OS占用部分内存,剩下的都是APP进程的内存。

单块内存管理

图1 单块内存管理法

我们使用两套地址管理,逻辑地址和物理地址。物理地址面向程序,从0开始计数,物理地址描述内存的实际地址规划。

图1中表示的是逻辑地址+基本地址=物理地址。基本地址A加上逻辑地址L,得到真实地址。

分区管理法

单块内存管理中只允许单个APP运行,实际上内存可以容纳多个APP同时运行。这时候的做法是将内存分为多个区,除了OS外,每一个APP占用一个连续、独立的分区。

分区方式有:

  • 固定分区:引导OS初期就固定分好区间,以后不再变
  • 动态分区:根据需求动态分配区间,区间可以在内存中移动

无论单块内存,还是分区内存,同样遵循逻辑地址和真实地址两套管理法。每个分区都有自己的一套逻辑地址,用于内部交流,但最终和系统交互的时候,都需要采用物理地址。即联编方式,分区管理中地址信息存储在寄存器中。基址寄存器存储分区当前分区的起始位置,界限寄存器存储分区的长度。当前进程的请求地址不可以超过分区长度。

分区管理

图2 分区内存管理

那么分区的大小如何决定,这取决于匹配进程的方式。总共有三种方式:

  • 最先匹配:验证当前内存往下走,第一个符合进程需求的大小分配分区
  • 最佳匹配:寻找可用容器中最小的分区
  • 最差匹配:寻找最大的符合进城需求的分区

前两者适用于固定分区,便于节省内存。

最后一个符合动态分区,动态分配要求尽量满足当前需求,后期再进行调整。连续的小空分区,可以合并成一个大的空分区。并且作业也可以在内存中移动,以空出更大的空间,成为压缩

最后,无论是固定分区还是动态分区,整个进程必须同时载入内存中,一个分区必须能够容纳整个APP。这也就可以看出页式内存管理的优越性,他引出了虚拟内存的的概念。

页式管理法

页式管理同样遵循逻辑地址和物理地址的概念,但是这里启用两个新的概念,面向物理地址,面向进程地址。

页式管理中,将进程(Process)以页为单位分割,同时将内存划分为一个个帧。页和帧可以大小不同,为了方便起见,这里将其视为相同。

总结下来,帧描述内存,页描述进程。内存加载进程的方式是通过帧载入页

程序面向的是页地址,这时地址联编需要找的是帧,这就需要一本字典,即PMT(page map table)。每一个进程都需要维护一张PMT,表中记录每一个对应的

内存PMT设置

图3 页式内存管理法

这样的规划管理上增加了复杂度,但是好处也是巨大的。

无论是单块内存管理还是分区管理,都需要整块连续的内存用来存储进程,相比页式管理内存的利用率则相差太多。分区管理中,如果找不到能够容纳整个进程的连续地址,则无法载入进程。页式管理中,内存和页都是一块块的,他们分散在各处,无需专门开辟一块连续的空间,内存可以见缝插针为页分配可用的页。

同时,分页内存管理的方式也引入了请求分页虚拟内存的概念。请求分页意思是,由于CPU同一时刻只需要进程的部分数据,因此就不必将整个进程都加载进内存。当某些页面被需要的时候,系统先访问内存,如果该页面不存在,则访问二级存储将信息加载进内存,与此同时,新的页面加入使得原有的页面退出该帧的使用,该过程称为页面交换

请求分页的引入使得有时候,内存好像无限大一样,内存载入的进程的总大小远远大于内存大小,这种现象称为虚拟内存

页面交互大大提高了内存的利用率,但是当页面频繁交换的时候,交换过程占用过多的时间,使得进程显得不稳定,表现为使用不断地卡顿,这个现象称为系统颠簸

帧与页

帧就是大小固定的内存块,比如为1024。页就是进程地址,表示为一个坐标<页位置,偏移量>。系统中(逻辑地址/1024)的商为页面位置,余数为偏移量。因此,页坐标不得大于帧大小。根据页坐标和PMT就可找到物理地址(帧地址)。这就形成了从逻辑地址到物理地址的闭环。(仅凭记忆回顾,存疑

小结

最后总结一下页式管理法。一个APP载入系统,在系统表现为进程,一个或者多个。系统为每一个进程分配内存,将Process分割成,将内存分割成。之后,根据情况为分配,同时给每一个进程维护一张PMT用于地址联编。

参考

posted @ 2019-04-04 16:11  小小怪医芙兰  阅读(506)  评论(0编辑  收藏  举报