【book】计算机组成原理

查缺补漏

目录

存储器

指令

中央处理器

IO控制方式


存储器

     内存是半导体触发器结构,外存是磁盘存储,所以速度有差别

    常见的三级存储结构:

1.快速缓冲存储器,它是计算机系统中的一个高速小容量存储器,存放指令和数据。一般由双极型半导体存储器组成。

2.主存储器,一般就是内存,用来存放计算机运行期间的大量程序和数据,一般由MOS半导体存储器组成

3.外存储器,通常用来存放系统程序和大型数据文件和数据库,主要是磁盘存储和磁带存储。

 

 

  • cpu是如何读写内存的?

 

  例如 intel2114静态MOS存储器,2114是一个1K*4的静态RAM,片上共有4096个六管存储元电路,排成64*64的矩阵。因为是1K字,故地址线10位(A0~A9),其中6根(A3~A8)用于行译码,产生64根行选择线;4根(A0,A1,A2,A9)用于列译码,以产生16条列选择线。

     存储器的内部数据通过IO电路以及输入三态门和输出三态门同数据总线IO1~IO4相连,由片选信号CS和写允许信号WE一起控制这些三态门。在片选信号有效(低电平)的情况下,如果写命令有效(低电平),则输入三态门打开,数据总线上的数据信息便写入存储器;如果写命令WE无效,则意味着从存储器读出数据,此时输出三态门打开,数据从存储器读出,送至数据总线上。注意,读操作和写操作是分时进行的,读时不写,写时不读。

    若有多片2114并联(字扩展),如4片,则需要多两条地址线来产生片选信号,将选中片的CS位置为低电平

字扩展例子:

    仅在字向扩充,而位数不变,因此将芯片的地址线、数据线、读写控制线并联,而由片选信号来区分各片地址,故片选信号连接到选片译码器的输出端。下图用16K*8的芯片采用字扩展法组成64K*8位的存储器连接图。图中4个芯片的数据端与数据总线D0~D7相连,地址总线低位地址A0~A13与各芯片的14位地址端相连,而两位高位地址A14,A15经过译码器和4个片选端相连。

                

位扩展例子:(本来只有一条数据总线,扩展几位就多几条)

    下图展示使用8K*1的RAM芯片组成8K*8位的存储器,此时只加大字长,而存储器的字数与存储器芯片字数一致。图中每一片RAM是8192*1故其地址线位13条(A0~A12),可满足整个存储器容量的要求。每一片对应于数据的1位(只有1条数据线),故只需要将它们分别接到数据总线上的相应位即可。对于此方式,没有选片要求,就是说片子按已被选中来考虑,如果片子有CS端,可将它们直接接地。在这种连接时,每一条地址总线接有8个负载,每一条数据线接有1个负载。

               

 

  • 快存(cache)

    

    例子如上图,其中快存M1采用双极型半导体存储器,读出时间为100ns,主存为MOS存储器,读出时间为400ns。存储系统是模块化的,主存的每个8K模块M2有一个16个字的快存与他相联系,快存分为4页,每页4个字,分配给快存的地址存放在一个相连存储器CAM中,后者是按内容寻址的存储器。当CPU形成一个存储请求时,就把所要访问的字的地址送到CAM,如果CAM之处所要访问的字W在快存中,则将W从快存转送到CPU;如果不在,则将W的地址送到主存M2,把W从主存M2传送到CPU,与此同时,把包含W的由前后相继的四个字所组成的一个页面(局部性原理)送入快存M1,它替换了原来在M1中的最近最少使用(LRU)的页面。在这里,由始终管理快存使用情况的专用逻辑线路来实现LRU算法。

 

  • 虚拟内存技术

    对于一台真实的计算机来说,它的虚拟内存空间又有多大呢?计算机虚拟内存空间的大小是由程序计数器的寻址能力来决定的。例如:在程序计数器的位数为32的处理器中,它的虚拟内存空间就为4GB。

    可见,如果一个系统采用了虚拟内存技术,那么它就存在着两个内存空间:虚拟内存空间和物理内存空间。虚拟内存空间中的地址叫做“虚拟地址”;而实际物理内存空间中的地址叫做“实际物理地址”或“物理地址”。处理器运算器和应用程序设计人员看到的只是虚拟内存空间和虚拟地址,而处理器片外的地址总线看到的只是物理地址空间和物理地址。

    由于存在两个内存地址,因此一个应用程序从编写到被执行,需要进行两次映射。第一次是映射到虚拟内存空间,第二次时映射到物理内存空间。在计算机系统中,第两次映射的工作是由硬件和软件共同来完成的。承担这个任务的硬件部分叫做存储管理单元MMU,软件部分就是操作系统的内存管理模块了。

    在映射工作中,为了记录程序段占用物理内存的情况,操作系统的内存管理模块需要建立一个表格即页表,它以虚拟地址为索引,记录了程序段所占用的物理内存的物理地址。页表便是存储管理单元MMU把虚拟地址转化为实际物理地址的依据,页表与存储管理单元MMU的作用如下图所示:    
     

 

