这个问题旨在填补关于该主题的良好免费信息的真空.
我相信一个好的答案将适合一个大的答案或至少在几个答案.
主要目标是为完整的初学者提供足够的信息,以便他们可以自己学习手册,并能够理解与分页相关的基本操作系统概念.
建议的指导方针:
相关问题以及为什么我认为它们不是愚蠢的:
x86页表如何工作?:标题与此问题几乎相同,但是正文询问与cr3和TLB相关的具体问题.那个问题是这个问题的一个子集.
x86虚拟化如何工作:正文仅询问源.
我正在读"理解Linux内核".这是解释Linux如何使用我不理解的分段的片段.
分段已包含在80 x 86微处理器中,以鼓励程序员将其应用程序拆分为逻辑相关的实体,例如子程序或全局和本地数据区域.但是,Linux以非常有限的方式使用分段.事实上,分段和分页有点多余,因为两者都可以用来分离进程的物理地址空间:分段可以为每个进程分配不同的线性地址空间,而分页可以将相同的线性地址空间映射到不同的物理地址空间.由于以下原因,Linux更喜欢分页分段:
当所有进程使用相同的段寄存器值时,即当它们共享同一组线性地址时,内存管理会更简单.
Linux的设计目标之一是可移植到各种架构; 特别是RISC架构对分段的支持有限.
在用户模式下运行的所有Linux进程都使用相同的段对来处理指令和数据.这些段分别称为用户代码段和用户数据段.类似地,在内核模式下运行的所有Linux进程都使用相同的段对来处理指令和数据:它们分别称为内核代码段和内核数据段.表2-3显示了这四个关键段的段描述符字段的值.
我无法理解第一段和最后一段.
我用Google搜索了很长时间,但我仍然不明白它是如何工作的,因为大多数解释都是非常技术性的,没有任何插图可以让它更清晰.我的主要困惑是它与虚拟内存有什么不同?
我希望这个问题在这里有一个非常好的解释,以便其他提出相同问题的人可以在谷歌时找到它.