计算机组成原理(二)

一、只读存储器(ROM)

  • 掩模ROM(MROM):不可自定义信息,信息由厂家生产之前规定好!
  1. 储存矩阵的行列交叉点有mos管为1,没有为0。
  • PROM(一次性编程):仅允许自定义存入信息一次。
  1. 行列选择线连接到一根熔丝,如果想要储存0信息,就用高电流把熔丝烧断,熔丝连接状态为1,熔丝熔断后状态不可逆。
  • EPROM(可擦除编程)
  1. 采用N型沟道浮动栅MOS电路

G端有电则s端和d端都有电,如果D端加正电压,则形成浮动栅,S和D之间不导通为0;如果D端不加正电压,不形成浮动栅,则S与D导通为1 

如果想要消除浮动栅,擦除信息,需要通过紫外线照射,物理擦除

  • EEPROM(多次性编程):电可擦写、局部擦写、全部擦写
  • Flash Memory(闪存型储存器):现多采用此种方式,制作U盘、硬盘和主存之间的缓冲器等。

二、储存器的扩展

CPU通常需要大量数据,而单个的数据储存芯片无法做到,这时就需要我们用多个储存芯片连接来扩展储存器的容量

(一)位扩展(扩展每个存储单元的存储字长)

情况假定:CPU连接储存器的地址线有10根,数据线有8根,这就要求存储单元的容量是1K * 8位,给定存储芯片容量为1K * 4位,我们要按照下图进行每个存储单元的位扩展,将4位扩展到8位。

A0-A9是连接到存储器的10根地址线,D0-D7是连接到存储器的8根数据线;

通过观察我们发现,两个芯片分别连接到了8根地址线,但是两个芯片却平分了数据线进行连接,这是为什么?因为:1.两个芯片对于CPU来说是一个存储器,所以地址线是面对两个芯片的,译码器译码后选中的储存单元两个芯片的位置是一样的,但是存储数据时,因为每个芯片的每个单元只有4位,所以只能连接4根数据线,共同返回或储存自己的四位数据构成八位数据。

注意,两个芯片连接的数据线必须是有序的,一个前四根,一个后四根,分别储存8位数的高位和低位

要实现位扩展,就要将两个芯片接入相同的片选线和相同的读写控制线,对外作为一个存储器;

当有电流信号进入时,片选线首先确定是该储存器,然后读写控制信号反馈读写控制(假定为存入操作),则数据会通过 对应数据线存入两个芯片相同地址的存储单元,完成数据存储操作。

(二)字扩展(扩展储存单元的数量)  

假定我们有11根地址线,8根数据线,芯片容量为1K * 8位的存储芯片(可见我们芯片的存储字长满足要求但是存储单元数量不满足要求,2^11是2K个存储单元,所以我们需要两个芯片来构成一个存储单元),存储器结构见下图:

跟位扩展不同,位扩展是对外存储单元数量一致,把两个芯片的两个存储单元都映射到同一个地址上;字扩展是直接扩展存储单元数量,所以两个存储单元应该映射不同的存储地址 (即不能同时工作),这就用到了A10这个第十一条地址线,当其为1时,将地址信息映射到右边的存储芯片上,当为0时映射到左边存储芯片上,这样就平分了2K得存储单元(这时的A10线就起到了片选线的作用)在A10为1时需要将1通过非门转换为0,不然地址线经过译码器后最小的行选线就是2^10不合理

同样两个存储芯片因为不能同时工作,切存储字长满足要求,每个芯片都接了8根数据线

(三)同时扩展位、字(同时扩展字长和字数量)

我们假定:有12根地址线8根数据线,存储芯片为1K * 4位2^12等于4K8位需要2个存储芯片)我们可以做出下面组合。

我们可以用两个芯片组成一个小存储器满足8位存储字长的要求

我们可以用4组上面的小存储器构成存储器,满足存储器4K得要求

因为一共有四组,我们就需要两个片选线和一个译码器来根据片选线内容来选中不同的组进行读写 ;

我们一共有2^12个地址,我们用A10-A11这两个地址线来作为片选线;0011....00(一共12位)~0011.....11(12位)指向第一组小存储单元,010....000~011.....111指向第二组,100....00~101....111指向第三组,110....000~111....111指向第四组;如此将所有地址分配完毕;可以看出来最高两位决定了地址指向的储存单元00为第一组;01为第二组;10为第三组;11为第四组;

三、CPU与存储器的连接

主要关注下面几个方面:

  1. CPU的地址线条数和存储器的适配;

  2. 数据线跟存储器的适配;

  3. 读/写命令线的连接,注意ROM只有读命令没有写命令;

  4. 片选线一般用高位地址线代替,同时要体现是选择储存器的相关信息,用于区别连接I/O设备。

  5. 合理选择储存芯片,尽量用更少的芯片。

  6. 同时要考虑芯片本身的时序和负载

CPU用MREQ实现了储存信号控制,当MREQ线为低电平时则CPU访问的是存储器;如果MREQ是高电平则CPU访问的是I/O;

