打印

BIOS系列杂谈-UEFI到操作系统的虚拟地址转换-2

[复制链接]
120|0
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
海洋无限|  楼主 | 2024-12-3 10:24 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
X86体系架构对虚拟地址的支持有一个发展过程,最早在8086中并没有虚拟地址的概念,只有物理地址。为了在16位ALU和16位代码和寄存器上寻址20位地址总线(2^20=1MB),Intel想到了一个折中的办法:把内存分段,并设计了4个段寄存器,CS,DS,ES和SS,分别用于指令、数据、其它和堆栈。这样,一个完整的物理内存地址就由两部分组成,高16位的段基址和低16位的段内偏移量,当然它们有12位是重叠的,它们两部分相加在一起,才构成完整的物理地址。
计划赶不上变化,1982年80286诞生了,24位的地址线催生了保护模式的产生,线性地址概念和段描述符等等被启用。线性地址通过MMU转化成物理地址,即:线性地址-=>物理地址同时实模式可以完全兼容8086的代码,保护了现有的投资。
1985年收到现代计算机体系结构的影响,80386又引入了页机制,从而引入了虚拟地址,从而地址转换又添加了一层逻辑地址-=>线性地址-=>物理地址
而地址开启页模式也要经历开启段模式的过程,过程十分繁复。幸运的是,从此以后,X86在没有加入更多的层次,只是在现有的基础上小修小补,譬如页表变大些(4k->2M->1G),加入更多保护,页表分层更多等等,这里不再细表,感兴趣的同学可以参看IA32硬件参考手册。

使用特权

评论回复

相关帖子

发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

73

主题

526

帖子

1

粉丝