现在的位置: 首页 > 综合 > 正文

CPU体系结构概览

2013年03月04日 ⁄ 综合 ⁄ 共 3327字 ⁄ 字号 评论关闭
文章目录

CPU体系结构概览

摘自《操作系统精髓与设计原理》
BY William Stallings
刘建文略译(http://blog.csdn.net/keminlau

相对于应用软件,操作系统作为系统软件更接近硬件。操作系统与计算机硬件的唇齿相关的关系表明——要理解操作系统机理不可以忽视硬件体系的结构与机理。

计算机的基本组成

计算机的主要功能是执行程序,而为了完成这项任务,计算机系统划分为四个逻辑部分:中央处理器、内存、输入输出设备和互联它的们系统总线。

  1. 中央处理器:负责控制计算机操作,执行数据处理任务;
  2. 内存:负责保存程序指令和数据;
  3. 输入输出设备:负责主机(中央处理器和内存)到外部环境的数据交换(发送和接收数据),外部环境由各种设备组成,包括外存、通信设备和终端。
  4. 系统总线:负责为前三者之间提供数据通信功能。

看下图,处理器的一大功能是与内存交换数据,为此,处理器有两内部寄存器:内存地址寄存(MAR)器和内存缓冲寄存器(MBR)。前者指定处理器下一个读或写的内存地址;后者是相应的读写数据。与此类似,处理器与I/O交换数据也使用两个专用的寄存器:I/O地址寄存(I/OAR)器和I/O缓冲寄存器(I/OBR)。

 

计算机三大件互联

KEMIN:注意MAR与PC的区别。PC保存的是指令的地址,是控制CPU执行路线的;MAR是指令操作的数据的地址,是操作数的地址。

内存是一组编址的数据存储单元,单元或单元组可分别解释成指令或数据。(P.S.大部分PC体系的内存单元大小为8BIT也就是一个字节)

处理器的寄存器体系

处理器内部有一组比内存小但比内存快的寄存器,这些寄存器可按目的(性质)分成两类:
用户可见寄存器
控制和状态寄存器

KEMIN: b.不要把CPU内的寄存器看得很神秘,其实大部分和内存的作用是一样的,只不过快点而已。包括段寄存器、堆栈寄存器和索引寄存器,它们和数据寄存器也是运算用的,只不过它们用来算“地址”。

用户可见寄存器

用户可见寄存器是可以通过机器码直接引用的存储单元的,机器码也就是机器语言,并对所有程序可用(包括应用程序和系统程序),作为该程序的代码指令。用户可见寄存器可再分为数据、地址和状态码寄存器三种类型。

数据寄存器
可用作多种用途——通用或专用。作为通用寄存器,程序员可用其来保存任何机器指令的操作数据;有一些数据寄存器要用作专用用途,比如用作浮点运算的数据寄存器……

地址寄存器
保存着数据或指令在内存中的地址(或用作计算完整地址的地址部分)。地址寄存器有时候也可用作通用用途,不过更多用作特定的寻址模式。

  • 索引寄存器
    :索引寻址模式通过一个基地址加上一个索引值来寻址,是很常见很有效的寻址方式(KEMIN:COMMON的哲学在哪里?因为CPU常常处理数组之类的数据?)
  • 段指针(段寄存器)
    :分段寻址模式可以把内存分隔成大小不同的段。寻址时必须给出段地址(存在CPU的段寄存器)和段内偏移(offset)。分段寻址方式很重要,因为它可用作内存管理的手段。比如分段方式可以把地址空间分为系统段和用户段,系统段是只读的。
  • 堆栈指针
    :堆栈寻址时,地址是在内存中某个特定的位置,这个位置叫栈顶,由堆栈指针指定。使用堆栈寻址方式的指令可省去显式的地址域,比如push和pop指令。

2008-10-29 19:39:50 b.堆栈的存在哲学在于,程序的很多行为需要这种先进后出的约束,比如局部数据的临时性、代码执行分支时状态的恢复等。约束的设计根源在于行为的可预知性,也就说我们预知了程序有这种行为,所以设计了这种先进后出的约束。也可从反面理解,我们要实现代码执行分支时状态恢复--返回调用者的地址--完全可以用一般的内存段实现的,那为什么要用特殊的内存段--堆栈呢?很明显,效率!

最后一类寄存器属于用户部分可见的状态码寄存器(condition codes),也叫标志(FLAGS)寄存器。标志寄存器是按位操作的,标志硬件操作的结果。比如,算术运算可能产生正数、负数、零和溢出的结果。CPU操作的过程是,除了运算的结果被保存外,CPU还要设置该操作的状态码,用作后续条件分支判断之用。

通常状态码位被收集到一个或多个寄存器,组成一个状态寄存器。机器指令可隐式引用这些状态位,但不能修改它。

有一些机器里,子程序的调用会引发自动保存所有的用户可见寄存器,返回时自动恢复的过程。整个过程由CPU处理,作为指令call和return功能的一部分。这个设计的结果是,子程序间可独立地使用这些寄存器而不必担心互相影响。而在另外一些机器上,保存和恢复的工作是程序员的职责。程序员必须在调用子程序前显式保存可见的相关寄存器的值。由此可见,保存和恢复的功能既可以硬件的也可以软件的,取决于机器设计。

控制和状态寄存器

处理器内有很多寄存器用于控制处理器操作的。并且这些寄存器多是用户不可见的,部分对管态也是只读的。由于内容太多,这里只简要列出一些主要类型的控制和状态寄存器,并对其作扼要的描述。

  • 指令执行控制:除了之前谈到的MAR、 MBR、I/OAR和I/OBR外,还有两个与指令执行很重要控制寄存器:

    • 程序计数器(program counter):保存下一条指令的内存地址
    • 指令寄存器(instruction register):保存刚从内存读出的指令
  • 程序状态:所有的处理器都会有一个(或几个组成一组)叫程序状态字(program status word)的寄存器。PSW包含一些状态码位和一些状态信息,比如中断开关和管态目态(操作模式)位。
  • 中断向量:
    实现中断机制的机器会有一集的中断寄存器(常称中断向量),用于保存各种中断处理程序的首地址。
  • 系统堆栈:为了实现子程序调用,处理器内必须有系统堆栈状态寄存器。
  • 内存管理:为了实现内存管理,系统也需一些专用的控制寄存器……
  • I/O操作:I/O操作也需要一些控制寄存器。

CPU设计者会根据一些实际需要来设计控制和状态寄存器组(KEMIN:设计过程必有对约束的考量),其中一个重要实际需要是对操作系统功能的支持(KEMIN:约束来自两方面——物理实现的和逻辑功能的,这里操作系统功能是逻辑功能的约束),比如虚拟内存管理。CPU设计者为虚拟内存管理功能“量身裁剪”(tailored)了一系列的控制和状态寄存器。

控制和状态寄存器设计的另一个考虑的问题是,这些寄存器是安置入CPU内还是放在内存。一种常见的设计是,把内存最低的数百至千个字用作控制用途。设计者还必须考虑把什么和多少控制信息保存到快速而昂贵的寄存器,把什么和多少其它控制信息保存在慢速而廉价的内存。

指令执行

永远记住,被处理器执行的程序是保存在内存中的一系列相关的指令。指令的执行可以简单的分成两步或两个阶段:取指阶段和执行阶段。一次的取指和执行叫做一个指令周期。程序的执行就是不断进行取指和执行的指令周期。在指令执行阶段,处理器可能会有不同的操作,这取决于指令的性质(nature of instruction)。

 

基本指令周期

在取指阶段开始,CPU会根据程序计数器(前面谈到的指令执行控制寄存器PC)所指定的内存地址内取出指令。如果指令不是跳转指令,那么CPU在取出指令后会自动给PC加一(加本条指令的长度,不是简单的加一),以指示下一条被执行的指令的地址。取出的指令被存入指令寄存器(IR)。CPU的指令解码器解释指令的操作码(CISC操作码还会有额外的位,用以标识操作数性质和寻址方式),控制器根据解码信息再进行相应的处理操作控制。这些处理大概可分为以下四类:

  1. 处理器-内存:数据从处理器(寄存器)搬去内存,或从内存搬数据进处理器(寄存器)。
    KEMIN:如果把数据寄存器也看内存,那这个操作可一般化看成“数据被搬来搬去”。至于“搬数据”对完成“计算任务”有何作用,保留再研究。
  2. 处理器-输入输出:上面的一种特殊情况。
  3. 数据处理:处理对数据进行算术或逻辑操作。
    KEMIN:这个对完成“计算任务”有何作用也保留再研究
  4. 流程控制:指令可以更改处理器执行的流程顺序。比如,处理器从149地址单元取出一条指令A,指令A是一条流程控制指令,功能是指定下一条指令在182地址单元。那么处理器就会把PC设成182,下一个取指阶段处理器就会从182地址取指令。

 

抱歉!评论已关闭.