综上所述,虚拟内存技术的实现,是建立在应用程序可以分成段,并且具有“在任何时候正在使用的信息总是所有存储信息的一小部分”的局部特性基础上的。它是通过用辅存空间模拟RAM来实现的一种使机器的作业地址空间大于实际内存的技术。

    从处理器运算装置和程序设计人员的角度来看,它面对的是一个用MMU、映射记录表和物理内存封装起来的一个虚拟内存空间,这个存储空间的大小取决于处理器程序计数器的寻址空间。

可见,程序映射表是实现虚拟内存的技术关键,它可给系统带来如下特点:

  1. 系统中每一个程序各自都有一个大小与处理器寻址空间相等的虚拟内存空间;
  2. 在一个具体时刻,处理器只能使用其中一个程序的映射记录表,因此它只看到多个程序虚存空间中的一个,这样就保证了各个程序的虚存空间时互不相扰、各自独立的;
  3. 使用程序映射表可方便地实现物理内存的共享。
     

页面请求与交换
    通常,在页表的表项中还包括装入位(此逻辑页是否在主存中)、修改位(替换时是否要写回外存)等。

    当处理器试图访问一个虚存页面时,首先到页表中去查询该页是否已映射到物理页框中,并记录在页表中。如果在,则MMU会把页码转换成页框码,并加上虚拟地址提供的页内偏移量形成物理地址后去访问物理内存;如果不在,则意味着该虚存页面还没有被载入内存,这时MMU就会通知操作系统:发生了一个页面访问错误(页面错误),接下来系统会启动页面请求机制,即调用相应的系统操作函数,判断该虚拟地址是否为有效地址。

    如果是有效的地址,就从虚拟内存中将该地址指向的页面读入到内存中的一个空闲页框中,并在页表中添加上相对应的表项,最后处理器将从发生页面错误的地方重新开始运行;如果是无效的地址,则表明进程在试图访问一个不存在的虚拟地址,此时操作系统将终止此次访问。

    当然,也存在这样的情况:在页面请求成功之后,内存中已没有空闲物理页框了。这是,系统必须启动所谓地“交换”机制,即调用相应的内核操作函数,在物理页框中寻找一个当前不再使用或者近期可能不会用到的页面所占据的页框。找到后,就把其中的页移出,以装载新的页面。对移出页面根据两种情况来处理:如果该页未被修改过,则删除它;如果该页曾经被修改过,则系统必须将该页写回外存。

快表
    在系统每次访问虚存页时,都要在内存的所有页表中寻找该页的页框,这是一个很费时间的工作。但是,人们发现,系统一旦访问了某一个页,那么系统就会在一段时间内稳定地工作在这个页上。所以,为了提高访问页表的速度,系统还配备了一组正好能容纳一个页表的硬件寄存器,这样当系统再访问虚存时,就首先到这组硬件寄存器中去访问,系统速度就快多了。这组存放当前页表的寄存器叫做快表。

    总之,使用虚拟存储技术时,处理器必须配备一些硬件来承担内存管理的一部分任务。承担内存管理任务的硬件部分叫做存储管理单元MMU。存储管理单元MMU的工作过程如下图所示:

页的共享
    在多程序系统中,常常有多个程序需要共享同一段代码或数据的情况。在分页管理的存储器中,这个事情很好办:让多个程序共享同一个页面即可。

    具体的方法是:使这些相关程序的虚拟空间的页面在页表中指向内存中的同一个页框。这样,当程序运行并访问这些相关页面时,就都是对同一个页框中的页面进行访问,而该页框中的页就被这些程序所共享。下图是3个程序共享一个页面的例子:

页的保护

由上可知,页表实际上是由虚拟空间转到物理空间的入口。因此,为了保护页面内容不被没有该页面访问权限的程序所破坏,就应在页表的表项中设置一些访问控制字段,用于指明对应页面中的内容允许何种操作,从而禁止非法访问。

下图是页表项中存放控制信息的一种可能的形式:

注意:其中的PCD位表示着是否允许高速缓存(cache)

如果程序对一个页试图进行一个该页控制字段所不允许的操作,则会引起操作系统的一次中断——非法访问中断,并拒绝这种操作,从而保护该页的内容不被破坏。

 

 

