基本微机设计

x86架构cpu x86架构cpu电路图_操作数


上图给出假想机的基本设计。中央处理单元(CPU)是进行算术和逻辑操作的部件,包含了有限数量的存储位置————寄存器,一个高频时钟,一个控制单元和一个算术单元。

时钟:对CPU内部操作与系统其他组件进行同步

控制单元:协调与机器指令执行的步骤序列。

算术逻辑单元:ALU执行算术运算,如加法和减法,以及逻辑运算,如AND,OR,NOT.

CPU通过主板上CPU插座的引脚与计算机其他部分相连。大部分引脚连接的是数据总线,控制总线和地址总线。
内存存储单元用于再程序运行时保存指令和数据。它接受来自CPU的数据请求,将数据从随机存储器传输到CPU并从cCPU传输到内存。由于所有的数据处理都是在CPU内进行,因此保存在内存中的程序在执行前需要被复制到CPU中。程序指令在复制到CPU时,可以一次复制一条,也可以一次复制多条。

指令执行周期

一个机器指令不会神奇的一下执行完成。cpu在执行一条机器指令时,需要经过预先定义好的步骤。,这些步骤被称为指令执行周期。假设现在指令寄存器中已经有了想要执行指令的地址,下面就是执行步骤:

  • 1.cpu从被称为指令队列的内存区域取得指令,之后立即增加指令指针的值。
  • 2.cpu对指令的二进制位模式进行译码。这种位模式可能辉表示该指令有操作数(输出值)。
  • 3.如果有操作数,CPU就从寄存器和内存中取得操作数。有时,这步还包括了地址计算。
  • 4.使用步骤3得到的操作数,cpu执行该指令。同时更新步伐状态标准位,如零标志,进位标志和溢出标志。
  • 5.如果输出操作数也是该指令的一部分,则CPU还需要存放其执行结果

通常将上述听起来很复杂的过程简化为三个步骤:取指,译码和执行。

x86架构cpu x86架构cpu电路图_加载_02

读取内存

计算机从内存读取数据比内部寄存器读取速度要慢很多。这是因为从内存读取一个值,需要经过以下几个步骤

  1. 将想要读取的值得地址放到地址总线上
  2. 设置处理器RD(读取)引脚(改变RD的值)
  3. 等待一个时钟周期给存储器芯片进行响应
  4. 将数据从数据总线复制到目标操作数。

上述每一步通常都需要一个时钟周期。时钟周期是基于处理器内固定速率时钟节拍的一种时间测量方法。计算机的CPU通常用时钟速率来描述。例如速率为1.2GHz意味着时钟节拍或振荡为每秒12亿次。因此每个时钟周期仅为1/12亿秒,4个时钟周期也是非常快的。但是与CPU寄存器相比还是太慢了,因为访问寄存器一般只需要1个时钟周期。

幸运的是,CPU的设计者很早之前就指出,因为大多数程序需要访问变量,计算机内存成了速度瓶顶。他们想出了一个聪明的方法来减少读写内存的时间,将大多数近期使用过的指令和数据放在高速缓存器(cache)中。其思想是,程序更可能的希望反复访问相同的内存和指令,因此cache保存这些值就能使它们快速访问到。当CPU开始执行一个程序,它会预先将后续(比如)一千条指令加载到cache中,这个行为是基于一种假设,即这些指令很快会被用到。如果这种情况重复发生在一个代码块里,则cache中就有相同的指令,当处理器能够在cache中发现想要的数据,称为cache命中,反之没找到就是cache未命中。

x86系列cache存储器有两种:

  • 一级cache(主cache)位于CPU上
  • 二级cache速度略慢

加载并执行程序

在程序执行之前,需要用一种工具将其加载到内存,这种工具程序被称为程序加载器(program loader)。加载后,操作系统必须将CPU指向程序入口,即程序开始执行的地址。以下步骤是对这一过程的详细分解

  1. 操作系统在当且磁盘下搜索程序的文件名,如果找不到,则在预定的列表(或者路径)下搜索文件名,当OS无法检索到文件名时,它就会发出一个错误信息
  2. 如果程序文件被找到,OS就访问磁盘目录的程序文件基本信息,包括文件大学,以及其在物理磁盘驱动器上的物理位置。
  3. OS确定内存中下一个可使用位置,将程序加载到内存,为该程序分配内存块,并将程序大小和位置信息加入到表中(有时也称描述表desciptor table)。另外OS可能会调整程序内存指针的值,使它们包括程序数据地址。
  4. OS开始执行程序第一条机器指令(即程序入口)。当程序开始执行后,就成为一个进程(process)。OS为这个进程分配一个标识号(进程ID),用于执行期间对其进行跟踪。
  5. 进程自动运行。OS的工作是追踪进程的执行,并影响系统资源的请求。这些包括内存,磁盘文件和输入输出设备等。 进程结束后,就会从内存移除。