当前位置: 首页 > news >正文

操作系统-内存寻址

内存寻址

    • 一、地址概念
    • 二、完整的转换过程(以 x86 保护模式为例)
    • 举个例子
    • 三、总结流程
    • 四、现代CPU的变化趋势
    • 五、总结一句话
    • 六、简短结论先说
    • 七、详细解释:实模式与保护模式的区别
    • 八、为什么“实模式”看起来像“内核态”
    • 九、实模式在现代系统中的位置
    • 十、总结一句话:
    • 十一、总体结论先说
    • 十二、保护模式与长模式详细对比解释
      • 1️⃣ 分段机制的区别
        • 🔸 保护模式(32位)
        • 🔸 长模式(64位)
      • 2️⃣ 分页机制的区别
        • 🔸 保护模式
        • 🔸 长模式
      • 3️⃣ 地址空间与虚拟地址宽度
      • 4️⃣ 权限与特权级
      • 5️⃣ 地址转换流程总结
        • 🧩 保护模式(32位)
        • 🧩 长模式(64位)
    • 十四、总体对比图概念总结
    • 十五 一句话总结:

CPU 地址变换的本质一般来说确实是这样:

段内偏移(offset) → 虚拟地址(virtual address) → 物理地址(physical address)

但要注意:这取决于 CPU 的体系结构(主要是 x86)和工作模式(实模式 / 保护模式 / 长模式)


一、地址概念

名称由谁负责含义
逻辑地址(Logical Address)程序员 / 编译器 / CPU段机制由**段选择子 + 段内偏移(Offset)**组成
线性地址(Linear Address)或虚拟地址(Virtual Address)段机制(Segmentation) 转换得到即“虚拟地址”,由 MMU 负责进一步转换
物理地址(Physical Address)MMU(分页机制) 转换得到最终用于访问物理内存(DRAM)

二、完整的转换过程(以 x86 保护模式为例)

CPU 访问内存时,通常经过以下三步:

1️⃣ 段内偏移 → 线性地址(虚拟地址)
段寄存器(CS、DS、SS、ES 等) + 段描述符表(GDT/LDT) 完成。

逻辑地址 = 段选择子:偏移量
段描述符给出:段基址(Base) + 段限长(Limit)
线性地址 = 段基址 + 段内偏移

2️⃣ 线性地址(虚拟地址) → 物理地址
MMU 的分页机制 完成。
页表将线性地址按页(4KB等)映射到物理页。

虚拟页号 → 页表查找 → 物理页号
物理地址 = 物理页基址 + 页内偏移

3️⃣ 物理地址 → 实际内存访问
CPU 最终使用这个物理地址访问内存总线。


举个例子

假设:

段寄存器 DS → 段基址 = 0x00400000
偏移量 offset = 0x00001000

第一步(分段转换):

线性地址 = 段基址 + 偏移量 = 0x00401000

第二步(分页转换):

查页表发现:
虚拟页 0x00401000 → 物理页 0x001AB000

得到:

物理地址 = 0x001AB000 + 页内偏移(0x000)= 0x001AB000

三、总结流程

阶段转换单位机制谁参与
段 → 线性地址段寄存器 + 段基址分段机制(Segmentation)CPU段部件
线性地址 → 物理地址页表 + TLB分页机制(Paging) / MMUMMU

最终访问物理内存。


四、现代CPU的变化趋势

现代 64 位系统(例如 x86-64 长模式、ARMv8 等):

  • 分段机制几乎被废弃或简化

    • 所有段基址几乎固定为 0
    • 所以逻辑地址 ≈ 线性地址
  • 只保留分页机制(MMU)来完成虚拟地址到物理地址的转换

也就是说:

在现代 CPU 中,地址转换路径几乎简化为:

虚拟地址 → 物理地址(仅分页机制)

段机制只在兼容旧模式或特权级切换时保留。


五、总结一句话

在有分段 + 分页机制的架构中(如 x86 保护模式):

段内偏移 → 虚拟地址(线性地址) → 物理地址

但在现代 CPU(如 x86-64、ARMv8)中,分段已被简化,
所以通常是:

虚拟地址 → 物理地址

在这里插入图片描述

在现代操作系统中,程序中打印出的地址(例如通过 printf(“%p”))是 虚拟地址(Virtual Address),
不是段内偏移,也不是物理地址。
总结对比表

环境打印的地址是否经过 MMU备注
现代操作系统(Linux/Windows)✅ 虚拟地址✅ 是每个进程独立地址空间
x86 实模式(如 DOS)段内偏移❌ 否地址 = 段基址×16 + 偏移
嵌入式无 MMU 系统(如 Cortex-M)实际物理地址❌ 否无虚拟内存机制
x86-64 长模式✅ 虚拟地址✅ 是分段机制基本禁用