(一)例题解析1:CPU有16根地址线(说明CPU寻址范围是16K),        有8位数据线(说明每次CPU读/写数据都是8位),用MREQ来作为访问控制信号(MREQ是低电平有效,即低电平时,代表CPU是访问存储器的);给定存储芯片:RAM(1K * 4位、4K * 8位、8K * 8位)、ROM(2K * 8位、4K * 8位、8K * 8位);对存储体的要求是:6800-6BFF(16进制表示的地址范围)是用户程序区,6000-67FFH(16进制表示的地址范围)是系统程序区。译码器要求使用138译码器;

1、先将16进制的地址转换成2进制的地址范围(16根地址线,每根代表0/1);

A15 A14 A13     A12 A11 A10      A9 A8 A7     A6 A5 A4       A3 A2 A1    A0

0      1       1         0     0     0         0    0    0      0    0    0         0   0    0      0

0       1       1        0     0      1         1      1     1      1     1     1        1     1    1      1

0       1       1        0      1      0         0    0    0      0    0     0        0    0    0     0

0      1         1        0      1     0          1     1    1        1    1      1        1      1    1    1

  • 可见系统程序区的地址范围的变化主要发生在A0到A10之间,那么这11条线作为系统程序区内部的地址线;
  • 用户程序区的地址范围变化主要发生在A0-A9之间,所以这10条线可以作为用户程序区的内部地址线。

2、分析138译码器结构(其是用低电平表单选中状态的):

  • 使能端结构:

S1为高电平(1),并且S2和S3为低电平(0)时,译码器才能够使用,圆圈是非门;

  • 整体结构

输入端有ABC三条地址线,一共有2^3=8种结果,分别对应Y0-Y7一共8个输出端。 

3、分配地址线和138译码器的连接,实现片选逻辑和CPU连接目标判断

  • 导通138译码器,A14(1)连接S1端,A15(0)连接S2端,MREQ线连接S3;如果要导通138译码器,必须保证MREQ线为低电平,否则不导通,即CPU连接地址非储存器;
  • 将A11-A13分别接入A、B、C输入端,在译码器导通的情况下,当A11-A13为100时,Y4被选中,Y4指向ROM(即系统程序区);当A11-A13为101时,Y5被选中,Y5指向RAM(即用户程序区),同时注意因为RAM地址线比ROM少一个A10,所以我们要在Y5被选中后,保证A10地址线也是低电平(因为RAM A10线都是0),才指向RAM,这就双重保证,也不会让A10无流入情况出现。
  • 由上面情况,我们画出下图:

  • 当ROM被选中时,ROM连接数据线的方向是单向的,因为只能读,而两个1K * 4位RAM组成的RAM则是双向的,可读可写。 

(二)例题改编:CPU有16根地址线(说明CPU寻址范围是16K),        有8位数据线(说明每次CPU读/写数据都是8位),用MREQ来作为访问控制信号(MREQ是低电平有效,即低电平时,代表CPU是访问存储器的);给定存储芯片:RAM(1K * 4位、4K * 8位、8K * 8位)、ROM(2K * 8位、4K * 8位、8K * 8位);对存储体的要求是:最小的4K是系统程序区,相邻的8K是用户程序区。译码器要求使用138译码器;

1、分析地址范围的2进制表示

  • 一共是8+4=12K个存储单元,我们至少需要2^14位=2^10 * 2^4一共14根地址线,这里有16根地址线能够实现,因为0到4K要占用12根地址线,剩下的线可以用来作为片选逻辑和138译码器的导通判断线。​​​​​​​

A15 A14 A13     A12 A11 A10      A9 A8 A7     A6 A5 A4       A3 A2 A1    A0

0       0      0        0     0     0         0    0    0      0    0    0         0   0    0      0

0       0       0       0     1     1         1      1     1      1     1     1        1     1    1      1

0       0       0       1      0     0         0    0    0      0    0     0        0    0    0     0

0       0       0        1      1     1         1     1    1        1    1      1        1      1    1    1

0       0       1       0      0     0         0    0    0      0    0     0        0    0    0     0

0       0       1        0      1     1         1     1    1        1    1      1        1      1    1    1

  • 前两行是系统程序区的地址范围,可见内部地址线位A0-A11;
  • 因为是与系统程序区相邻的8k同时结合给定存储芯片考虑,3行 和4行是第一个用户程序区的范围,大小为4K;
  • 第5行和第6行,是用户程序区范围,大小为4K;
  • 由上我们:系统程序区选用1个4K*8位的ROM储存芯片;用户程序区选用2个4K*8位的RAM芯片,分别对应4K得储存地址;

2、分析138译码器的导通和片选线的确定;

  • 分析可知A12-A14三个地址线可以作为片选线连接138译码器的输入端(A、B、C)。当A12-A14为0时,Y0导通,指向4K*8位的ROM;当A12-A14为1时,Y1导通,指向第一个4K*8位的RAM;当A12-A14为2时,Y2导通,指向第二个4K*8位的RAM;
  • A15是0,可以接在S2(图中是G2A)上,S1(图中是G1)直接连接电源(VCC)代表高电平1,MREQ线连接G2B;当MREQ是低电平时,则满足S1(1) + S2(0) + S3(0) = 1,138译码器导通,代表CPU要连接储存器。
  • 同时要注意:两个用户程序区对应的芯片分别连接12个地址线,分别输出8位数据,不能同时工作。

