База знань
从硬件的发展史的角度来看段机制
1971年,Intel 发布了第一款的微处理器4004。它是一个4位的微处理器。
1972年,Intel 发布了第一款八位处理器8008。它是一个8位的微处理器,地址总线(address bus)是14位的,就是说可以访问到16K的内存空间。
1974年4月,Intel 发布了第二款八位处理器8080。它是8008是增强版,增加了几个累加器,使它可以访问16位(8+8)的内存地址,即64K 范围内的地址空间。而且它也是公认的“第一款真正可用的微处理器”。8080的架构对8086产生了很大的影响,并且为 x86系列奠定了基础。
至此,内存寻址访问仍是绝对地址。就是指令的地址即物理地址,中间没有任何的转换。
1976年开始设计,1978年中旬Intel 发布了8086。标志了x86王朝的开始。它是一款16位的微处理器,却被设计成可以访问1MB 的内存(即20位的地址空间)。问题就产生了,16位的 ALU怎么去取20位的地址呢?因此,段的概念 在8086身上被引入了。
段的引入是解决“ 地址总线的宽度一般要大于寄存器的宽度 ”这个问题。
8086的分段寻址,是指一个物理地址由段地址(segment selector)与偏移量(offset)两部分组成,长度各是16比特。其中段地址左移4位(即乘以16)与偏移量相加即为物理地址。例如,06EFh:1234h,表示段地址为06EFh,偏移量为1234h,物理地址为06EF0h + 1234h = 08124h。在计算物理地址时如果发生上溢出,8086处理器舍弃进位。例如,FFFFh:0010h所对应的物理地址为00000h.
这种分段寻址,即 段地址+偏移量 的做法,在以80286开始之后会被称为 实模式。
1982年,Intel 的80286面世了。它是第一款采用 保护模式 的 x86微处理器。地址总线增加到24位使它可以访问到16M 的内存空间。即使是可访的内存空间增加了,但它的分段大小依然是64K,程序的规模受限,注定286受不到更多的喜爱。
所以,286很快就被80386所替代了。
1985年,Intel 发布了80386。一个拥有32位的微处理器。并且地址总数(address bus)也是32位的,寻址能力大幅提高到4G。同时,为了向前兼容8086,386中既有保护模式,又有实模式。并且在保护模式下,分段的大小可以到达4G(2**32)。
现在有必要简单交代一下,实模式 与 保护模式 分别是什么了。
实模式: 是 段地址+偏移量 的方式,得到物理地址,进而寻址。
保护模式: 不允许通过段寄存器取值得到段的起始地址,而是把虚拟地址转进一个 MMU 的硬件,经过额外的转换和检查,进而得到一个物理地址。(如下图)。其中的额外检查就可以起到例如保护某段数据的作用。
图1:MMU 转换虚拟地址为物理地址
是时候来一个简单的总结了。
从4004到386,先是直接物理地址寻址,然后是 实模式 形式的寻址,最后变为 保护模式 形式寻址。
最重要的变化是从“实模式”向“保护模式”的转变。这背后实际也是处理器的系统体系结构的变化。虽然386往后的CPU在各方面都有改进,但由于在本质上的结构没有大变化,所以386往后的处理器都统称80x86。
- 546 Користувачі, які знайшли це корисним