计算机结构

7.1 冯·诺依曼结构

7.1.1 冯·诺依曼结构的组成部分

1)输入、输出设备

1)输入设备:向计算机输入数据,比如,

·通过摄像头、MIC,将图像/声音等转成二进制数据给计算机

·从网卡输入数据给计算机等

·其它

2)输出设备:从计算机输出数据,比如,

·通过显示器、扬声器,将二进制数据翻译称为图片/视频/声音等供人能够识别

·或者通过网卡输出数据给别的计算机

·其它

 

2)存储器:存储程序和数据

3)运算器:进行算术运算和逻辑运算

4)控制器:解释程序指令,将程序指令转为对应的一条一条的微指令,这些微指令会控制运算器等部件工作,进行比如,

·数据的算术、逻辑运算

·数据的搬移,比如从CPU的寄存器搬移到内存,或者从内存的某个位置搬移到内存的另一个位置。

·等等

 

7.1.2 结构图

 

 

 

 

 

 

 

 

 

 

 

 

 

7.2 哈佛结构

与冯诺·依曼结构相对应的是哈佛结构,我们会在后面详细讲解这两种结构之间的异同和优缺,为了便于讲解的方便,这边还是以经典的冯诺·依曼结构为例,进行计算机组成结构的介绍。

 

7.3 详细结构

7.3.1 详细结构图(PC)

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

7.3.2  各部分简述

计算机的详细组成总体上可以分为三大部分,CPU,总线与接口、外部设备,核心部分主要就是cpu/总线,外部设备总体上分为输入设备和输出设备,而核心部分与外部设备通过接口连接。

 

1) cpu

1)运算器

a)作用:根据指令要求,数字电信号的二进制数据进行算运算和逻辑运算,

b)运算器组成

·ALU:Arithmetic Logic Unit运算单元,进行算数运算和逻辑运算

·(通用)寄存器组:用于存放ALU在进行算术/逻辑运算时,运算过程中涉及到的一些中间值和计算结果值。

·乘商寄存器:专门用于存放乘法和除法运算中间值和结果值。

·CVZS:各种ALU运算需要用到的标志位

C:进位、借位标志,如果有进位或者借位,C=1,否则C=0。

C的应用举例:请写汇编代码计算13208 + 34535相加后的值。

答:为了便于编程时好理解,我们先将这两个二进制的数,转为16进制,即OX3398+0X86E7。

汇编实现这两个数的相加的大致步骤如下图所示。

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

总结:从这个例子就可以看出,C进位/借位标志位的作用,有关借位作用同理,就不再赘述。如果你想了解跟多,我们在  后面嵌入式技术课程中,在讲有关汇编时,还会将这方面的内容。当然我们这里在强调一点,我们学习汇编并不是为了

使用会变来进行开发,而是通过汇编理解计算机的工作原理。

有些同学说,我用C语言的等高级语言写代码,这些标志位也会用的上吗,也会用得上,百年一起在编译时,C语言会被翻译为汇编,翻译为汇编后,进行加法的算术运算时,同样会按照同样的方式使用C进/借位标志位。

 

Z:运算结果是否为零标志,如果结果为0,Z=1,否者Z=0。

应用举例:比较两数是否相等,比如a=3,b=3,判断两数是否相等,写成汇编程序的话,实际上就是将两数相减(算术运算),

如果Z=1表示a和b的值相等,否则不相等。

 

V:溢出标志,有溢出,V=1,V=0

1)什么是溢出

比如一个32位的寄存器,只有32位,所能装的二进制的数的最大情况就是32个1,即11111111 11111111 11111111 11111111,如果再往里面加一个1的话,就向33为进1了,但是寄存器只有32为,不存在33为,溢出的哪个1不存在了,寄存器中的32个bit,全部是0,即00000000 00000000 00000000 00000000,因此溢出回事数值发生巨大突变,在真实的计算机中,溢出会导致数据的值发生错误,导致计算结果产生很大的问题。

 

2)为什么要检查溢出

