内存管理的两种基本方法

段式内存管理

事实上,对操作系统和程序员来说,按物理性质来处理内存是不方便的。如果硬件可以提供内存机制,以便将程序员的内存视图映射到实际的物理内存,系统将有更多的自由来管理内存,而程序员将有一个更自然的编程环境。分段提供了这种机制。

分段就是支持这种用户视图的内存管理方案。逻辑地址空间是由一组段构成。每个段都有名称和长度。地址指定了段名称和段内偏移。因此用户通过两个量来指定地址:段名称和段偏移。

为了实现简单起见,段是编号的,通过段号而不是段名称来引用。因此,逻辑地址由有序对组成:
<段号,偏移>

分段硬件

虽然用户现在能够通过二维地址来引用程序内的对象,但是实际物理内存仍然是一维的字节序列。因此,我们应定义一个实现方式,以便映射用户定义的二维地址到一维物理地址。这个地址是通过段表来实现的。
段表的每个条目都有段基地址和段界限。段基地址包含该段在内存中的开始物理地址,而段界限指定该段的长度。
每个逻辑地址由两部分组成:段号 s 和段偏移 d。段号用作段表的索引,逻辑地址的偏移 d 应位于 0 和段界限之间。如果不是这样,那么会陷入操作系统中(逻辑地址试图访问段的外面)。如果偏移d合法,那么就与基地址相加而得到所需字节的物理内存地址。因此,段表实际上是基址寄存器值和界限寄存器值的对的数组。

页式内存管理

分段允许进程的物理地址空间是非连续的。分页是提供这种优势的另一种内存管理方案。然而,分页避免了外部碎片和紧缩,而分段不可以。

不仅如此,分页还避免了将不同大小的内存块匹配到交换空间的问题,在分页引入之前采用的内存管理方案都有这个问题。由于比早期方法更加优越,各种形式的分页为大多数操作系统采用,包括大型机的和智能手机的操作系统。实现分页需要操作系统和计算机硬件的协作。

原创文章 132 获赞 23 访问量 3万+

猜你喜欢

转载自blog.csdn.net/qq_33797928/article/details/103555070