指令

    指令的形式为操作码+地址码:

    其中操作码指出指令所进行的操作,如加减乘除、取数、存数等,而地址码表示参加运算的数据应从存储器的哪个单元中取来,或运算的结果应该存到哪个单元中去。指令的操作码和地址码是用二进制代码来表示的,其中地址码部分和数据一样,是二进制的数码,而操作码部分则是二进制代码的编码。假定我们只有8中基本指令,那么8种指令的操作码可以用二进制代码来定义,如:

     这样一来,数码化后的指令就可以和数据一样存入存储器,不过一般是将指令和数据分开存放。将指令序列存放在存储器中成为存储程序,而控制器一局存储的程序来控制全机协调地完成计算任务叫做程序控制,存储程序并按地址顺序执行,这就是冯诺依曼型计算机的设计思想。一台计算机通常有几十上百种基本指令,从而构成了这台计算机的指令系统。

    从操作数的物理位置来说,指令可以归结为三种类型。第一种是访问内存的指令格式,我们称这类指令为存储器-存储器(SS)型指令。即其参与操作的数都放在内存里,从内存某单元中取操作数,操作结果存放至内存另一单元中,因此机器执行这种指令需要多次访问内存。第二种是访问寄存器的指令格式,称为寄存器-寄存器(RR)型指令,其执行期间涉及到多个通用寄存器或个别专用寄存器,执行速度很快。第三种称为寄存器-存储器(RS)型指令,即内存和寄存器都要访问到。

 

指令和数据的寻址方式

寻址方式一共包括2类,指令寻址和数据寻址
       指令寻址有2种(顺序型,跳跃型)
       数据寻址有8种(隐含、立即,直接,间接,寄存器直接,寄存器间接,偏移寻址(相对寻址、基质址址、变址寻址),段寻址)
       值得注意的是,内存中的指令寻址与数据寻址是交替进行的。计算机指令格式通常包含操作码和操作数两部分,它们二进制形式存于存储器.

 1.指令寻址
     顺序寻址方式
     由于指令地址在内存中按顺序安排,当执行一段程序时,通常是一条指令接一条指令地顺序进行。也就是说,从存储器取出第1条指令,然后执行这条指令;接着从存储器取出第2条指令,再执行第二条指令;接着再取出第3条指令。
   这种程序顺序执行的过程,称为指令的顺序寻址方式。为此,必须使用程序计数器(又称指令指针寄存器)PC来计数指令的顺序号,该顺序号就是指令在内存中的地址。
    跳跃寻址方式
   当程序转移执行的顺序时,指令的寻址就采取跳跃寻址方式。所谓跳跃,是指下条指令的地址码不是由程序计数器给出,而是由本条指令给出。注意,程序跳跃后,按新的指令地址开始顺序执行。因此,指令计数据的内容也必须相应改变,以便及时跟踪新的指令地址。
    采用指令跳跃寻址方式,可以实现程序转移或构成循环程序,从而能缩短程序长度,或将某些程序作为公共程序引用。指令系统中的各种条件转移或无条件转移指令,就是为了实现指令的跳跃寻址而设置的。

 

  2.操作数寻址
    形成操作数的有效地址的方法称为操作数的寻址方式。由于大型机、小型机、微型机和单片机结构不同,从而形成了各种不同的操作数寻址方式。下面介绍一些比较典型又常用的操作数寻址方式。
隐含寻址

    这种类型的指令,不是明显地给出操作数的地址。而是在指令中隐含着操作数的地址。例如,单地址的指令格式,就不明显地在地址字段中指出第2操作数的地址,而是规定累加寄存器AC作为第2操作数地址。指令格式明显指出的仅是第1操作数的地址D。因此,累加寄存器AC对单地址指令格式来说是隐含地址。

立即寻址

    指令的地址字段指出的不是操作数的地址,而是操作数本身,这种寻址方式称为立即寻址。立即寻址方式的特点是指令执行时间很短,因为它不需要访问内存取数,从而节省了访问内存的时间。[1] 如:MOV AX,5678H 注意:立即数只能作为源操作数,不能作为目的操作数。

直接寻址

    直接寻址是一种基本的寻址方法,其特点是:在指令格式的地址的字段中直接指出操作数在内存的地址。由于操作数的地址直接给出而不需要经过某种变换,所以称这种寻址方式为直接寻址方式。在指令中直接给出参与运算的操作数及运算结果所存放的主存地址,即在指令中直接给出有效地址

间接寻址

    间接寻址是相对直接寻址而言的,在间接寻址的情况下,指令地址字段中的形式地址不是操作数的真正地址,而是操作数地址的指示器,或者说此形式地址单元的内容才是操作数的有效地址。