PD线接地,表示ROM是工作状态,不是编程状态,不可以写入,只可以读出; 

 四、储存器的校验

(一)为什么要有储存器校验?

因为我们两种类型的储存原件(触发器,和电容)如果所处的电磁环境复杂,或者受到带电粒子撞击都存在让电容放电或者触发器反转导致数据发生错误的情况出现!

(二)编码纠错的逻辑推演

首先我们给出合法代码集合的情况,最后推出结论:

A、情况一:

{000,001,010,011,100,101,110,111},这里面的所有数据是合法的,这种情况相互之间转换只需要一位变换,所以不具备纠错能力,能够检0位错,纠0位错;

B、情况二:

{000,011,101,110} 这种情况的四个数之间,要实现两种树之间的转换至少要改变两位,能够检查1位错,纠0位错;解释:比如一个不合法数出现001,则对比发现错误,但是我们无法纠错,因为我们无法判断001是由000最后一位加1得来的,还是011的第二位变为0得来的。

C、情况三

{000,111}这个集合我们用000代表0,用111代表1。能够检查1位错,纠正1位错。(一旦发生错误如:011则我们能够检测,但是无法判断是由000变两位过去,还是由111变1位过去的;)

D、情况四

{0000,1111},检查两位错,纠正1位错;

E、情况五

{00000,11111}检查2位错,纠正2位错;

最后我们可以看出来,编码的检测能力和纠错能力跟任意两组代码之间二进制位的最少差异数(编码最小距离)有关:
公式:L(最小编码距离)- 1 = D(检测错误的位数) + C(纠正错误的位数)(D>=C)

(三)汉明码数据校验分组逻辑

A、数据校验原理:偶校验 + 分组校验

  • 偶校验
  1. 例如有数据 011和010,那么我们要进行偶校验,就需要在前面加上一位校验位:0011,1010;令数据满足1的个数为偶的特征。
  2. 最终验证时,发现1个数为奇数个,则对应数据出错。
  • 分组校验
  1. 每组数据放在一起校验,使用统一校验码,每组数据有相同的特征。

B、数据分组与校验

  • 假设我们现在有七个数字要进行数据校验,那么我们可以将这七个数进行分组,如下:

  1. 一共分成三组,会有数字同时属于两组,我们分别对三组数据进行验证(P3,P2,P1),当验证结果为1时,则代表该组中有数字出错,那么会出现下面五种验证结果:
    1. 000   数据没有差错;
    2. 001 第三组有错误,前两组没有错误,根据位数越少错误概率越大,得出4出错; 
    3. 101   代表第一组和第三组共有的数据5出错;
    4. 110 代表第一组和第二组的共有数据3出错;
    5. 111 代表三组共有部分7出错。
  2. 那么校验码应该放在1,2,4,8....这些位置,因为这些数的二进制都有个特点,1,10,100....都只有一个1,这也能够作为校验码出现。
  • 分组数据的二进制特征
  1. 第一组:1,11,101 ,111 (1,3,5,7)   特征:都为XXX1,最后一位都是1
  2. 第二组:10,11,110,111(2,3,6,7)特征:都为XX1X,倒数第二位为1
  3. 第三组:100,101,110,111(4,5,6,7) 特征: 都为X1XX,倒数第三位为1
  4. 这样很容易推之,如果有第四组,那么第四组特征为 都为1XXX,倒数第四位为1;
  • 汉明码分组总结:
  1. 由上可知:设组数为i和j或l,则有如下规律:
    1. 第i组独占第2^i-1位,例如第一组,数据1就是该组独有的,故称独占。第二组的2也是如此;
    2. 第i组和第j组共同占有(2^i-1) + (2^j-1)位,位置的二进制特征是:0..010...010..0,例如第三组和第二组共同占有第6位,二进制为位置110
    3. 第i、j、l共同占有2^i-1  + 2^j-1 + 2^l-1,  二进制位置特征为:0..010...010..010.0   如一、二、三组,共同占有第7位,    111
  • 总结共同占用数二进制特征,看上知道相邻组共同占用二进制1之间没有0,每相隔m组,则两组共同占有数1之间就有m个0。例如第一组和第三组共有数5,其二进制为101,中间有一个0。

C、被校验数据位和校验组数满足的公式

2^k >= n + k + 1  ,n为实际数占用的二进制位数,k为数据校验的位数

(四)汉明码数据校验练习

题目:按偶校验原则配置0011的汉明码

解题思路:

A、计算需要的组数(校验需要的位数)

根据公式: 2^K >= n + k + 1  ,带入n=4得k=3,即要分三组

B、数据排布

c1、c2、c3为校验位 

C、校验位计算:

  • 由汉明码分组原则可知,C1占用第一位,所在组含1,3,5,7位的数据,这四个位置对应数据为 :c1,0,0,1,因为偶校验,故C1为1;
  • 同理C2,所在组,对应数据为:c2,0,1,1,故C2为0;同理C3为0;
  • 得出汉明码为:1000011

(五)汉明码的纠错过程

A、过程概览:

B、计算汉明码校验位位置和分组数(设组校验结果为P)

  • 例如发送过来的汉明码为 0100111
  1. 根据k + n  + 1<=2^k,n=4带入公式得出组数为3;
  2. 对各组进行校验:
    1. P1 = 1位置 异或 3位置 异或 5位置 异或 7位置 =0 异或0异或1异或1 =0   (无错误)
    2. P2= 2位置 异或 3位置 异或 6位置 异或 7位置 =1异或0异或1异或1 =1   (有错误)
    3. P3= 4位置 异或 5位置 异或 6位置 异或 7位置 =0异或1异或1异或1 =1   (有错误)
  3.  上部得出为结果110,为第二组和第三组共有位第6位出错,不是第7位(因为第一组也含有第七位,核验通过)
  4. 作出修改:0100111 --->  0100101

五、提高访存速度的措施

(一)为什么要提高储存器存储性能?

因为芯片每年速度提升一倍,存储器每十年存储性能才能提升一倍,这这种不断增大的差距,导致CPU性能严重浪费,这种现象我们称为内存墙。

(二)措施

A、使用高性能元件

B、在CPU和存储器之间增加cache结构,增加储存速度

C、修改存储器结构

  • 单体多字系统:存储器每次提供给CPU四个存储字长的数据,CPU放到寄存器中,通过减少访问次数方式(或者说是增加了存储器带宽)来提高存储器性能。

​​​​​​​​​​​​​​

  1. ​​​​​​​​​​​​​​存在问题:​​​​​​​
    1. 当CPU要向存储器中存储一个单元字长的数据时,默认后三个字都是空数据,要让存储器中仅储存一个字的数据而剩下三个不会被破坏,需要增加硬件结构,使存储器结构变得更加复杂。
    2. 当CPU要取出四个指令,放入寄存器,第一个指令如果是跳转指令且正好跳转到第五个,这就难办,下次取出指令会覆盖这次,导致未执行指令被替代。 
  • 高位交叉 顺序编制(存储器扩容知识) 

  1. 这种方式:最高两位时选择信号(片选)。
  2. 我们用三个存储芯片来扩展存储器的容量,不同扩容的时,这四个存储原件可以同时工作都有自己独立的电路系统(MDR,MAR),可以实现,CPU一次发送四条地址,四个储存芯片分别工作,在存储周期内完成存取并返回。
  3. 但是,因为地址编码时高位编码,且在一个存储体内连续,指令和存取都是按地址顺序进行的,这就导致M0被频繁访问,无法实现四个存储芯片同时工作的目的。
  4. 这时我们再次改变存储器结构。
  • ​​​​​​​低位交叉 横向编址

​​​​​​​​​​​​​​

  1. 这种方式,我们用最低两位作为片选线,这样还是顺序存取,但实际映射到存储芯片就是M0到M3交替存取。
  2. 这样就实现了四个芯片交替执行。 
  3. 低位交叉方式,要用的时间:假设一个总线周期为B,则每个存储芯片完成数据存取或返回就需要B,我们一共四个,所以一共需要的周期T = 4B,如下图:

        

所以连续读取四个字的时间为 T + (4-1)B; 

D、高性能储存芯片

SDRAM (同步DRAM),用系统时钟控制储存器与CPU的存取,必须在指定时间完成指定流程,这要求SDRAM性能很高才可以,这样CPU就不会等待。

RDRAM,由rambus开发,主要用于解决存储器带宽问题;

带cache的DRAM,原理大概就是存储芯片中有cache,当第二次访问同一行数据时,就可以直接从 SRAM组成的cache中获取,这样有利于促发式读取。

六、高速缓冲存储器(cache) 

(一)使用Cache的原因和程序使用的局部性原理

A、使用原因

提高存储器性能,缩小CPU性能增长过快,带来的剪刀差,减小内存墙对CPU的性能限制。

B、程序使用的局部性原理

  • 空间原理,当CPU正在执行的指令和数据的下一条地址对应的数据极有可能被使用时,在返回数据同时,将现指令和数据和其下一条数据一块放入cache中。
  • 时间原理,当CPU用到的数据和指令,在后面的操作中还要用到,我们把这些指令和数据放入cache中。

(二)主存和缓存的结构

  1. 主存和缓存都被分成了块,主存器有M块,cache有C块,cache的容量要小于主存,所以C<M,每个块大小是相同的。
  2. cache中储存了主存对应块数据后,会在标记上指明对应主存块号。
  3. 根据上面概念,那么CPU发出的指令就分为块号,和块内地址两部分。当CPU需要指定块数据时,会先访问cache,如果cache中有标记的块号跟要求的块一致,则直接从cache中获取数据不再访问主存。 

(三)命中与未命中、命中率、cache-主存系统的效率

A、命中与未命中

命中:某个主存块与cache中的块建立了对应关系,这时候标记记录了cache块和主存块的对应关系,CPU可以直接从cache中直接获取主存中该块的内容。

未命中:某个主存块与cache没有建立对应关系,CPU只能通过主存访问该块中的数据。

