内存管理之分段和分页

内存管理

最常用的内存管理方式是动态内存分配。而动态内存分配分三种:首次适应、最优适应和最差适应。
  • 首次适应(时间效率高):找到第一个满足大小的孔时,将进程放进去。
  • 最优适应(时间效率差):遍历所有的孔,将进程放进满足大小的最小的孔(亦即放入进城后新产生的孔是最小的)。
  • 最差适应(时间效率差):遍历所有的孔,将进程放进满足大小的最大的孔(亦即放入进城后新产生的孔是最大的)。

在空间利用能力方面,首次适应和最优适应都要好于最差适应。

动态内存分配存在一个显著的缺陷:存在外部碎片,空间利用率低。
 外部碎片:针对于动态内存分配方法所产生的碎片。这里的碎片指的是随着进程的加载和退出,所产生的不连续的无法满足请求的小孔,而这些小孔的总内存可满足内存分配的请求。


除了动态内存分配,还有一种常用的内存管理方式是:按固定大小的块为单位(块是最小的内存单位)进行分配。
而该种内存管理方式存在着内部碎片的问题。
内部碎片:针对于按固定大小的块为单位(块是最小的内存单位)进行分配的方法所产生的碎片。这些碎片指的是每一个块中除去进程分配了的内存后剩下的区域。

针对这两种内存管理方式的碎片问题,分别提出了分段分页的方式来对碎片问题进行缓解。

分段

将一个进程的内容分成不同的段,允许不同的段之间的内存是不连续的(但每一个段段内的空间是连续的)。
  • 可以缓解外部碎片的问题,但仍存在外部碎片问题。

分段技术需要利用段表实现。段表(段表有两列)包括:每个段的段基地址(物理基地址)、每个段的段界限。

在分段技术下,逻辑地址由段号s(表示第几个段)和段偏移d组成。

当要访问内存时:

  • 1)首先根据逻辑地址读取段号s;
  • 2)然后在段表中找到该段号对应的段界限limit,判断段偏移d是否满足小于段界限limit的条件。如果不满足,则表示寻址错误;否则往下继续操作;
  • 3)在段表中读取该段号对应的段基地址base,计算base+d得到物理地址,进而访问物理内存。

优点

反映了程序的逻辑组织,段内地址空间是连续的,便于保护、共享、动态链接和增长。

缺点

分段容易产生外部碎片,且每个段的大小不一,不利于虚拟存储。

分页

将进程的内容划分为固定大小的一小片一小片,每一片称为一个页。允许内存不连续分配。
  • 不存在外部碎片,但每一个进程对应的最后一页可能存在内部碎片。
分页技术需要利用页表实现,页表(页表只有一列)包括每个页的物理基地址(页表在主存中)。

在分页技术下,逻辑地址由页号p(表示第几页)和页偏移d组成。

当需要访问内存时:

  • 1)首先根据逻辑地址读取页号p;
  • 2)在页表中读取该页对应的页基地址base;
  • 3)将base+d(注意,与分段技术不同的是,这里的+指的是位的拼接,即将base左移逻辑地址中页偏移区域对应的位数后,再加上偏移量d),得到物理地址。

优点

通过固定大小的块来存储,利于虚拟存储,支持不连续内存分配,不存在外部碎片,即使有内部碎片,内部碎片也较小。

缺点

由于分页技术的内存是不连续的,因此难以进行保护、共享、动态链接和增长。

对于分段和分页两种技术,总的来说:分段用于内存保护,分页用于虚拟存储

#面试题目##操作系统#
全部评论
世上没有白费的努力,写这篇的人眼里有光,心中有爱。
2
送花
回复 分享
发布于 2022-08-13 22:14
很不错
1
送花
回复 分享
发布于 2022-08-13 22:13
国泰君安
校招火热招聘中
官网直投
我一直想从事内存的工作啊
点赞
送花
回复 分享
发布于 2022-08-13 21:18
点赞
送花
回复 分享
发布于 2022-08-16 18:27

相关推荐

6 13 评论
分享
牛客网
牛客企业服务