寄存器寻址方式和寄存器间接寻址方式

    当操作数不放在内存中,而是放在CPU的通用寄存器中时,可采用寄存器寻址方式。显然,此时指令中给出的操作数地址不是内存的地址单元号,而是通用寄存器的编号(可以是8位也可以是16位(AX,BX,CX,DX))。指令结构中的RR型指令,就是采用寄存器寻址方式的例子。如:MOV DS,AX

    寄存器间接寻址方式与寄存器寻址方式的区别在于:指令格式中的寄存器内容不是操作数,而是操作数的地址,该地址指明的操作数在内存中。

相对寻址方式

    相对寻址是把程序计数器PC的内容加上指令格式中的形式地址D而形成操作数的有效地址。程序计数器的内容就是当前指令的地址。“相对”寻址,就是相对于当前的指令地址而言。采用相对寻址方式的好处是程序员无须用指令的绝对地址编程,因而所编程序可以放在内存的任何地方。[1]指令格式:MOV AX,[BX+1200H] 操作数物理地址PA=(DS/SS)*10H+EA EA=*(BX/BP/SI/DI)+(6/8)位偏移量Disp 对于BX,SI,DI寄存器来说段寄存器默认为DS,对于SP来说,段寄存器默认为SS

基址寻址方式

    在基址寻址方式中将CPU中的基址寄存器的内容,加上指令格式中的形式地址而形成操作数的有效地址。基址寻址的优点是可以扩大寻址能力,因为与形式地址相比,基址寄存器的位数可以设置得很长,从而可以在较大的存储空间中寻址。

变址寻址方式

    变址寻址方式与基址寻址方式计算有效地址的方法很相似,它把CPU中某个变址寄存器的内容与偏移量D相加来形成操作数有效地址。

    但使用变址寻址方式的目的不在于扩大寻址空间,而在于实现程序块的规律变化。为此,必须使变址寄存器的内容实现有规律的变化(如自增1、自减1、乘比例系数)而不改变指令本身,从而使有效地址按变址寄存器的内容实现有规律的变化

段寻址方式

    在寻址一个内存具体单元时,由一个基址再加上某些寄存器提供的16位偏移量来形成实际的20位物理地址。这个基址就是CPU中的段寄存器。在形成20位物理地址时,段寄存器的16位的数会自动左移4位,然后与16位偏移量相加,即可形成所需的内存地址。这种寻址方式的实质还是基址寻址。

 


 

中央处理器

摘自https://blog.csdn.net/chen1083376511/article/details/81941318

    控制器的基本任务,就是按照计算机程序所排的指令序列,先从存储器取出一条指令放到控制器中,对该指令的操作码由译码器进行分析判别,然后根据指令性质,执行这条指令,进行相应的操作。接着从存储器取出第二条指令,再执行这第二条执行。依次类推。通常把取指令的一段时间叫做取指周期,而把执行指令的一段时间叫做执行周期。因此,控制器反复交替地处在取指周期与执行周期之中,每取出一条指令,控制器中的指令计数器pc就加1,从而为取下一条指令做好准备。

     在计算机术语中,通常把运算器和控制器合在一起称为中央处理器,简称CPU,而将CPU和存储器合在一起称为主机。

  • CPU具有的功能

指令控制:由于程序是一个指令序列,这些指令的相互顺序不能任意颠倒,必须严格按程序规定的顺序进行。

操作控制: CPU管理并产生由内存取出的每条指令的操作信号,把各种操作信号送往相应部件,从而控制这些部件按指令的要求进行动作。

时间控制:对各种操作实施时间上的定时。

数据加工:对数据进行算术运算和逻辑运算处理。
 

  • CPU的基本组成

    cpu主要由控制器和运算器构成。

控制器:程序计数器、指令寄存器、指令译码器、时序产生器和操作控制器组成。

控制器的功能:

(1)从指令cache(或内存)中取出一条指令,并指出下一条指令在指令cache(或内存)中的位置。

(2)对指令进行译码或测试,并产生相应的操作控制信号,以便启动规定的动作。比如一次数据cache(或内存)的读/写操作,一个算术逻辑运算操作,或一个输入/输出操作。

(3)指挥并控制CPU、数据cache(或内存)和输入/输出设备之间数据流动的方向。

运算器:算术逻辑单元(ALU)、通用寄存器、数据缓冲寄存器DR和状态条件寄存器PSW组成。

运算器的功能:

(1)执行所有的算术运算。

(2)执行所有的逻辑运算,并进行逻辑测试,如零值测试或两个值的比较。

通常,一个算术操作产生一个运算结果,而一个逻辑操作则产生一个判决。

  • CPU中的主要寄存器

(1)数据缓冲寄存器(DR)

数据缓冲寄存器用来暂时存放ALU的运算结果,或由数据存储器读出的一个数据字,或来自外部接口的一个数据字。缓冲寄存器的作用是:

1.作为ALU运算结果和通用寄存器之间信息传送中时间上的缓冲;