命中率:命中率跟cache的块数和块的大小有关

  1. 一般每块可以存4~8个字。
  2. 快长取一个存取周期CPU能够从主存中取出的数据长度,举例如下:
    1. CRAY_1 16交叉(每个芯片有一个存储字,存储字),则块长取16个存储字
    2. IBM 370/168   4体交叉(每个芯片一个存储字,字长64位),则块长取4个存储字(64*4=256位)

B、cache-主存系统的效率

效率e跟cache的命中率有关:

e=访问cache的时间/平均访问时间*100%;

那么访问的cache的命中率为h,访问cache的时间为Tc,访问主存的时间为Tm:

e=Tc/ [Tc * h + Tm * (1-h) ] * 100%,那么我们可以推知:

e的范围为1(命中率为100%)- Tc/Tm;

上面的公式情况是,同时访问主存和cache的情况,如果是先访问cache,再访问主存公式如下:

e=Tc/ [Tc * h + (Tc +Tm) * (1-h) ] * 100%

(四)cache、CPU、主存的结构图

  • 主存Cache地址映射和变换机构:地址映射用来判断主存中的块要映射到哪个Cache中,用来控制主存和cache的同步;变换机构是在Cache命中的情况下,将CPU给定地址,映射到Cache中指定块对应地址;
  • Cache存储体就是实际保存Cache块的位置;Cache替换机构是当Cache中有空块,且满足置换条件时,其内部通过某种算法将主存中的某一块送到Cache中。
  • 直接通路时Cache和主存数据交换用到的。

(五)Cache的读写、改进

A、读

  • 如果命中,访问Cache取出信息送到CPU,如果没有要同时进行两部操作,一个是访问主存取出信息送到CPU,一个是看Cache是否满,如果满,执行替换算法腾出空位,如果没满将新的主存块掉入cache中。

B、写

写操作要保证Cache和主存数据的一致性,有两种方式:

方式一----写直达法 

即写入操作时同时写入主存和cache,这样保证了数据时刻保持一致,但是因为频繁访问主存导致CPU性能消耗

方式二-------写回法

先写入cache中,等到块被退出cache中后再更新主存中的数据,这样提高了CPU速度,但同样面临,多个cache对应一个主存时,不同cache中块数据一致性问题。

C、Cache的改进

  • 多级cache

现代计算机往往采用多级cache,分为片内cache(直接做在cpu内部)片外cache(cpu外部,容量较内部大)

  • 统一缓存和分立缓存

​​​​​​​统一缓存往往将指令和数据放到一个缓存中,分离缓存将指令和数据放到不同的缓存中,这样避免了指令执行过程中和数据存写的冲突。

(六)Cache和主存的映射方式、块替换算法

A、直接映射

将主存中的块按照Cache中的个数分成多个,每个区的块数量是等于Cache中块的数量的,例如,一的第一块要存储的化只能存储到Cache的第一个块。

标记用来记录该块属于第几个区;当CPU访问时,会先对比块号,然后比较器比较CPU所需要的块号的区号是否和Cache相同块号的区号一致,如果一致就是命中,不一致就是未命中。 

这种方式很快,结构也比较简单(优点)但是因为每个区的块再cache中都有固定位置,无法只能分配空闲的cache中块给非指定区的块,这样就又导致cache利用率不高。(缺点)

B、全相联映射

主存中每个块都可以对应cache中所有块,这样比较器中就需要比较区号和块号两个内容,增加了比较器的复杂度,速度慢,但是cache的利用率较高。 

C、组相连映射(对上两种方法的综合)

组相连方式,主存中每个区的块数 等于Cache中的组数,Cache中的每组可以有很多块,这里是2块。每个区的第n个,只能存放到Cache中第n组中的任意一个块中,这样就使不同区同一位置块等待可能性变小,同时电路结构也比较简单,仅需要两个比较器比较同一组中的标签和块号,来确定CPU需要的数据。

离CPU近的可以使用直接相连方式,保证速度和效率,离CPU最远的使用全相联方式,因为对速度要求更低。

D、块替换算法

在cache块占满后我们需要用到块替换算法:

  • 先进先出原则,最先进来的块在cache满后,要新加入块时,最先被移出(不合理,最先进去的可能使用频繁,未来还会再使用)
  • 定期调用次数最小移出,在cache满的情况下,移出同样时间使用频率最小的块,腾出块位置,加入新的块。

七、辅助存储器

(一)特点及磁表面存储器的技术指标

A、特点

辅助存储器不直接参与于CPU的数据交换,如果CPU需要,要先将数据存储到主存中,而后再进行信息交换和获取。

B、磁表面存储器的技术指标

  1. 记录密度:磁盘上的磁道记录二进制信息,越外围的磁道,密度越小
  2. 存储容量:C=n*k*s    ,n磁表面数,k磁道数,s每个磁道位数量
  3. 平均寻址时间:磁头寻道时间 + 等待时间;
  4. 辅存的速度由寻址时间和读写时间决定。
  5. 数据传输率:Dr = Db * v
  6. 误码率:出错信息数占读出总数的百分比。

(二)磁表面存储器的读和写

A、写

我们通过线圈通入的电流方向不同,改变磁通路,影响磁表面的磁方向,写入1或者0。

B、读

当磁头移动到数据单元时,磁表面的磁方向会传入磁通,转换成不同的电势,从而判断读出的数据。 

