User Tools

Site Tools


tech:system:cpu

微处理器备忘录

此页面内容陈旧,需要更新:!:

Intel

Intel成立于1968年,由肖克利八叛逆中的罗伯特·诺宜斯和戈登·摩尔离开仙童半导体后创建,于1971年推出其第一款微处理器——4位的4004

4004也是世界上第一款微处理器,它首次将整个中央处理单元集成于一块硅片之中。

微处理器的概念

微处理器在一块硅片上实现了计算机中央处理单元(CPU)的绝大部分功能,它是可编程的逻辑器件,这种器件完成的功能随其输入端所加的“指令字”不同而不同。

最起码的要求:包含一个算术逻辑单元,用于完成算术逻辑运算;能够输入输出数据(包括指令);是可编程的(按照输入指令实现指定的功能)。

利用补码实现减法

a – b = a + (-b) = a + (E - b) – E = (a + (E - b) - E) % E = (a + (E - b)) % E
E – b 称作-b的补码,E = 最高数符值 + 1;

在计算机系统中,使用补码来表示负数,使用加法来实现减法。

指令

  • 微处理器的指令格式有长度固定的,也有长度可变的
  • 微处理器的指令系统是设计CPU时定义好的。
  • 大多数指令可以分作两个部分:操作码和操作数
  • 指令的执行步骤包括:取指、译码,取操作数、执行、回写。为了提高效率,许多微处理器都采用指令流水线技术。

寻址方式

  • 立即寻址(immediate addressing):操作数包含在指令中
  • 直接寻址(direct addressing):操作数的地址包含在指令中
  • 间接寻址(indirect addressing):指令中包含一个存有实际操作数地址的指示器(如寄存器)。
  • 相对寻址(relative addressing):地址由计算机再处理产生

总线

  • 地址总线:地址总线的宽度决定CPU的寻址能力
  • 数据总线:
  • 控制总线:(读、写、中断、中断响应、等待、同步等)
  • 双总线结构(哈佛结构):该结构有程序总线、数据总线两组总线,取指与取数据可以同时进行。

输入输出端口

  • 输入输出端口负责完成微处理器和外设的数据交换。
  • 输入输出端口有两种:不可编程的输入输出端口(锁存器/缓冲器实现)和可编程的输入输出端口(专门芯片实现)
  • 输入输出的编址方式方式有两种,一种是和存储器共享一个存储空间,一种是给予独立的存储空间(Intel x86系列)。

中断

  • 中断过程:一般包括中断请求(外部设备à微处理器)、中断响应、中断服务和中断返回。
  • 中断向量: 许多体系采用中断向量结构确定中断服务例程的入口地址。系统让每一个特定的中断对应一个特定的存储单元,其中含有服务例程的入口地址等信息,这些存储单元称作中断向量表,其中的内容称作中断向量。用户通过修改中断向量表来改变对应服务例程的入口地址。
  • 中断号: 每个特定的中断都有一个中断号,微处理器在处理中断之前必须获得该中断号(Intel x86 利用第二个INTRA脉冲获取中断号)。

直接内存访问(DMA)

指不经过CPU直接在内存之间、外设之间或内存与外设之间进行数据传输,具体过程为:DMA控制器向CPU申请系统总线,得到响应后开始数据传输,数据传输结束后释放系统总线。

微控制器(Microcontroller)(单片机)

将计算机的CPU、RAM、ROM、I/O接口、定时器等集中在一块芯片上形成的芯片级计算机,由于多用于控制领域,称作微控制器。

CISC和RISC

  • CISC:复杂指令集计算机。
    • 主要特点: 指令格式不固定,长度可变,操作数数目可变
    • 寻址方式复杂
    • 采用微程序控制,由微指令序列完成每条指令
    • 每条指令需要花费若干时钟周期
  • RISC:简单指令集计算机。
    • 主要特点: 固定的指令格式和三操作数操作
    • 相对少的寻址方式
    • 不使用微程序控制
    • 大多数指令单周期完成
    • 面向寄存器的操作和装入/存储型存储器访问
  • D.Patterson对RISC体系的规定
    • 每周期执行一条指令
    • 所有指令均为等长(操作码+操作数)
    • 存储器访问只能使用载入/存储指令
    • 支持高级语言
    • 指令系统利于流水线操作

DSP芯片

