实模式和保护模式

一、背景

以80x86电脑说,一开始的8086/8088系列的地址总线只有20位,所以只有1M的地址空间。通过“段基址:偏移”的方式,就可以获得实际的物理地址。
但是这种方式不安全:用户程序可以修改系统程序的内存或者其他用户程序的内存;而且内存太小了。
随着硬件的发展,后来出现了32位甚至64位的机器,地址总线就有32位或64位,地址空间可以扩展到4GB甚至更大。所以后来就出现了保护模式。保护模式可以对每个进程的内存使用进行限制,更加安全;保护模式有更大的内存空间,可以支持多进程;保护模式的内存分段、分页管理机制,为实现虚拟内存提供了硬件支持。

二、实模式

实模式的最大寻址空间为1MB。
一开始8086/8088系列的地址总线有20位,寄存器只有16位。如何用16位的寄存器表示20位的地址呢?
既然一个寄存器无法表示,那就用两个寄存器吧。前一个寄存器(段寄存器)表示在内存中的哪一段,后一个寄存器表示在这一段中的偏移地址。计算方式为:

段地址<<4 + 偏移地址 = 物理地址
段地址左移4位加上偏移地址,这样就得到了实际的物理地址。

三、保护模式

保护模式下,程序员指定逻辑地址,用16位段寄存器和32位寄存器来表示。但是这时段寄存器里面保存的值,不再是段基地址,而是一个选择子(Selector)。操作系统根据这个选择子的值,来算出段基地址,再和偏移地址相加,就是实际的物理地址。

你可能感兴趣的:(x86汇编,实模式,保护模式,GDT)