(三)硬磁盘存储器的类型和结构

A、类型:

固定磁头(每个磁道都有一个磁头)和移动磁头(每个盘面只用一个磁头,磁头可在磁道间移动)

固定盘和可换盘。

B、结构

  • 磁盘驱动器控制磁盘的旋转,磁头的移动等等
  • 磁盘控制器相当于主机和驱动器的接口。 

C、磁盘驱动器

传动机构带动磁盘组转动,磁盘组转动后,磁头悬浮,磁通位置由音圈电机控制“小车”推动,音圈电机接收磁盘控制器发送来的磁道信号,判断磁头位置控制小车改变磁头位置,并测速输出。位置检测也会实时检测磁头位置 。

D、磁盘控制器

  1. 接收主机发来的命令,转换成磁盘驱动器的控制命令。
  2. 实现主机和控制器之间的数据格式转换。
  3. 控制磁盘驱动器读写
  4. 磁盘控制器本质上是主机和磁盘驱动器之间的接口,对主机通过总线连接,对硬盘直接通过设备连接

磁盘的盘片多由铝合金制成​​​​​​​

E、软硬磁盘的对比​​​​​​​

对比方面硬盘软盘
速度
磁头固定、活动、浮动活动、接触盘片
盘片固定盘,大部分不可更换活动盘,可更换
价格
环境苛刻
  • 硬盘的磁针跟磁盘表面通过气流隔开,不直接接触盘面,损耗更小。
  • 硬盘要求盘面不能有一点点灰尘,但软盘倒要求不高。

F、光盘存储器

  • 利用激光写入和读出:第一代光储存技术储存技术采用非磁性介质,利用激光热效应烧制,不可擦鞋;第二代光存储技术,采用磁性介质,使用的是热磁效应,可擦写。

八、I/O系统

(一)I/O系统发展概述

A、早期

各个I/O设备分散连接在计算机的CPU上,I/O设备和CPU直接连接,导致外部I/o设备更换及其困难,这时后CPU和I/O设备之间的工作是串行化的,在I/O设备输出时,CPU必须运行相应程序支持,或者等待。

B、接口阶段和DMA阶段

这一时期,CPU和外部I/O设备通过BUS(总线)连接,进行数据传递,I/O设备通过I/O接口接到总线上,可以实现扩容缩容。这时CPU和外部I/O设备的工作是并行化的,并行化的方式可以这样实现:(中断方式、DMA方式),这一阶段,CPU仍需要参与I/O设备传送完数据的后续处理工作(比如I/O设备关闭)

C、通道程序阶段

这一时期,I/O设备和CPU之间通过通道连接,通道有自己的指令集,负责I/O设备和CPU之间的数据传输,这时CPU就不用再参与I/O的结束工作中了。

D、I/O处理机阶段

这一阶段,使用专门的程序或者设计专门处理器,实现控制I/O设备的输入和输出,这种方式I/O设备和CPU之间的独立程度就更高了,I/O设备就直接从CPU中独立出来。 

(二)输入输出系统的组成

A、软件部分

  • I/O程序:由专门编程人员编写I/O程序,调用I/O指令实现数据的控制I/O设备的输入输入,指令一般分为三部分:操作码(标识该指令为I/O指令)、命令码(要具体做的操作的首地址)、设备码(要输入或输出的I/O设备的标识或者I/O设备端口)
  • 通道指令,由通道程序执行:一般情况下,程序员为了让外部设备参与程序执行,会编写广义I/O指令,指令要指出要操作的设备,要输入或输出的主存地址首地址传输的数据长度操作类型,而后操作系统会根据广义I/O指令编写相应的通道程序(指令集)去完成I/O设备和CPU之间的数据交换。通道指令要指明(存取的数据首地址,数据长度,操作命令等信息),故通道指令一般较大。
  • 如IBM/370的通道指令就有64位。

B、硬件部分(通道阶段)

  • I/O设备 -> I/O接口 -> 设备控制器- >子通道 ->通道 ->CPU

(三)I/O设备与主机的联系方式

A、I/O设备编址

  • 统一编址方式,将I/O设备和内存放在一块编址。例如当有20根地址线,那么就可以存储1MB个存储单元的数据,当地址选择选中后20%的空间时就指向I/O设备,CPU对应的读/写指令也就直接在I/O中执行了。
  • 独立编址方式,I/O设备有独立的地址,CPU有专门针对I/O设备的读写指令,这样扩大了CPU的指令集。

B、设备选址

  • 专门设备选择线路用来对比CPU给出的设备地址和现有的哪个设备匹配。

C、数据传送方式

  • 串行,速度慢,但准确性高,适合远距离传输;
  • 并行,多根地址线同时传输,速度快,适合近距离传输。

(四)I/O设备与主机信息传递的控制方式