2.补偿CPU和内存、外围设备之间在操作速度上的差别。

(2)指令寄存器(IR)

指令寄存器用来保存当前正在执行的一条指令。

1.当执行一条指令时,先把它从指令cache存储器(简称指存)读出,然后再传送至指令寄存器。

2.对操作码进行测试,以便识别所要求的操作。(指令译码器的工作)指令寄存器中操作码字段的输出就hi指令译码器的输入。

3.操作码一经译码之后,即可向操作控制器发出具体操作的特定信号。

(3)程序计数器(PC)

为了保证程序能够连续地执行下去,CPU必须具有某些手段来确定下一条指令的地址。

1.程序执行之前,必须将它的起始地址(第一条指令所在的内存单元地址)送入PC,因此PC的内容即是从内存提取的第一条指令的地址。

2.当执行指令时,CPU将自动修改PC的内容,以便使其保持的总是将要执行的下一条指令的地址。

3.由于大多数指令都是按顺序来执行的,所以修改的过程通常只是简单的对PC加1.

    但是,当遇到转移指令如JMP指令时,那么后继指令地址(即PC内容)必须从指令寄存器中的地址字段取得。这种情况下,下一条从内存取出的指令将由转移指令来规定,而不是像通常一样按顺序来取得。

(4)数据地址寄存器(AR)

用来保存当前CPU所访问的数据cache存储器中(简称数存)单元的地址。

1.作用:由于(内存与CPU之间存在着操作速度上的差别)要对存储器阵列进行地址译码,所以必须使用地址寄存器来保持地址信息,直到一次读/写操作完成为止。

2.信息的存入一般采用电位-脉冲方式,即电位输入端对应数据信息位,脉冲输入端对应控制信号。(结构和数据缓冲寄存器、指令寄存器不一样)

3.在控制信号作用下,瞬时地将信息打入寄存器。

(5)通用寄存器(R0~R3)

当算术逻辑单元(ALU)执行算术或逻辑运算时,为ALU提供一个工作区。

例如:在执行一次假发运算时,选择两个操作数(分别放在两个寄存器)相加,所得的结果送回其中一个寄存器(如R2)中,而R2中原有的内容即被替换。

在众多通用寄存器中,其中任何一个可存放源操作数,也可存放结果操作数。

(6)状态字寄存器(PSW)

功能:

1.保存由算术指令和逻辑指令运算或测试结果建立的各种条件代码。

如:运算结果进位状态(C),运算结果溢出标志(V),运算结果为零标志(Z),运算结果为负标志(N)。这些标志通常为1位触发器保存。

2.保存中断和系统工作状态等信息,以便使CPU和系统能及时了解机器运行状态和程序运行状态。因此,状态条件寄存器是一个由各种状态条件标志拼凑而成的寄存器。
 

  • 指令周期

指令周期:取出一条指令并执行这条指令的时间。

单周期:在一个CPU周期中完成取指和执行操作(少数指令可实现)。

多周期:大多数指令需要在多个CPU周期中完成指令周期的全部操作。

五条基本指令

一、MOV指令(传送指令,RR型)

MOV RO,R1

MOV执行(R1)->R0

