内存管理中的分页是什么?

内存管理中的分页是什么?

我刚刚在阅读Operating System Principles by Silberschatz et al时遇到了内存管理中的分页。我对此有点困惑。
它指出物理内存(我认为是 RAM)分为框架, 和逻辑内存分为页面. CPU 生成包含页码抵消。此页码用于从页表这使得基地址
因此物理地址的计算方式为基地址+偏移量。
我的问题是:

  • 每个进程都维护页表吗?
  • 从逻辑上讲,我认为答案是yes每个进程都需要将自己的页面映射到框架。我可能错了。请澄清一下。

    还:

  • 分页和分段(在内存中创建“空洞”)是两种完全不同的技术,不能结合使用。对吗?
  • 答案1

    分段产生线性地址,分页产生物理地址

    关于逻辑和物理地址,从 Bovet 和 Cesati(了解 Linux 内核)中我得到了以下信息:

    逻辑地址如何映射到物理地址

    如您所见,分页和分段由硬件的不同单元执行。尽管它们可能同时发生,但操作系统可以禁用分段单元(因此地址实际上不是逻辑地址而是线性地址)。

    概述

    您可能已经知道这些内容,但为了完整性我还是把它放在这里。

    页面占用框架:交换

    就 Silberschatz 第 8 章 f 而言,框架指物理内存的布局。操作系统将 RAM 划分为大小相等且方便使用的(例如 4K)帧区域。 页面是帧大小的数据片段,是页面替换的基本单位。

    页面数量可能多于可用框架数量。一些页面占用框架,一些页面在磁盘上被换出。

    如果从磁盘换入一个页面,它将与内存中的某个框架对齐(无论页面替换算法认为哪个合适)。

    操作系统与硬件协作

    与许多操作系统目标一样,内存管理始终与硬件协同工作:操作系统和硬件共同协作,完成工作。它们在现实场景中如何做到这一点取决于

    1. 硬件提供的一组内存管理原语(分页、分段以及它们到底存在什么)
    2. 操作系统在特定架构和情况下真正使用哪个子集(Linux@zArchitecture 不同于 Linux@Intel,不同于 Windows@Intel,不同于 Window@Intel@Boot-up)

    例如,只有少数架构提供分段功能,上图适用于 x86。出于可移植性原因,Linux 并未充分利用分段功能。如果我没记错的话,Tanenbaum 说,OS/2 是唯一一款充分利用英特尔分段功能的操作系统。

    到目前为止这个答案。

    根据您需要了解这一点的原因,以下方法可能会对您有所帮助(它对我有所帮助)。

    我建议你首先熟悉硬件和各个基元。如果 Silberschatz 在这一点上含糊其辞,请尝试阅读 Tanenbaum(现代操作系统)或 Hennessy&Patterson(计算机架构,定量方法)。如果那时你的好奇心还没有得到满足,请查看特定操作系统如何在特定平台上的各种情况下使用它。

    答案2

    每个进程都维护页表吗?

    如果系统必须为每个进程提供一个安全的虚拟地址空间,那么是的。

    分页和分段(在内存中创建“空洞”)是两种完全不同的技术,不能结合使用。对吗?

    不,有一种称为分页分段的虚拟内存方案。(我记得教授介绍这个概念时,我的同学们很恼火。如果 Silberschatz 等人没有提到这一点,那么那本教科书就不完整了。)分页虚拟内存的最初目标是在 RAM 有限的计算机上为执行大型程序提供较大的地址空间。在具有多处理的简单分页虚拟内存中,两个进程共享一个页面没有任何限制。但分段虚拟内存旨在用于多处理,并将每个进程隔离到自己的段中。

    虽然这看起来有些多余,但安全操作系统中使用的典型虚拟内存方案同时使用页面和段,其中段是进程的二进制映像。典型的硬件可能只支持固定大小的页面。分段是在操作系统中实现的。段的概念有助于管理内存中的多个进程。页面的概念有助于每个进程占用最少的内存。共享运行时库将是可在进程之间共享的写保护、只执行段的特殊情况。

    请注意,虚拟内存方案中的“段”通常是指逻辑上具有内聚性且长度任意的内存块。这种类型的“段”不应与 Intel 8086/88(又称 x86)“段”相混淆,后者从 16 字节地址边界开始(即“段落”),大小限制为 64 KB。 X86 段是内存银行的变体而不是虚拟内存。

    内存银行方案适用于地址大小较小(例如 16 位)但物理内存空间较大(例如可寻址内存高达 1 MB)的系统。虚拟内存用于(或旨在用于)相反的情况:地址大小很大(例如至少 32 位)并且安装的内存小于地址空间(如今并不总是如此)。虚拟内存通常对用户程序完全不可见,而 Intel 8086/88 程序员必须了解小/中/大内存模型和远的相对靠近指针。顺便说一下,我第一次学习虚拟内存和“分页分段”的那堂课发生在英特尔设计了 i8086。

    作为支持文本,维基百科还提到分段和分页可以结合起来(在硬件中)。

    答案3

    首先,你的定义正确的

    对于你的第一个问题,简单分页, 它是是的。 操作系统为每个进程维护页表这就带来了简单分页的一个问题。它占用大量内存保留这些页表。

    进程表数量不受限制,这意味着100 个进程带来 100 个不同的进程表,1000 个进程带来 1000 个不同的进程表供您参考我假设有足够的可用 RAM,否则流程将无法进行

    此外,进程表的长度不受限制,这意味着其中一个页表可以有 100 页,另一个可以有 1000 页,还有一个可以有 10 页。取决于流程。

    这就是结果。

    第二个是,它们可以很好地结合在一起但取决于这本书的写作时代,他们可能会说它不是。

    相关内容