这是一种特别适合与数字信号处理运算的微处理器,其特点包括:

  • 对密集的乘法运算的支持(要求单周期乘法和乘法-累加硬件)
  • 哈佛结构
  • 零开销循环
  • 专门的寻址方式(位倒序寻址等)
  • 流水线支持

Intel 8080

1974年,Intel推出8位的微处理器8080,作为其第一款8位微处理器8008的增强版本。8080是第一个NMOS微处理器,它的时钟频率是 2MHz,提供78条指令。

  • 8080的数据总线是8位,地址总线16位,可寻址64K的内存空间。
  • 8080的通用寄存器共三组六个(B,C/D,E/H,L),都是8位的,但也可以作为16位的寄存器对使用。
  • 8080提供一个8位的累加器、一个5位的标志寄存器(CF/PF/ZF/AF/SF),一个16位的程序计数器和一个16位的堆栈指示器(8080的地址总线是16位)。另外,还有一个8位的指令寄存器来存储操作码,两个8位的暂存器来存储暂时数据。
  • 在8080的取指过程中,指令的第一个字节(包含有操作码)由内部总线传送到指令寄存器内。8080的操作码是8位的,可以表示255 种操作;指令(操作码+操作数)长度则为1到3个字节。

Intel 8086

Intel 8086是Intel推出的第一个标准的16位微处理器,它的内部结构是16位的,外部数据总线是16位的,能处理16位的数据,也能处理8位的数据。它的外部地址总线是20位的,因而寻址空间可以达到1M字节。

  • 8086提供4个16位的数据寄存器(AX/BX/CX/DX),一个用作累加器,其余的为通用寄存器。8086有五个地址寄存器,包括一个堆栈指示器(SP),一个程序计数器(IP)和三个新增的寄存器(BP/SI/DI),这些寄存器都是16位的,通过与4个16位的段地址寄存器配合使用,可以实现在1M字节的范围内对内存进行寻址。8086的标志寄存器也是16位(PSW)的,共有9个标志位(在8080的基础上增加OF, IF, TF和DF)。
  • 8086的执行单元(EU)和总线接口单元(BIU)是分开的,因此,取指和执行可以同时进行。即在一条指令的执行过程中,可以将取下一条指令,放到指令队列中。(初级流水线结构)
  • 8086的寻址方式比较复杂,共有六种:
    • 立即寻址(Immediate Addressing)
    • 直接寻址(Direct Addressing),寄存器寻址(Register Addressing)
    • 寄存器间接寻址(Register Indirect Addressing)
    • 变址寻址(Index Addressing),基址加变址寻址
  • 8086提供256个中断,中断向量表在存储器低端0000H-003FFH中,存放4字节的中断向量(服务程序的段基地址+偏移量)。

Intel 80286

80286是Intel公司在1982年推出的,它是8086向上兼容的微处理器,提供24位的地址总线,可寻址16M字节内存。在80286中,指令单元(IU),地址单元(AU)和总线单元(BU)分开,取指,指令译码和执行并行工作,增强了流水线结构。 80286的寄存器组于8086基本相同,只是增加了一个16位的机器状态字寄存器,另外标志寄存器多了3个标志位。 80286提供虚拟保护模式。在这种模式下,处理器对寻址空间进行分段,每个段最大64K字节,段选择子存放在段寄存器中,占14位,可以构成214个段。段选择子和偏移量构成了80286的逻辑地址,逻辑上可寻址1GB的内存空间。80286的内存中有段描述符表,存有段选择子对应的段信息,包括基地址,段属性等信息。虚拟保护模式下80286的基地址是24位,可访问全部16M的物理内存。

Intel 80386和Intel 80486

