从Linux 服务器开发视角来看计算机,都是符合冯.诺依曼体系结构的。
输入设备:向计算机输入数据,比如通过摄像头、MIC,将图像/声音等转成二进制数据给计算机、从网卡输入数据给计算机等;
输出设备:从计算机输出数据,比如通过显示器、扬声器,将二进制数据翻译成为图片/视频/声音等让人能够识别、或者通过网卡输出数据给别的计算机。
每个IO设备在启动时都要向内存中映射一个或者多个地址,这个地址有8bit长,又称作IO端口。针对这个地址的数据,统统被北桥芯片重定向到IO总线上实际的设备上。
实现程序和数据的存储。
不同的存储器划分:
速度排序:寄存器(离CPU最近)>缓存>内存(CPU之外)。
容量大小:寄存器(离CPU最近)<缓存<内存(CPU之外)。
进行算术运算和逻辑运算。
1.1.4 控制器解释(理解)程序指令,将程序指令转为对应的一条一条的微指令,这些微指令会控制运算器等部件工作,进行比如:数据的算术、逻辑运算、数据的搬移,比如从CPU的寄存器搬移到内存,或者从内存的某个位置搬移到内存的另一个位置。
控制器、运算器被统一做到了CPU里面。
存储器既能充当输入设备,也能充当输出设备。因为其比较关键所以单独拎出来强调。
因此计算机体系结构再精简就只有3大块:CPU,总线与接口、外部设备(输入输出设备)。
由于CPU已经是一个完整的、封装好的部件,系统的设计人员只能通过编写软件,再经由编译器或解释器翻译为机器能够理解的代码来执行,CPU并没有专门的硬件电路来实现完全地控制外部设备的运行,这种实现方式是软件实现,是一种通用的实现,控制信号从软件到硬件要经过若干次转化,但有的时候,工程和设计领域往往需要高速高性能的芯片来实现控制与计算,这时候就需要更加强大的CPU或将几个CPU用一些技术并行起来协同工作,成本就会增加。
a) 把需要的程序和数据送至计算机中。
b) 必须具有长期记忆程序、数据、中间结果及最终运算结果的能力。
c) 能够完成各种算术、逻辑运算和数据传送等数据加工处理的能力。
d) 能够按照要求将处理结果输出给用户。
输入设备获取数据存储到内存中,CPU 从内存中取出数据并进行处理,运算完毕后再交给内存,内存将 CPU 处理过的数据交给输出设备,由输出设备进行数据的输出。
1.4 特点a) 存储器指的是内存,而不是外存(磁盘)。
b) 不考虑缓存的情况下,这里的 CPU 能且只能对内存进行读写,不能访问外设(输入或输出设备)。
c) 外设(输入或输出设备)要进行输入或者输出数据时,也只能写入内存或者从内存中读取数据。
d) 所有设备都只能直接和内存打交道。
传输地址信号,通过地址信号找到要操作的寄存器、内存单元等。
2.1.2 控制总线传输控制信号,比如通过地址总线找到内存的某位置了,接下来到底是进行读还是写,就由控制总线发控制信号决定。
2.1.3 数据总线传输数据信号,比如通过地址总线找到内存的某个位置了,控制总线发出写的控制信号,希望对其写数据,那么写数据时,数据信号就是在数据总线上传输的。
2.2 IO总线系统总线在较新的设计中,它被称为前端总线(front side bus (FSB))。桥间链接线一般是PCI总线。
除了常见的IDE总线,PCI总线,SCSI总线,还有很多其他技术规格的总线。这些总线往往用于IO总线。见下图
ISA总线:一种老旧的低速总线,即将被排除在PC设计之外。
USB总线(通用串行总线):这是一种新的低速总线。
AGP总线:仅用于显卡。
FSB总线:即前端总线(Front Side Bus),CPU和北桥之间的桥梁,CPU和北桥传递的所有数据必须经过FSB总线,可以这么说,FSB总线的频率直接影响到CPU访问内存的速度。
PCI总线:PCI总线是一种高性能局部总线,其不受CPU限制,构成了CPU和外设之间的高速通道。比如现在的显卡一般都是用的PCI插槽,PCI总线传输速度快,能够很好地让显卡和CPU进行数据交换。
北桥:北桥是CPU和内存、显卡等部件进行数据交换的唯一桥梁,也就是说CPU想和其他任何部分通信必须经过北桥。北桥芯片中通常集成的还有内存控制器等,用来控制与内存的通信。现在的主板上已经看不到北桥了,它的功能已经被集成到CPU当中了。
南桥:主要负责I/O设备之间的通信,CPU要想访问外设必须经过南桥芯片。
1) 作用
如果没有IO桥,所有的“外设IO接口”都是直接挂接在三大高速总线上的,但是随着发展,挂接的外部设备越来越多,直接挂接在总线上太多了,管理是一个麻烦,慢慢的才有了IO桥这个管理者。
2) IO桥的好处
设备的IO接口直接挂接在IO桥上,IO桥有效的管理着众多的外设IO接口,IO桥里面会有相应的控制芯片,控制IO桥的工作。
3) 并不是计算机都需要IO桥
IO桥是PC机特有的,并不是所有的计算机都有的,比如我们后面讲的ARM的开发板,就没有明显的IO桥这个东西。
PC是所有子系统的总和。在一个子系统和另一个子系统之间的边界处,就存在接口(Interface)。接口——将两个子系统连接在一起并使它们能够交换数据的电气系统。
接口的概念有点抽象,因为它最准确地指的是一个标准(一组数据交换规则)。实际上,一个接口可以包含,例如:
1) 两个控制器(controllers)(连接的每一端都有一个控制器);
2) 一根电缆;
3) 包含在控制器中的一些软件(协议等)。程序员只需要理解到协议一层即可,或者把接口就当成协议。
内部寄存器到运算单元之间总线位数来确定。
内存寻址能力与CPU的位宽无关。
CPU的寻址能力与它的地址总线位宽有关,而我们通常说的CPU位宽指的是数据总线位宽,它和地址总线位宽半毛钱关系也没有,自然也与寻址能力无关。
CPU位宽指的是一个时钟周期内CPU能处理的二进制位数,如8086 CPU是16位的,可以一次处理2个字节(16个bit),80386 CPU是32位,能一次处理4个字节,目前的CPU基本上64位的了,一次能处理8个字节。
这个PAE就是CPU的地址总线位宽。在8086这个16位CPU上,它的地址总线位宽是20位,正好能寻址1MB,80286它的PAE是24位,在Pentium II(32位CPU)时这个PAE变成了36位,可以支持64GB的寻址。64位CPU出现之后,其地址总线位宽一般采用的是36位或者40位,它们寻址的物理地址空间为64GB或者1T。
地址总线用来定位,数据总线用来传输,也就是当CPU需要从内存读取数据或向内存写入数据时,它使用地址总线来指定其需要访问的存储器块的物理地址,然后通过数据总线发送数据。
一个计算机,它的内存访问能力是由硬件和软件共同决定的。硬件层面就指 CPU 的寻址能力,也就是地址总线的个数。软件层面,指的就是操作系统。实际上我们(进程)在进行内存访问的时候,访问的都是逻辑地址,而逻辑地址是由操作系统提供的。对于32位的操作系统,其逻辑地址编码采用的地址位数是 32 位,那么操作系统所提供的逻辑地址寻址范围就是 4GB。从这个方面来说,纵使你的 CPU 实际寻址能力为 2 的 64 次方,由于操作系统只提供 4GB 的逻辑地址,那 CPU 透过操作系统所能访问到的内存大小也就只有4GB了。