从上面的描述中,不难看出,溢出的检查很有意义,通过基础标志V的检查,就可以知道数据有无溢出,如果没有溢出证明数据是没问题的,否者数据的值可能存在问题,需要做相应的处理。

高级语言,比如C语言实现两个很大数计算时,如果数据计算机结果因为太大而溢出,当你使用这个溢出的数据时,会有溢出提醒,这个溢出提醒就是通过,C语言程序被编译后的汇编程序,检查V这个溢出标志位得到的,我们在后面将C语言时,还会讲到有关溢出事情。

 

S:有时用是N,当两个有符号数进行运算时,S=1表示运算的结果为负数,S=0表示运算的结果为正数或零。

应用举例:比较a、b两数的大小,写成程序的话,我们会让两个数进行减法减法运算,如果S=1,表示是一个负数,说明a<b,如果S=0,说明a等于或者大于b,这个时候需要在查询Z标志位,如果Z标志位为1,表示a等于b,否者说明a小于b。

 

2)cpu的控制器


a)作用:最重要的功能就是对指令进行译码,然后将指令转成微指令,再由微指令控制计算机工作,比如    

· 控制ALU,让ALU进行数据的算术、逻辑运算


· 进行数据的移动,比如从CPU的寄存器移到内存中,或者从内存的某个位置搬移到内存的另一个位置。    

· 等等


b)控制器组成

· 程序计数器(PC):Program Counter,程序最开始运行时,PC里面放的是程序第一条指令在内存中所在的地址,每运行一

条指令,PC里面的地址就会加1,指向下一个指令,如果一个指令的存放需要4个字节,pc中的地址加1,实际上加的是4个字节。

 

· 指令寄存器(IR):Instruction Register,临时存放从内存中取得的,即将要被解释运行的指令,指令由两部分组成,


 

- 第一部分:操作码,指明计算机需要执行一个什么样的动作,比如有些操作码表示做加运算,有些表示要进行数据搬移。

 

- 第二部分:地址码,

+ 直接是要被操作码操作的数

+ 要被操作的数在内存中所在的地址。

 

    MOV

伪指令  101001 1001010101

       操作码  地址码



· 指令译码器(ID):Instruction Decoder,解释指令,解释指令的过程为,

 

- 第一步:检查指令的格式是否合法,是否夹有非法字符、或者非法词组,有的话,译码将不会通过



- 第二步:如果指令被检查合格了,会提取出操作码,将操作码翻译为微指令,控制计算机各部分,按照操作码的要求做事

 


· 控制存储器:用于存放微指令程序(或称微程序),每一操作码都对应着一个自己的微指令程序,控制存储器中存放着所有操作码

所对应的微指令程序。


比如MOV(加运算)操作码,就有自己的微指令程序,微指令程序是由一条条的微指令构成的,在出厂时,这些微指令程序就被

固化在了控制存储器中。

 


· 微指令寄存器:用于临时存放微指令

2)总线与io接口

总线与接口的作用就是,将CPU和外部设备连接在一起。-----

1)三大高速总线


a)作用:高速通信线路,属于CPU的高速公路

 

· 地址总线:传输地址信号,比如通过传输地址信号,找到要操作的内存单元等  

· 控制总线:传输控制信号

 

通过地址总线传输的地址信号,找到内存的某位置了,接下来到底是往里面写数据呢,还是从里面读数据呢,那就

要看具体的“指令”了,如果是写指令,指令经过译码器的译码后,会被转为微指令,微指令会通过控制总线,向内存发

控制信号,表示说,我希望向该内存位置写数据。


· 数据总线:传输数据信号

比如通过地址信号找到内存的某个位置了,控制总线也发出了写的控制信号,希望对该空间写数据,那么写数据时,就需要

通过数据总线向该内存空间传输数据信号的,内存收到这个数据信号后,会将该数据信号锁存到该内存空间中,那么这样就实现了

写数据的过程。


b)三大高速总线是分开的

三大高速总线其实是可以合在一起的,但是合成一个的话会忙不过来的,通信的速率会非常低,分成三条总线就好比将高速公

路分成三个车道,不同车走不同的车道,互不相干,效率自然就高。

