Linux 学习笔记(三十八):从实模式到分页——处理器内存管理的发展史

发布时间:2026/10/29 19:56:49
Linux 学习笔记(三十八):从实模式到分页——处理器内存管理的发展史 核心结论TL;DR实模式808616位寄存器通过“段基址左移4位偏移量”拼接出20位地址最大寻址1MB。保护模式80386引入 GDT全局描述符表和段选择子。为了安全加入了 Ring 0 ~ Ring 3 特权级。平坦模型因为 32 位寄存器可以直接寻址 4GB操作系统干脆把段基址全设为 0只靠偏移量寻址名义上还保留段机制实则已经“废掉”了分段。分页机制为了解决内存碎片问题将内存划分为 4KB 的页配合页表实现虚拟内存映射。CPU 中拿到的地址永远是虚拟地址。一、 探索起源8086 与实模式早期的 8086 处理器是 16 位的但地址总线是 20 位能寻址 1MB 空间。16 位寄存器怎么表示 20 位的地址呢Intel 发明了“段基址 段内偏移”的模式物理地址 段基址 4 段内偏移这种方式被称为实模式。虽然解决了寻址问题但存在严重的安全隐患——用户程序可以直接访问操作系统的物理内存把系统搞崩溃。二、 走向安全保护模式与 GDT到了 80286/80386 时代引入了保护模式。全局描述符表GDT操作系统在内存里维护了一个数组记录了各个段的信息包括基地址、界限、权限等。段选择子CPU 寄存器里不再存段基址了而是存一个“索引”。通过索引去 GDT 查找真正的段描述符。特权级Ring分为 Ring 0内核态到 Ring 3用户态。低权限程序想访问高权限内存门儿都没有。三、 走向平坦分段机制的没落到了 80386寄存器和地址总线都变成了 32 位可以直接寻址 4GB。既然一个偏移量就能访问整个 4GB 空间分段机制就显得多余了。为了让老软件还能跑Linux 采用了平坦模式Flat Model把所有的段基址都设置为 0。所以所有的虚拟地址从 0 开始算起。四、 精细化管理分页机制Paging虽然有了分段但内存分配很容易产生“外部碎片”比如内存里总共有 30MB 空闲但不连续导致一个 30MB 的程序放不进去。于是引入了分页机制将物理内存切分为固定大小的页框4KB。将程序的虚拟地址切分为同样大小的页。通过页表把连续的虚拟页映射到不连续的物理页框上。这下不仅没有了外部碎片还顺带实现了“虚拟内存”把不常用的页换到磁盘上骗程序说内存无限大。

关于本文作者

来自尧图内容编辑团队

尧图内容编辑团队 内容团队

尧图内容编辑团队

本文由尧图网络内容编辑团队执笔。团队由资深项目经理、前端工程师与设计师组成,所有内容均来自亲手交付的真实项目,先讲清问题、再给出可落地的解法。尧图深耕北京网站建设十年,服务过京华建材集团、智造科技等各行业客户,把一线经验沉淀为可复用的行业观察。

  • 十年建站经验,覆盖建材、制造、服务、文创等
  • 项目经理把关选题与事实准确性
  • 工程师与设计师联合撰写专业细节
  • 统一编辑规范,保证文风与排版一致
  • 每月复盘转化数据,迭代选题方向

延伸阅读

相关资讯与近期热门内容

深度阅读推荐

建站决策前值得细读的三篇

网站改版的5个关键决策
2024-08-12

网站改版的5个关键决策

什么时候该改版、改到什么程度、如何避免流量掉光,京华建材集团改版复盘给出答案。

获取专属建站方案

看完文章,把您的行业与预算告诉我们,免费获取一份量身定制的官网建设方案与报价。

立即免费咨询