分享

剑指汇编(二):微机结构

 启云_9137 2020-06-11

一台假想的微型计算机的基本结构。(IA-32架构)

剑指汇编(二):微机结构

中央处理器(CPU)是所有计算和逻辑操作的地方,它包含了数量有限的寄存器、一个高频时钟(clock)、一个控制单元(CU)和一个算术逻辑单元(ALU)。

时钟用于CPU内部操作和其他系统部件的同步。

控制单元(CU)协调执行机器指令时各个步骤的次序。

算术逻辑单元执行加减法等算术运算以及AND、OR和NOT等逻辑运算。

CPU通过插入主板插槽的引脚和计算机的其他部分相连接,大部分引脚和数据总线、控制总线和地址总线相连接。

内存单元(memory storage unit)是计算机程序运行时存放指令和数据的地方。内存存储单元接受CPU的数据请求,从随机存储器(RAM)中取出数据送至CPU,或是把数据从CPU送回存储器中。

总线(bus)是一组用于在计算机各部分之间传送数据的并行线。总线一般由三组独立的总线组成:数据总线、控制总线和地址总线。数据总线在cpu和内存之间传送指令和数据;控制总线(control bus)同步连接到系统总线上的所有设备的动作;如果CPU执行的指令要在CPU和内存之间传送数据那么地址总线(address bus)上保持着指令和数据的地址。

时钟:涉及CPU和系统总线上的每个操作都由一个内部时钟同步这个时钟以固定的频率产生脉冲。机器指令使用的最基本的时间单位称为机器周期(machine cycle)或时钟周期(clock cycle),也就是一个完整的时钟脉冲所需要的时间。机器指令的执行至少需要一个时钟周期。

剑指汇编(二):微机结构

指令执行周期:

单条机器指令的执行可以被分成一系列的独立操作,以下是单条指令执行的一个指令周期:

取指令:控制单元从指令队列中取出指令并递增指令指针(IP)的值。

解码控制单元对指令进行解码以确定该指令要执行什么操作。控制单元把输入操作数传递给算术逻辑单元,并向算术逻辑单元发送信号指明要进行什么操作。

取操作数如果指令使用的输入操作数在内存中控制单元就通过读操作数获取操作数并将其复制到内部寄存器中,这些内部寄存器对用户程序是不可见的。

执行:算术逻辑单元去执行指令以有名寄存器和内部寄存器作为操作数,将运算输出结果送至有名寄存器或内存,然后更新处理的状态标志位。

存储输出操作数:如果输出操作数在存储器中,控制单元通过写操作把数据存储到内存中。

多级流水线

指令执行周期中的每一步至少占用一个时钟周期,但这并不意味着处理器在开始执行下一条指令前必须等待所有操作完成。处理器也可以并行执行其他操作,这就是流水线技术。这里以intel 486处理器为例,intel486有6级流水线,这六级流水线以及他们的执行部件如下所示:

1. 总线接口单元(BIU,Bus Interface Unit):访问存储器并提供输入输出。

2. 代码预取单元(Code Prefetch Unit):从BIU接收机器指令并将其插入到称为指令队列的存储区域。

3. 指令解码单元(Instruction Decode Unit):对预取队列中的机器指令进行解码,将他们翻译成微代码。

4. 执行单元(Execution Unit):执行指令解码单元产生的微代码。

5. 分段部件(Segment Unit):把逻辑地址转换成线性地址并进行保护检查。

6. 分页部件(Paging Unit):把线性地址转换成物理地址,进行页保护检查并保留一个最近的访问页的列表。

以下是一个未使用流水线的处理器的6个执行阶段(假设处理器内的每个执行阶段都需要一个时钟周期)。

剑指汇编(二):微机结构

以上未使用流水线的处理器执行两条指令需要12个时钟周期

再看看下面使用流水线的:

剑指汇编(二):微机结构

以上使用流水线的处理器在同样的时间内可以处理7条指令。

超标量体系结构

超标量或多核心处理有两条以上的执行流水线,使得两条指令能够同时执行。

如果s4阶段需要两个时钟周期会发生什么?看看单条流水线的指令执行情况:

剑指汇编(二):微机结构

以上将会产生一种瓶颈效应,在图中,直到I-1完成S4阶段后I-2才能进入,因此I-2再进入S4阶段前必须等待一个时钟周期,当更多的指令进入流水线时将产生更多的浪费。

超标量处理器允许多条指令可同时处于执行阶段,对于n条流水线的情况,n条指令可以在同一时钟周期内并发执行。

剑指汇编(二):微机结构

以上 奇数编号的指令进入u流水线,偶数编号的指令进入v流水线这就消除了对于时钟周期的浪费。

内存的读取

从内存中读取指令或数据需要以下几个步骤,这是由CPU内部时钟控制的。

下面是读取内存时每个时钟周期内所发生的事情:

周期1:内存操作数的地址位被放到地址总线上

周期2:读取线(RD)设为低(0)以通知存储器要读一个值。

周期3:CPU等待一个周期,给存储器一些时间做出响应。在这个时钟周期内,内存控制器把数据放到数据总线上。

周期4:读取线(RD)变为1,通知CPU在数据总线上读取数据。

缓存(cache memory):由于常规内存与CPU相比是如此的之慢,因此计算机使用高速缓存来存放最近使用的指令和数据。程序第一次读取某块数据时,将在缓存中同时保留一份副本,程序再次读取这份数据时,首先在缓存内查找如果没找到必须从常规内存中查找。缓存集成在CPU内部。

程序是如何运行的

以下是一个在命令行提示符下运行一个程序的情况:

操作系统在当前磁盘目录下查找程序文件名,如果未找到,就在预定义目录列表中查找,还找不到,报错!

如果找到了程序文件名,操作系统获取磁盘上的程序文件名的基本信息,包括文件的大小和在磁盘器上的物理位置

操作系统确定下一个可用的内存块的地址,把程序装入内存,然后将程序的大小和位置等信息登记在描述符表中。

操作系统执行一条分支指令,CPU从程序的第一条机器指令开始执行,这时候,被称为一个进程。操作系统会给这个进程动态分配一个进程ID号,用于在进程的运行期间对其跟踪。

这时进程本身已经开始运行,操作系统的任务是跟踪进程并响应进程对系统资源的请求。系统资源包括内存、磁盘文件和输入输出文件等。

进程结束,其句柄被删除,进程所使用的内存被释放以便被其他程序所使用。

多任务

多任务操作系统能够同时运行多个任务,一个任务可以是一个程序(进程)或一个执行线程。多任务操作系统运行在支持任务切换(task switching)的处理器上。

由于CPU实际上一次只能执行一条指令,操作系统有一个称为调度程序(scheduler)的程序会为每个任务分配一小部分CPU时间(时间片),在一个时间片内,CPU执行一系列的指令,在时间片结束后停止运行。再切换到其他时间片,处理器在切换到另一个任务之前会保存当前任务的状态,任务状态包括处理器寄存器、程序计数器、状态标志以及任务所使用的内容等,以便下次切换到它时能恢复到以前的状态。

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    热点新闻
    类似文章 更多