c)三大高速总线是并行通信的

使用并行通信的目的也是为了条通信效率。

d)三大高速总线所处位置  -------

三大高速总线位于CPU的内部,通过CPU芯片的引脚与外部的IO桥连接在一起。

2)IO接口

a)作用:负责连接各种的输入、输出外部设备

b)每一个设备都会有属于自己的IO接口

c)io接口也有地址、数据、控制三大线,


· io接口的地址线、数据线、控制线,大多数情况都是串行通信的,而且往往是复用的

 

比如USB通信,usb使用的就是串行通信的,常见的USB2.0有4根线,其中有两根线,一个是正极电源线,另一个负极电源线,

其它两根线被复用当作地址线、数据线、控制线使用。

 

· 不过内存是一个特例,为了能够提高内存的访问速度,内存io接口的地址、数据、控制线都是独立的,并且使用的是并行通信。

d)后面的linux驱动课程,主要涉及的就是IO接口相关的内容

linux驱动就是讲如何通过编写驱动程序,去控制这些IO接口,实现与外部设备的通信,有关IO接口这一块的知识,我们会在后面的

linux驱动技术课程部分详细讲解,所以,io接口是后面Linux驱动课程的核心内容。

 


e)io接口所处的位置

· 在芯片的外部:比如pc机(个人电脑),所有IO接口基本都是在CPU芯片的外部      

· 集成在芯片内部:比如像单片机,虽然有一部分也是在芯片外部,但是有很大部分IO接口是被直接集成于在了芯片的内部。

 

 

3)IO桥

a)并不是计算机都需要IO桥

IO桥是PC机特有的,除了PC外的其它类的计算机,有些(单片机)就不使用IO桥。---------------

 


b)为什们会使用IO桥

其实是可以不使用IO桥的,没有IO桥时,所有的“IO接口”都是直接挂接在三大高速总线上的,但是随着发展,挂接的外部

设备越来越多,直接挂接在总线上,管理是一个麻烦,为了管理的便利,就加了IO桥,IO接口直接挂接在IO桥上,就由IO桥

来管理众多的IO接口。

 

c)IO桥常常分为南桥和北桥

南桥对应的就是一个南桥芯片,北桥对应的就是一个北桥芯片,南北桥之间会有相互连接。 -----------


· 南桥:负责CPU与鼠标、键盘、磁盘等,通信速率较低的外部设备之间的通信。


· 北桥:负责CPU与内存、显示器等,通信速率要求较高的外设之间的通信。

 


d)io桥所处的位置

io桥指的就是南桥和北桥芯片,位于CPU芯片的外部。

 

 

 

 

 

 

 

 

 

 

 

 

 

4)地址、数据、控制线相互配合工作

 

a)例子:将内存中地址0101字节的内容读出,写到CPU通用寄存器R0(地址为1001)中,假设寄存器R0只有一个字节。

 

 

 

 

 

 

 

 

 

 

 

 

 

步骤:

第一大步:从内存0101的字节,读出数据

(1)cpu通过地址线发出0101这个地址信号,内存的0101对应的字节会被选中

(2)cpu解释并执行“读指令”,发出“读”的控制信号

通过控制线发送“读”控制信号后,之前被选中的0101字节,就被设置为了可读,设置为可读后,内存0101字节中的数据2.5v 2.5v 0v 0v 2.5v 0v 0v 2.5v11001001)会被读出,读的过程,其实就是通过数据线将电信号导出,由于内存的数据、地址、控制线是并行传输的,那么在并行数据线上,此时拥有2.5v 2.5v 0v 0v 2.5v 0v 0v 2.5v相同的电平状态。

 

 

 

与此同时,哪些挂在地址、数据、控制线上的,与本次操作不相干的其它内存字节,全部为高阻状态,为高阻态时,不会受到数据、地址、控制线上面信号的影响。

 

第二大步:将数据写入r0中

1)cpu通过地址线发出1001地址信号,CPU通用寄存器组中的r0寄存器会被选中

2)cpu解释并执行“写指令”,发出“写”的控制信号

