实模式与保护模式
8086有20根地址总线,共1MB的寻址空间,但是寄存器只有16位,所以其页式第一个支持内存分段模型的处理器。当时的8086处理器还只支持实模式,后来的32位处理器在8086的基础上支持了保护模式,可以使用32根地址线,4GB内存
实模式与保护模式都是CPU的工作模式
参考:实模式与保护模式
实模式
8086的20根地址线导致设计者决定使用分段内存,段号 + 偏移量寻址。这里的段号为16位段寄存器左移4位,即:
物理地址(physicaladdress)=段值(segment) * 16 + 偏移(offset)
这种模式下,系统计算实际地址时候是对1MB取模的方式进行,也被称为wrap-around,当给出超过1M的地址时,系统不认为其访问越界,而是从0开始重新计算
保护模式
概述
在保护模式下,全部32条地址线有效,可寻址高达4G字节的物理地址空间。扩充的存储器分段管理机制和可选的存储器分页管理机制,不仅为存储器共享和保护提供了硬件支持,而且为实现虚拟存储器提供了硬件支持,支持多任务,能够快速地进行任务切换和保护任务环境,4个特权级和完善的特权检查机制,既能实现资源共享又能保证代码和数据的安全和保密及任务的隔离,支持虚拟8086方式,便于执行8086程序。
起源
实模式中的“段号:偏移量”带来问题:
- 无法支持多任务
- 程序的安全性无法得到保证:任意一个程序都可以访问系统所在内存并修改值
因此保护模式出现的核心原因是:
- 保护进程地址空间
- 从而导致了两种模式下程序的寻址方式变化
寻址方式和工作原理
保护模式下地址表示方式为“段(segment):偏移(offset)”
- 段存储在段寄存器中
- 段表示的含义是:GDT/LDT(描述符表)的一个表项
- GDT/LDT中详细定义了段的起地址,长度,界限,属性等内容【64位】
- 描述符指定了32位的段起地址和20位的段边界
- 注意:保护模式下段地址是32位的线性地址,如果未开启分页,该线性地址就是物理地址