二、LAD指令(取数指令,RS型

LAD R1,6

LAD从数存6号单元取数(100)->R1

三、ADD指令(加法指令,RR型)

ADD R1,R2

ADD执行(R1)+(R2)->R2,结果为(R2)=120

四、STO指令(存数指令,RS型

STO R2,(R3)

STO用(R3)间接寻址,(R2)=120写入数存30号单元

五、JMP指令(转移指令)

无条件转移指令,用来改变程序的执行顺序。

JMP 101

JMP改变程序执行顺序到101号单元

 

以MOV为例子,展示一下过程:

MOV取指周期

1.程序计数器PC中装入第一条指令地址101(八进制);

2.PC的内容被放到指令地址总线ABUS(I)上,对指存进行译码,并启动读命令;

3.从101号地址读出的MOV指令通过指令总线IBUS装入指令寄存器IR;

4.程序计数器内容加1,变成102,为取下一条指令做好准备。

5.指令寄存器中的操作码(OP)被译码;

6.CPU识别出是MOV指令。至此,取指周期即告结束。

MOV执行周期

1.操作控制器(OC)送出控制信号到通用寄存器,选择R1(10)作源寄存器,选择R0作目标寄存器;

2.OC送出控制信号到ALU,指定ALU做传送操作;

3.OC送出控制信号,打开ALU输出三态门,将ALU输出送到数据总线DBUS上。注意,任何时候DBUS上只能有一个数据。

4.OC送出控制信号,将DBUS上的数据,入到数据缓冲寄存器DR(10);

5.OC送出控制信号,将DR中的数据10打入到目标寄存器R0,R0的内容由00变为10.至此,MOV指令执行结束。

 

  • 时序产生器

    时序产生器是CPU中一个类似"作息时间"的东西,使计算机可以准确、迅速、有条不紊地工作。机器一旦被启动,即CPU开始取指令并执行指令时,操作控制器就利用定时脉冲的顺序和不同的脉冲间隔,有条理、有节奏地指挥机器的动作,规定在这个脉冲到来时做什么,在那个脉冲到来时又做什么,给计算机 各部分提供工作所需的时间标志。为此,需要采用多级时序体制。从时间上来说,取指令事件发生在指令周期的第一个CPU周期中,即发生在“取指令”阶段,而取数据事件发生在指令周期的后面几个CPU周期中,即发生在“执行指令”阶段。从空间上来说,如果取出的代码是指令,那么一定送往指令寄存器,如果取出的代码是数据,那么一定送往运算器。由此可见,时间控制对计算机来说是太重要了。    

    在一个CPU周期中,又把时间分为若干个小段。

    操作控制器发出的各种控制信号都是时间因素(时序信号)和空间因素(部件因素)的函数。

    例子:当实现寄存器之间的数据传送时,数据加在触发器的电位输入端,而打入数据的控制信号加在触发器的时钟输入端。电位的高低,表示数据是1还是0,而且要求打入数据的控制信号到来之前,电位信号必须已稳定。这是因为,只有电位信号先建立,打入到寄存器中的数据才是可靠的。当然,计算机中有些部件,如算术逻辑运算单元ALU只用电位信号工作就可以了。但是尽管如此,运算结果如此,运算结果还是要送入通用寄存器,所以最终还是需要脉冲信号来配合。

时序信号产生器组成部分:

(1)时钟源

时钟源的组成部分:石英晶体振荡器和与非门组成的正反馈振荡电路

用来为环形脉冲发生器提供频率稳定且电位匹配的方波时钟脉冲信号。

(2)环形脉冲发生器

产生一组有序的间隔相等或不等的脉冲序列,以便通过译码电路来产生最后所需的节拍脉冲。

(3)节拍脉冲和存储器读/写时序

在一个CPU周期中产生四个等间隔的节拍脉冲。

存储器读/写时序信号用来进行存储器的读/写操作。

(4)启停控制逻辑

1.对读/写时序信号也需要由启停逻辑加以控制。

2.启停控制逻辑的核心是一个运行标志触发器。

3.由于启动计算机是随机的,停机也是随机的。当计算机启动时,一定要从第一个节拍脉冲前沿开始工作,而在停机时一定要在第4个节拍脉冲结束后关闭时序产生器。
 

控制方式

含义:控制不同操作序列信号的方法

1.同步控制方式

含义:在任何情况下,已定的指令在执行时所需的机器周期数和时钟周期数都是固定不变的。

同步控制方式可选方案:

(1)采用完全统一的机器周期执行各种不同的指令。

具有相同的节拍电位数和相同的节拍脉冲数。(对简单指令和简单操作造成浪费)

(2)采用不定长机器周期。

大多数操作在较短机器的周期完成,对一些时间紧张的操作,采取延长机器周期。

(3)中央控制与局部控制结合。

中央控制:将大部分指令安排在固定的机器周期完成。

局部控制:对少数复杂指令(乘、除、浮点运算)采用那个另外的时序进行定时。

2.异步控制方式

特点:每条指令、每个操作控制信号需要多少时间就占用多少时间。没有固定的CPU周期数(节拍电位)或严格的时钟周期(节拍脉冲)与之同步。

3.联合控制方式

含义:同步控制方式和异步控制方式结合。

两种情况:

(1)大部分操作序列安排在固定的机器周期中,对某些时间难以确定的操作则以执行部件的“回答”信号作为本次操作的结束。

(2)机器周期的节拍脉冲数固定,但是各条指令周期的机器周期数不固定。
 

  • 流水线

http://m.elecfans.com/article/657563.html

计算机体系结构教材中被提及最多的经典MIPS五级流水线如图1所示。

一文读懂处理器流水线

在此流水线中一条指令的生命周期分为:

取指:

指令取指(Instruction Fetch)是指将指令从存储器中读取出来的过程。

译码:

指令译码(Instruction Decode)是指将存储器中取出的指令进行翻译的过程。经过译码之后得到指令需要的操作数寄存器索引,可以使用此索引从通用寄存器组(Register File,Regfile)中将操作数读出。

执行:

指令译码之后所需要进行的计算类型都已得知,并且已经从通用寄存器组中读取出了所需的操作数,那么接下来便进行指令执行(Instruction Execute)。指令执行是指对指令进行真正运算的过程。譬如,如果指令是一条加法运算指令,则对操作数进行加法操作;如果是减法运算指令,则进行减法操作。

在“执行”阶段的最常见部件为算术逻辑部件运算器(Arithmetic Logical Unit,ALU),作为实施具体运算的硬件功能单元。

访存:

存储器访问指令往往是指令集中最重要的指令类型之一,访存(Memory Access)是指存储器访问指令将数据从存储器中读出,或者写入存储器的过程。

写回:

    写回(Write-Back)是指将指令执行的结果写回通用寄存器组的过程。如果是普通运算指令,该结果值来自于“执行”阶段计算的结果;如果是存储器读指令,该结果来自于“访存”阶段从存储器中读取出来的数据。

    在工业制造中采用流水线可以提高单位时间的生产量,同样在处理器中采用流水线设计也有助于提高处理器的性能。以上述的五级流水线为例,由于前一条指令在完成了“取指”进入“译码”阶段后,下一条指令马上就可以进入“取指”阶段,依次类推,如图2所示,如果流水线没有停顿,理论上可以取得每个时钟周期都完成一条指令的性能。

一文读懂处理器流水线

 

流水线的问题:

1、多个任务在同一时间周期内争用同一个流水段
    例如,假如在指令流水线中,如果数据和指令是放在同一个储存器中,并且访问接口也只有一个,那么,两条指令就会争用储存器;在一些算数流水线中,有些运算会同时访问一个运算部件。
2、数据依赖
    比如,A运算必须得到B运算的结果,但是,B运算还没有开始,A运算动作就必须等待,直到A运算完成,两次运算不能同时执行。
3、 条件转移的影响
    如果第一条指令是一个条件转移指令,那么系统就会不清楚下面应该执行那一条指令。这时就必须等第一条指令的判断结果出来才能执行第二条指令。条件转移所造成的流水线停顿甚至比相关还要严重的多。
    越是长的流水线,相关和转移两大问题也越严重,所以,流水线并不是越长越好,超标量也不是越多越好,找到一个速度与效率的平衡点才是最重要的。

tips:

    寄存器的存取速度比存储器快得多,如果用寄存器操作代替存储器访问,则将大大提高处理速度。为了改善流水线工作情况,避免数据相关,流水线计算机中通常采用内部向前原理:在一序列的取数、运算、存数操作中,采取“短路”技术,用寄存器之间的直接传送代替不必要的存储器存取操作。

    其次,一段程序中,各条指令的顺序安排对发挥流水线的效率有很大影响,例如把相关指令和不相关指令恰当地混合,就能更有效地发挥流水线的并行处理特性,这个任务一般可由编译程序来完成。(这里涉及到violate关键字和rmb内存屏障的相关知识)

 

  • 系统总线

    计算机的各种部件想要进行数据交互,就必须让这些部件形成一定的连接关系,以便数据交互的进行。
连接的方式有两种,一种是各个部件之间使用不同的线相互连接,很明显,这种交互方式有很大的弊端,如连线复杂造成的控制复杂,还有就是当部件较多的情况下,简直就是个灾难。所以就催生了另外一种连接方式——总线连接,也就是我们这一讲要讲述的东西。
    总线连接是指,将所有就的部件连接在一组公共的信息传输线上,这样做就避免了上面那种传输方式的弊端。现代计算机几乎所有的都是采用总线连接。

总线的结构:

1.单总线结构
    这里写图片描述

    这种结构中,只有一条总线:系统总线。计算机中的所有设备都连接在这条总线上。这种方式的优点基本可以忽略了,缺点太多:
    当CPU进行数据处理的时候,非常容易被打断,类似于上面的情况,就导致了CPU的效率过低;如果计算机中有很多的设备,很难想象这条总线要长到什么程度,总线越长,延迟越高;最后,这么多的设备,只有一条系统总线,典型的狼多肉少,这些设备之间一定会打架的。

2.双总线结构

这里写图片描述

    这种结构保持了单总线系统简单、易于扩充的优点,但又在CPU和内存之间专门设置了一组高速的存储总线,使CPU可通过专用总线与存储器交换信息,并减轻了系统总线的负担。同时内存仍可通过系统总线与外设之间实现DMA操作,而不必经过CPU。当前高档微型机中广泛采用了这种总线结构。

3.三总线结构

    是在双总线系统的基础上增加IO总线形成的。其中系统总线是CPU、内存和通道(IOP)之间进行数据传送的公共通路,而IO总线是多个外部设备与通道之间进行数据传送的公共通路。

总线控制

https://blog.csdn.net/yanmiao0715/article/details/80388991

    总线的控制主要是两个方面的内容。
    首先,我们可以想象到,当某一个时间点上,有了多个设备同时发出总线的占用请求,那么总线应该去响应哪一个设备的占用请求呢?再者,我们讲了,在信息传输的过程中,不可避免的会出现信息丢失,如何保证数据传输的完整性呢?这就是我们要讨论的第一个问题——总线的判优控制。
其次,虽然总线的判优控制解决了总线应该与哪一个设备交互的问题,但是还是存在这样一个问题的:两个设备,一个主设备(对总线有控制权的设备)和一个从设备(只能响应从总线发来的命令)进行交互的时候,主设备何时占用传输数据?从设备何时发送响应数据?这就是我们要讲的第二个问题,也就是总线的通信控制。它的作用就是解决通信双方的协调配合的问题。

    总线的判优控制
    具体的讲,总线的判优控制共有两种方式,一种是集中式,将所有的控制逻辑集中在一个部分;另外一种是分布式,也就是将控制逻辑集中在各个部分。而分布式并不常见,这里只介绍集中式的判优控制。

1.链式查询

    首先来说明一下这张图片上各个英文名称的意义。BS:总线忙,也就是当前总线正在被使用;BR:总线请求:设备的总线请求信号就是从这条线上发出的;BG:总线同意,当总线同意设备的占用请求时,同意信号将会从这里发出。
链式查询方式,顾名思义,就是将所有设备像链子一样串联起来。
工作流程如下:某一个设备检测到当前总线空闲,则通过BR线向总线发出占用请求,当总线控制部件收到了占用请求后,他只知道收到了占用请求,却不知道是哪个设备发出的占用请求;此时就会通过总线同意BS线查询,直到查找到发送总线占用请求的设备即停止。
    可以看到,这种判优控制中,设备的优先级是按照位置确定的,总是离总线最近的那个设备会有限被查找到。也就是说,最后一个设备可能永远无法占用到总线。这就非常坑了,如果无法占用总线,也就代表着无法正常工作,那还要这个设备做什么呢?
还有一点,前面说了,这些设备是串联起来的,通过一根BS线,那么,当BS线某处发生了损坏,则查询将无法进行。

这里写图片描述

2.计数器定时查询

    很明显,第一种链式查询方式在实际使用中肯定是各种问题,这种方式能够大大的改进种种情况。
相比较于链式查询方式,这种方式去掉了BG(总线同意)线,而增加了设备地址线,也就是定时查询计数所指示的那条线。
当总线接收到BR线的请求信号后,在总线未被占用的情况下,总线控制部件中的计时器开始计数,通过设备地址线向设备发送地址,当某设备地址与发送请求的设备地址一致时,设备则获得总线控制权,计数器停止计数。
如果在查找过程中,当前计数地址与发送请求的设备地址没匹配上,则计数器+1,直到找到这个设备为止。
这个计数器的值是可以通过软件来设定的,这样,就能够人为的确定设备的优先级。
【注】这种方式的设备地址线的条数为[log2n]条(n为设备数)。

这里写图片描述

3.独立请求方式

    这种方式就非常有意思思了,简单的讲,就是将总线请求(BR)和总线同意(BG)线给每个设备都分配一下,当然,每个设备都需要连接一下地址线和数据线。
总的过程和上面的方式没有太大区别,主要的区别在于,这里的优先权控制变成了排队器,给每个请求排队,然后再执行。当然,这种方式是很有好处的,最起码执行速度非常的快,但是,一旦设备过多,那又变成了灾难。
这里写图片描述

  • 外围设备

    每一种外围设备,都是在它自己的设备控制器下进行工作,而设备控制器则通过接口和主机连接,并受主机控制。

 

IO控制方式

    为了有效地实现物理I/O操作,必须通过硬件和软件技术,对 CPU 和 I/O 设备的职能进行合理的分工,以调节系统性能和硬件成本之间的矛盾。

随着计算机技术的发展,I/O 控制方式也在不断发展。选择和衡量 I/O 控制方式有如下三条原则:

(1) 数据传送速度足够快,能满足用户的需求但又不丢失数据;

(2) 系统开销小,所需的处理控制程序少

(3) 能充分发挥硬件资源的能力,使 I/O 设备尽可能忙,而 CPU 等待时间尽可能少。

    按照I/O控制器功能的强弱以及和 CPU 之间联系方式的不同,可以把 I/O 设备的控制方式和通道控制方式分为四类:直接程序控制方式、中断驱动控制方式、直接存储器访问(DMA)控制方式和通道控制方式。I/O控制方式发展的目标是尽量减少CPU对 I/O 控制的干预,把CPU从繁杂的 I/O 控制事务中解脱出来,以便更多地进行数据处理,提高计算机效率和资源的利用率。它们之间的主要差别在于 CPU 与外围设备并行工作的方式和程度不同。
四种控制方式详见https://blog.csdn.net/yingshuanglu2564/article/details/82881770

 

  • 1
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值