非常好的问题 👍,你在问 “实模式是不是内核态使用的”,这涉及到 CPU 的运行模式与 保护机制(Privilege) 的区别。
我们来一步步说明:


六、简短结论先说

实模式(Real Mode)不是内核态。
因为实模式下根本就没有“用户态 / 内核态” 的概念。

实模式 中,CPU 没有权限级(Privilege Level)保护机制,
所有代码(无论是谁写的)都能直接访问 所有内存、I/O端口、硬件寄存器
也就是说:

实模式下的程序权限相当于“超级管理员”,但并不是所谓的“内核态”,因为没有分层概念。


七、详细解释:实模式与保护模式的区别

对比项实模式 (Real Mode)保护模式 (Protected Mode)
地址空间20位地址,总线可寻址 1MB32位或更高地址,可寻址 4GB+
分段机制基址 = 段寄存器 × 16段基址来自 GDT/LDT 表项
MMU(分页)❌ 无✅ 有(支持虚拟内存)
特权级(Privilege)❌ 无用户态/内核态区分✅ 有 4 级(常用 ring 0 和 ring 3)
可访问范围任意访问内存、I/O根据特权级受限
用途启动、BIOS、引导加载操作系统运行

八、为什么“实模式”看起来像“内核态”

因为:

  • 实模式代码能做所有“内核才能做的事”,例如:

    • 直接访问硬件端口(I/O)
    • 修改中断向量表
    • 操作整个内存空间
  • 所以从“权限”角度看,它相当于“完全特权态(ring 0)”

但要注意:

这是因为 CPU 还没启用保护机制,不是因为它“处于内核态”。

换句话说:

实模式 = “无防护的上帝模式(All Access)”
保护模式 = “带有安全分层的操作模式(用户态 / 内核态)”


九、实模式在现代系统中的位置

现代 x86 系统启动过程:

1️⃣ 开机后 CPU 默认进入 实模式

  • 运行 BIOS / UEFI 初始化
  • 可访问 1MB 内存空间

2️⃣ 引导加载程序(Bootloader)运行

  • 例如 GRUB、Windows Boot Manager
  • 最终把 CPU 切换到 保护模式(或长模式)

3️⃣ 操作系统内核(Linux / Windows)启动

  • 启用分页机制(MMU)
  • 正式进入 内核态(ring 0)
  • 创建用户态(ring 3)进程

十、总结一句话:

🔹 实模式没有“内核态”或“用户态”的概念;
🔹 它只是 CPU 启动后的最原始模式;
🔹 保护模式启用后,才有真正意义上的内核态(ring 0)和用户态(ring 3)。


CPU从实模式 → 保护模式 → 长模式
非常好的问题 👍,你已经问到 x86 架构最核心的内存寻址机制演化 了。
这其实是 CPU 从 32 位(保护模式)64 位(长模式) 的关键区别所在。
我们可以从地址寻址机制分段机制分页机制权限机制等几个角度对比👇


十一、总体结论先说

特性保护模式(Protected Mode, x86 32位)长模式(Long Mode, x86-64 64位)
寻址方式32 位线性地址(最多 4 GB)64 位虚拟地址(目前有效 48/57 位)
分段机制✅ 有效,段基址+段限长都参与地址计算⚙️ 基本废弃,仅保留 FS/GS 寄存器可用
分页机制二级或三级页表(4KB页)四级或五级页表(PML4、5级分页)
地址转换流程逻辑地址 → 线性地址 → 物理地址(段机制几乎无效)虚拟地址 ≈ 线性地址 → 物理地址
权限机制ring 0~3 四级权限仍保留 ring 0~3,但常用 ring 0 和 ring 3
可寻址空间最大 4 GB理论 2⁶⁴(当前实现 256 TB 虚拟空间)
TLB/页表结构32位页表(Page Directory / Page Table)64位页表(PML4 / PDP / PD / PT)

十二、保护模式与长模式详细对比解释

1️⃣ 分段机制的区别

🔸 保护模式(32位)
  • 有真正的 分段机制

    • 每个段寄存器(CS/DS/SS/ES/FS/GS)都有一个 段描述符

    • 段描述符里有:

      • Base(段基址)
      • Limit(段长度)
      • Privilege Level(特权级)
  • 逻辑地址 = 段选择子 + 段内偏移
    → 线性地址 = Base + Offset

🧩 举例:

CS:0x2000
Offset: 0x1234
线性地址 = 0x2000 + 0x1234 = 0x3234
🔸 长模式(64位)
  • 分段机制被废弃(除了 FS、GS)
  • 所有段寄存器(CS、DS、ES、SS)的 Base 都强制为 0,Limit 也忽略。
  • FS/GS 例外:保留用于线程局部存储(TLS)等用途(例如 Linux 的 gs:0x0 指向当前线程结构)。

✅ 所以在 64 位长模式下:

逻辑地址 ≈ 线性地址(因为段基址为 0)
几乎不再经过分段变换。


2️⃣ 分页机制的区别

🔸 保护模式
  • 支持 2 级或 3 级页表:

    • 页目录(Page Directory)
    • 页表(Page Table)
  • 每级 1024 项,每页 4KB

  • 32 位地址被拆成:

    [10位页目录] [10位页表] [12位页内偏移]
    
🔸 长模式
  • 启用 四级分页(PML4),64 位页表结构:

    PML4 → PDPT → Page Directory → Page Table → Page Frame
    
  • 每级索引 9 位(共 36 位),加上页内偏移 12 位:

    [9][9][9][9][12] = 48 位虚拟地址
    
  • 支持大页(2MB、1GB 页)

⚙️ 如果启用 5-level paging(现代 CPU 可选),则地址空间扩展为 57 位虚拟地址(128 PB)。


3️⃣ 地址空间与虚拟地址宽度

模式位宽有效虚拟地址位虚拟地址空间
保护模式32 位32 位4 GB
长模式(4-level)64 位48 位256 TB
长模式(5-level)64 位57 位128 PB

⚠️ 高 16 位必须是“符号扩展位”,即第 47 位之后要与第 47 位相同(规范要求)。


4️⃣ 权限与特权级

两者都支持 ring 0~3 特权级:

  • ring 0 → 内核态
  • ring 3 → 用户态
    但长模式去掉了 LDT 机制(每进程局部分段),简化为统一分页保护。

5️⃣ 地址转换流程总结

🧩 保护模式(32位)
逻辑地址(段选择子:偏移)↓ [段表转换]
线性地址↓ [页表转换,MMU]
物理地址
🧩 长模式(64位)
虚拟地址(≈线性地址)↓ [四级页表映射,MMU]
物理地址

十四、总体对比图概念总结

项目保护模式长模式
分段机制有效,参与地址计算几乎禁用
页表层数2/3 级4/5 级
地址宽度32 位48/57 位有效
虚拟内存最大 4GB可达数百TB
访问保护段+页双层保护仅页级保护
常用用途32位操作系统(WinXP、Linux 2.6)现代64位系统(Win10+、Linux x86-64)

十五 一句话总结:

保护模式 下,地址转换是“两步走”(分段 + 分页);
长模式 下,分段基本被废弃,只保留分页;
地址空间从 4GB 扩展到数百 TB,分页层次从 2/3 级变成 4/5 级。


http://www.dtcms.com/a/517342.html

相关文章:

  • 面试Spring全家桶(一)
  • 快速上手TypeScript,TS速通
  • 建设电影网站视频素材资源管理器
  • 数据结构——拓扑排序(2)
  • 天津大邱庄网站建设公司fontawesome 网站
  • 【前端】变量命名与管理的关键实践
  • 网站自动推广软件免费做平面什么网站的素材不侵权
  • PostgreSQL数据库关于pg_rewind的认识
  • 有网站代码怎么建站2021关键词搜索排行
  • 12类Linux常用命令
  • 云数据库:从传统自建到云端服务的技术进化之路
  • 做花语的网站河南建设厅网站
  • 学校资源网站建设方案给缅甸公司网站做维护工作时间段
  • iis发布网站慢腾云建站官网
  • 电脑做会计从业题目用什么网站咸阳做网站
  • 凡科网站建设完成下载下载器淘宝网站可以做百度快照吗
  • 做更好的自己 网站wordpress网站搭建教程
  • KDD 2025 | CMA:用于时序去噪和预测的统一情境元自适应方法!
  • 湖北企业网站建设网页制作购物网站
  • 建设网站制作流程做网站需要什么学历
  • 大数据存储治理三剑客 -- 冷备、压缩、生命周期
  • 2025年10月22日 AI大事件
  • 网站title keywords成品网站设计网站
  • 建设网站的企业邮箱品牌网站建设绿d茶
  • 【经典书籍】C++ Primer 第14类虚函数与多态精华讲解
  • 怎么上架 App?iOS 应用上架完整流程详解与跨平台发布实战指南
  • 海南建设厅网站二级域名租用
  • 个人网站设计内容杭州网站建设出 名
  • 网站建设 洪塔专注集团网站建设
  • 网站怎么做利于优化高仿酒网站怎么做