2.1 微处理器的基本结构
80x86系列从4位计算机发展到32位计算机,微处理器内部结构虽然有些变化,但是大同小异。80x86系列成员都采用并行处理技术,即微处理器中有多个处理单元在同一个时间段内协同工作,每个处理单元负责一项工作,并行处理得越多,则微处理器的性能就越高。
8086/8088微处理器只有两个处理单元:总线接口单元(Bus Interface Unit, BIU)和执行单元(Execution Unit, EU)。总线接口单元负责CPU与存储器和外设之间的信息传送,执行单元执行程序指令,并进行算术逻辑运算等。80286微处理器包括四个处理单元:总线单元、指令单元、执行单元和地址单元。80386微处理内部的处理单元更多,包括总线接口单元(BIU)、中央处理单元(CPU)和存储器管理单元(MMU)三大部分,如图2-1所示。
图2-1 80386内部结构示意图
总线接口单元通过数据总线、地址总线、控制总线来与外部环境联系,包括从存储器中预取指令、读写数据,从I/O端口读写数据及其他的控制功能。数据总线和地址总线都是32位的,由于它们是分开的,所以从存储器中存储数据最快也需要在两个时钟周期内完成。如图2-1所示,数据访问时,存储地址来自分页单元;代码访问时,存储地址由指令预取单元提供。通常没有其他总线请求时,BIU将自动取出下条指令送到指令预取队列。
中央处理单元(CPU):由指令部件和执行部件组成。指令部件包括指令预取单元(Instruction Prefetch Unit, IPU)和指令译码单元(Instruction Decode Unit, IDU)两部分。指令预取单元负责从存储器取出指令,放到一个16字节的FIFO指令队列中,这个队列叫作指令预取队列,该队列存放着从存储器取出的未经译码的指令。指令预取单元管理一个线性地址指针和一个段预取界限,负责段预取界限的检验。指令预取的优先级别低于数据传送等总线操作,绝大部分情况下是利用总线空闲时间预取指令。指令译码单元从指令预取队列中取出指令,进行译码,并将译码后的可执行指令放入已译码指令队列中,以备执行部件执行。执行部件(Execution Unit, EU)执行从已译码指令队列中取出的指令。它包含8个32位通用寄存器、1个32位的算术逻辑单元ALU、1个64位的桶形移位器和乘/除硬件。执行部件负责具体指令的执行操作,如果是算术、逻辑或者移位指令,则交给ALU处理;若指令执行时需要段或者页单元产生操作数地址,则交给分段或者分页单元进行处理。
存储器管理单元由分段部件和分页部件组成,提供存储器管理和保护服务,实现从逻辑地址到物理地址的转换,既支持段式存储管理、页式存储管理,也支持段页式存储管理。分段单元完成逻辑地址到线性地址的转换,分页单元实现保护模式下的分页模型,其中的页高速缓冲存储器用来存放近期使用的页目录表和页表。