cpu通过控制线发出“写”控制信号后,被1001地址选中的r0会被设定会写状态,设置为可写后,数据线上的数据(电平信号)

2.5v 2.5v 0v 0v 2.5v 0v 0v 2.5v,会被传输给r0寄存器,并将电信号锁存起来,写过程完毕,而其它寄存器处于高阻态, 不会受到影响。

 

b)以上过程,在高级语言程序里面,只有一条语句

使用高级语言写程序时,以上过程的过程只需一条a = b就搞定了,但是实际上这句话会被翻译为汇编,然后汇编程序被执行时,硬件在指令的控制下,经过以上步骤才能实现数据的读写。

 

c)疑问

有些同学可能有一个疑问,那就是地址、数据、控制线,在技术上是如何做到只操作想操作哪个字节就操作哪个字节,为什么其它直接为高阻态是不受影响,其个就是我们数字电路里面所学的三态门的工作原理了,具体内容,这里就不再介绍,后面技术课程涉及到后在讲解这样的问题。

 

3)外部设备

1)什么是外部设备

挂接在外设IO接口上的都是外部设备,与设备在机箱外部还是内部没关系,不管是在内部还是外部都是外设,外部设备大致分为三类。

a)数据的传输:比如网卡,负责数据的发送和接收,即是输入也是输出设备

b)数据的存储:比如像磁盘,SSD(固态硬盘),负责数据的存储,既能读数据也能里写数据,所以即是输入也是输出设备。

c)数据的翻译:比如输入设备MIC,将输入的声音翻译为电信号的二进制数据。比如显示器,将电信号的二进制数据翻译为人看得见的

图像和视频。

 

2)外部设备所在位置

a)片内外设

集成在芯片的内部的片内外设,比如xxxxx,后面会讲片内外设。只是像PC这种计算机,使用的CPU是一个独立芯片,很少有片内外设,后面讲MCU、SOC时,会提到什么是片内外设。

 

b)片外外设(芯片外部)

·直接在电路板上:内存

·需要通过数据线连接在一起

机壳内:硬盘

机壳外:比如像鼠标,U盘。

 

3)输入设备

键盘:字符图形输入,按下某个按键,输入动作会被翻译为ASCII编号数据(以电信号的二进制数形式存在)。

鼠标:光标位置输入,将鼠标移动转为电信号二进制的座标数据

摄像头:图形图像输入,将其翻译为电信号二进制数据

麦克风:声音输入,将其翻译为电信号二进制数据

触摸屏:将触摸位置翻译为电信号二进制座标数据

网卡:直接接受别的计算机发送的电信号二进制数据,输入给计算机

磁盘、SSD:读取存储的数据,输入给计算机

 

4)输出设备

显示器:将CPU按照程序要求处理后的,电信号的二进制的图形、图像数据,翻译成为图形图像给人看

喇叭:将声数据翻译成为人能听得见的声音

打印机:将数据输出到打印机打印,打印机打印

机械手臂:将输出数据翻译成为机械手臂的动作

led灯等:将输出数据翻译成为灯的亮灭

网卡:从计算机输出数据,传输给别的计算机

磁盘、SSD:从计算机输出数据,写到磁盘或者SSD中

 

7.4 为什们要介绍计算机的组成结构

这里之所以要介绍计算机的组成结构,主要是有如下两个原因,

(1)很多同学对于计算机的结构一直是模模糊糊的,都听说过冯诺·依曼结构,但是没有多少同学真正的知道这个结构具体是怎样的,特别是对于计算机较详细的机构没有多少同学清楚,所以我们希望给给位同学把这部分的知识补习下。

(2)我们后续的嵌入式技术课程,还会详细涉及计算机的组成结构,那时会以具体的某个具体的某个开发板为例进行讲解,这里先笼统的介绍计算机的大体结构,是希望各位同学能有一个基础的理解,为我们后面讲解更加深入的结构知识时打基础。




作者:佳嵌工作室

51CTO免费视频地址:http://edu.51cto.com/lecturer/12941022.html

课程进度咨询QQ群:528495268

转载请说明源地址。


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章