A、程序查询方式(串行化运行)

  • 现行程序向CPU发送访问I/O请求-->这时CPU执行读I/O设备的指令-->I/O设备收到指令后,开始准备数据,同时CPU开始查询I/O数据准备状态-->I/O准备数据,同时CPU不断查询I/O状态-->直到I/O设备数据准备完成,CPU读取到I/O设备数据准备完成的状态,开始读取I/O数据到自己的寄存器,然后向主存写入--->最后判断是否完成操作,如果完成结束,如果没完成重复上述动作。 
  • 这样的过程有下面两个弊端
    • 因为I/O设备要比CPU慢很多,在I/O设备数据准备完成前,CPU不能做其他事情,占用CPU大量时间,影响性能。
    • 所有数据都要经过CPU才能存入主存或者其他设备,CPU压力大。

B、程序中断方式(并行化运行)

  • CPU在执行程序中,碰到I/O指令,先执行指令,然后直接执行下一条指令(不再等待),同时I/O进行数据的准备工作,当数据准备完成后I/O设备向CPU发送程序中断请求--> CPU收到中断指令后,就会保存程序现场和命令断点,然后查询I/O数据准备状态,如果准备完成,就读回CPU,然后保存到主存中--->完成后,继续执行原程序恢复指令,恢复寄存器内容,执行原程序的下一条指令。
  • 这种方式CPU等待的时间就被执行其他指令替代了(优点)
  • 此种方式因为要保存原程序程序现场,用到很多指令,当I/O传入数据过少时,就适得其反,导致原程序保存现场工作过于复杂。(缺点)
  • 此种方式CPU依然被困在了处理I/O数据,存入或取出主存中信息的工作中,耦合度还是高(缺点)

这就需要我们请出DMA来解脱CPU了​​​​​​​

C、DMA方式

I/O设备直接通过DMA程序连接主存,数据交换的工作交给DMA来办

​​​​​​​

  • CPU还是正常执行程序(指令集),当执行I/O指令后,直接下一条指令--->接着DMA程序一直监视着I/O, 当I/O设备数据准备完毕后,就进行周期窃取(将CPU对总线的控制权移到自身),进行数据存入或取出工作---> 执行完毕后释放总线控制权 。
  • 当DMA占用总线时,因为CPU执行指令时,往往是同时预存很多指令到指令缓冲中,如果这些指令不需要用到总线,那么DMA就可以和CPU形成并行

​​​​​​​D、三种方式下CPU工作效率的比较 

总结:CPU越来越独立于I/O设备,效率由低到高​​​​​​​ 

九、外部设备(I/O设备)

(一)概述

A、在系统中的位置如下:

  • 外部设备通过I/O接口与主机进行数据交互
  • 主机通过I/O接口发送控制命令到设备控制器,控制外部设备的运行
  • 同时外部设备也通过I/O接口向主机传递外部设备的状态信息。

B、外部设备的分类

  • 人机交互设备:通过将人能够识别的信息转换成计算机能够识别的二进制信息,进行处理后再返回人能够识别信息的设备,经常要用到 键盘、鼠标、打印机等等。
  • 计算机信息储存设备:像读取在磁盘、光盘、磁带中储存的数据时也需要用到I/o接口和这些设备连接。
  • 机-机交互设备:计算机之间进行数据交互,相对于另一台计算机,这台计算机就是外部设备。

C、键盘和鼠标(输入设备)

  • 键盘(现常用的是编码键盘):有一个专门的计数器监视键盘,当有键按下时,计数器停止,将数输入到Rom(rom中保存了键盘每个键值对应的ASCII码),CPU通过中断的方式获取ROM中保存的值,实现键盘的输入-->一段时间后,取数指令可以结束中断同时重启计数器准备统计下一次按下键的值。
  • 鼠标
  1. 光电类型(元件:光电转换器);
  2. 机械式 (元件:金属球、电位器);
  • 触摸屏 

D、显示器与打印机(输出设备)

  • 显示器:字符显示器(早期、元件:字符发生器);图形显示器(显示主观图像);图像显示器(显示客观图像)
  • 打印机:击打式(点阵式:逐字逐行);非击打式(激光打印机:逐页、喷墨打印机) 

E、其他设备和多媒体

  • A/D、D/A设备:A指模拟信号、D指数字信号,计算机使用的是数字信号,当有外部设备需要将模拟信号转换为数字信号时就会用到A/D设备,同样计算机信息在远程传输时也需要D/A设备。
  • 终端和汉字处理等等
  • 多媒体

 十、I/O接口

(一)为什么要设置接口?

  • 实现设备选择
  • 实现数据缓冲达到速度匹配:外部设备多种多样,需要接口统一其速度
  • 实现数据串的格式转换
  • 实现电平转换:不同的外部设备的电平时不一样的,要与主存连接,就需要接口统一电平
  • 传送控制命令和返回设备状态(忙、就绪、中断请求)

(二)接口的功能及组成

A、概念图

  • 状态线用来返回接口工作状态;数据线用来接收数据;设备选择线用来接收被设备选择后的信号;命令线接收CPU发来的工作命令等; 

B、分析实现

选址功能设备选择电路
数据传输数据积存器
传送命令命令寄存器、命令译码器
反映设备状态设备状态触发器
  • 关于设备状态的触发器又有多种 
  1. 完成触发器:数据准备完成为1,未完成为0;
  2. 开始触发器:记录是否开始工作;
  3. 中断请求触发器INTER:用来向CPU发出中断请求命令,一般是在数据准备好后。
  4. 屏蔽触发器MASK:当接口发出中断请求时,CPU的工作优先级高于接口时,屏蔽触发器会阻止请求发送,直到CPU该工作完成。 