80386是Intel公司1985年推出的一个全32位微处理器,内部结构是32位的,可以处理8位、16位、32位的数据类型;数据总线有32条,一次可以传送8位、16位、32位的数据;地址总线有30条,外加两条地址使能引出线,可访问的物理内存达到4G字节。80386内部有8个32位的通用寄存器(EAX/EBX/ECX/EDX/ESI/EDI/EBP/ESP),它们可以存放数据或地址量。80386内部有6个16位的段寄存器(CS /DS/SS/ES/FS/GS),用于存放段选择子,因此也称为段选择器。80386的硬件可以根据段寄存器中的值自动把8字节的段描述符装到段描述符寄存器中,而不必再在存储器访问时去查表,这与80286是不相同的。此外80386内部还有四个系统地址寄存器(GDTR/IDTR/LDTR/TR)和三个控制寄存器(CR0/CR2/CR3)。对于80386,在保护模式下每个内存段可以达4G字节,逻辑上可以寻址64T字节的内存空间。这个段太大,不适合在磁盘和主存间交换数据,因此每个段有被分成了1KB×1KB个页,每个页的大小为4K字节。32位的段基地址和32位的偏移量生成的是一个线性地址,它由10位的页表指示、10位的页指示和12位的页内偏移量组成。这个线性地址通过分页处理后生成32位的物理地址。80386可以划分为中央处理单元(CPU),存储器管理单元(MMU)和总线接口单元(BIU)3部分,中央处理单元中包括执行部件和译码部件,可以实现指令执行和指令译码的并行;存储器管理单元包括分段和分页部件,负责分段和分页处理;总线接口单元用于收发80386访问外部存储器和输入输出端口所需的地址、数据和控制信号。 80386微处理器中的各部件分工更加详细,实现了高效的流水线化。

80486是Intel公司1989年推出的一个新型32位微处理器,它的内部结构与80386相似,在寻址方式、存储管理和数据类型方面也没有新的改变,但处理速度要比80386快两到四倍。

80486的新特点有以下几个:

  • 指令流水线功能
  • FPU集成
  • 片内高速缓存技术
  • 新的内部总线技术
  • 倍频技术

IA-32架构的问题(转载)

我们知道,工程师可以通过提高每个时钟的指令执行数来提高性能,英特尔新的指令集的首要目的在于,让指令更容易解码,更容易并行执行。这样就可以不受限制地开发新型处理器。但是,对工程师而言,兼容8086的X86指令集一直是必须完成的任务。毕竟,兼容前代产品是使英特尔成长壮大起来的关键因素,而且还可以保护用户原先的投资和使用数以百万计应用软件。既然如此,为什么又要放弃整个X86指令集重新开始呢?X86的不足在什么地方? 可变的指令长度

X86指令的长度是不定的,而且有几种不同的格式,结果造成X86 CPU的解码工作非常复杂,为了提高CPU的工作频率,不得不延长CPU中的流水线,而过长的流水线在分支预测出错的情况下,又会带来CPU工作停滞时间较长的弊端。

寄存器的贫乏

X86指令集架构只有8个通用寄存器,而且实际只能使用6个。这种情况同现代的超标量CPU极不适应,虽然工程师们采用寄存器重命名的技术来弥补这个缺陷,但造成了CPU过于复杂,流水线过长的局面。

内存访问

X86指令可访问内存地址,而现代RISC CPU则使用LOAD/STORE模式,只有LOAD和STORE指令才能从内存中读取数据到寄存器,所有其他指令只对寄存器中的操作数计算。在目前 CPU的速度是内存速度的5倍或5倍以上的情况下,后一种工作模式才是正途。

浮点堆栈

X87 FPU是目前最慢的FPU,主要的原因之一就在于X87指令使用一个操作数堆栈。如果没有足够多的寄存器进行计算,你就不得不使用堆栈来存放数据,这会浪费大量的时间来使用FXCH指令(即把正确的数据放到堆栈的顶部)。

4GB限制

这似乎不是问题,但是,在6年前,主流PC只有4MB内存,而目前的绝大部分PC装备了64MB以上的内存,是以前的16倍,所以,在下一个十年,PC内存突破1GB绝对不会令人惊讶,而且目前的大型服务器已经使用了1GB以上的内存,突破4GB内存的情况很快就会出现。

芯片变大

所有用于提高X86 CPU性能的方法,如寄存器重命名、巨大的缓冲器、乱序执行、分支预测、X86指令转化等等,都使CPU的芯片面积变得更大,也限制了工作频率的进一步提高,而额外集成的这些晶体管都只是为了解决X86指令的问题。

字节编址的方式

  • Big Endian: 高字节在低地址
  • Little Endian: 低字节在低地址

字长

一般指整数寄存器的宽度。和字长有关的主要参数还有:虚地址长度;实地址总线长度;数据总线宽度。

tech/system/cpu.txt · Last modified: 2014/11/10 08:22 (external edit)