C、结构概览

  • 控制逻辑电路用来统一协调其他单元电路的运行和执行顺序。

C、接口的分类

  • 按数据传输的方式来分:

    • 串行接口、并行接口

  • 按通用性来分:

    • 通用接口(把接口通用功能集中起来的接口)

    • 专用接口

  • 按是否可编程来分

    • 可编程接口(可以用编程方式指定其功能)

    • 非编程接口

  • 按数据传送的控制方式来分:

    • 中断接口

    • DMA接口 

十一、程序查询方式的实现

(一)回忆查询过程

CPU连接多个设备,当CPU发出数据写入或输出命令时,接口开始进入准备工作,CPU就会一直等待接口相映,在等待的同时同时请求其他设备,直到有设备响应回数据再开始下一步工作。  

(二)详细的执行流程图

  1. 因为这种方式,数据都会通过CPU,暂存到CPU的一块专门的寄存器中,所以我们要有将寄存器中数据保存到主存的逻辑,即我们看到的前两个流程,首先我们要设置一个计数器,用来统计I/O来的数据是否被接收完毕(I/O传输的数据往往不是一次就能结束的),还需要主存缓冲区的首地址,用来确定数据储存的位置;
  2. CPU发出指令后,等待I/O程序响应,直到I/O程序响应,I/O数据被装入寄存器,随后进入缓冲区---> 数据单次传送完毕后要修改计数器值,更新为未完成次数--->修改缓冲区首地址,指向下一个空地址--->最后检查数据是否传送完毕,如果没有重复执行前面流程--->完成则结束数据传送  

(三)简单的程序查询方式I/O接口实现

  1. CPU发出启动命令和地址信号,I/O接口的设备选择电路收到地址线发来的信号后,跟自身设备对应电路对比后,找到选择的I/O接口,同时启动命令和选择电路的信号被置换后发送到D(完成触发器)的右端和B(工作触发器)的左端,分别是0(代表未完成)和1(代表开始工作,工作状态是忙)
  2. B从启动设备线发送启动设备的信号,外部输入设备收到信号后,开始启动。
  3. 设备启动完毕后,将外部输入信息存入I/O接口的DBR(数据缓存单元)中,然后发送设备工作完毕信号,改变D和B的信息,D为1(代表工作已完成),B为0(代表设备处于闲置状态);
  4. 在前面过程中一直在不断检测D状态的CPU,检测到D为1后,将DBR中的信息通过数据线取出存入CPU中专门寄存器中,而后调用存指令,存入主存,或者压入栈进行计算等等;

十二、程序中断方式的实现

(一)中断过程的再回忆

当CPU再执行某段程序时,正在执行K指令时,收到了程序中断指令,并且这个中断指令的优先级比现行程序优先级高,那么CPU会将K指令执行完毕,然后保存程序执行现场(包括程序程序执行位置的断点,需要用到的保存到寄存器中的数值,等其他复杂过程),之后跳转开始执行中断程序,中断程序执行完成后,再恢复原程序的程序现场,继续执行原程序。

(二)以打印机为例分析中断的产生

在CPU发出启动打印机的指令后---> 打印机开始启动,启动完成后,发送程序中断请求---->CPU收到中断指令后开始将数据发送到打印机--->打印机收到数据后,打印接收到的信息,打印完毕后再次发出中断请求,请求数据返回---> 至此陷入循环,直到内容打印完毕。  

(三)中断方式下I/O接口的独特结构

A、中断出发器和屏蔽出发器的位置

  1.  当设备数据准备完备(将数据装入DBR中后),会将D(完成出发器变为1)---> 屏蔽触发器放行(判断改次中断优先级比CPU正执行程序高,则为0,代表放行)--->  MASK和D分别为0和1,则经过转换器后两个信号代表1输入中断触发器(INTER),CPU收到中断请求,执行中断程序。

B、排队器的判断逻辑(当同时有很多设备发出中断请求时就需要排队器)

  •  INTR代表中断请求,现在假设除了INTR1这个设备没有发出中断请求(为高电平1),后面从INTR2开始都发出了中断请求指令(为低电平0),下面我们分析如何选出优先级最高的设备执行中断流程
    1. INTR2低电平0进入后,经过与非门(INTP2‘为1,跟0与为0,再非为1)结果为1,向右经过设备3的非门变为低电平0,这样INTP3’就是低电平0。同理后面(右边的设备)都会被其左边的设备信号影响,INTP都变成低电平。
    2. 经上,除INTP1‘和INTP2’是高电平外,其余右边的INTP都为低电平(都有中断请求的情况下,INTR为低电平)
    3. 最后,INTR信号和INTP信号同时被送到与非门再经过非门判断出要执行谁的中断程序,先看设备2,其INTR2为低电平0,INTP2‘为高电平1,与非后为1,再非门后为0,低电平其被选中;设备1,都为高,经过与非门后为0,再经非门为1高电平,未被选中;设备3,两低,经过与非门和非门后,亦然是高电平1,所以设备2的中断信号被选择。
  • 7
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值