1. 计算机组成和计算机结构的概念区分
计算机结构:指的是能被程序员所看到的已经实现的计算机属性(或者称之为功能)。如乘法指令功能。
计算机组成:指的是如何实现计算机结构中的所体现的属性。如乘法指令的具体实现,比如累加的方式。
2 计算机组成研究的3个问题
- 计算机需要实现什么功能?处理输入,产生输出,存储和执行程序以处理复杂的问题。
- 计算机的组成模块?即计算机应该需要哪些部件,每个部件之间如何协同合作。
- 信息的表示?首先用什么来表示信息,冯诺伊曼模型的答案是二进制数据。进一步又可以细分出2个问题,如何把现实中的模型转化为二进制数据来表示?二进制数据应该以何种方式存储在现实的硬件设备中?
3. 冯诺伊曼计算机模型三要素
- 信息以二进制数据的方式表示。(依赖于物理技术的发展,电的高低电平表示1 0,确定了数据模型和硬件设备的连接方式)
- 采用存储执行程序的方式。(计算机可以独立于人自动运行)
- 计算机由5个部件组成。(确定了计算机的功能边界和架构)
4. 计算机系统硬件结构
CPU,IO,总线,存储器,接口(输入输出设备通常都没有集成到总线中,但是计算机通常会预留多个接口,使得输入输出设备可以通过接口连接到总线。和软件中的接口是同一种模型?)。
PS:该结构是个简化的模型,现代的计算机系统硬件结构有更多的优化。比如,由于CPU处理的速度远快于通过总线获取主存的数据,因此增加了多级缓存,一次从主存中获取大块的数据,缓存在Cache中。磁盘网卡等IO设备的数据读写比较慢,并且不需要CPU的参与,因此增加DMA设备,负责将IO设备中的数据读取到内存中。
5. 计算机的发展史
- 电子管制造的巨型计算机(1946-1957,共11年),主要用于科学计算。
- 晶体管制造的大型计算机(1958-1964,共6年),可用于数据处理。
- 中小规模集成电路制造的小型计算机(1965-1971,共6年)。
- 大规模,超大规模集成电路制造的微型计算机(1971-至今),计算机开始走入寻常百姓家。
问题:计算机是从1946年开始,1971年才走入寻常百姓家,那么之前的电子设备,如电影,电报,电话,磁带都是以何种方式进行数据存储?
6. 其它相关设备的发展史
相机:以胶片相机为例,信息存储在胶片上,胶片中的化学物质在曝光时会产生化学反应,通过洗底片的方式把化学物质固定,如果需要照片则把化学物质上的信息复制出来即可。(简而言之,用化学物质来存储图片信息)
电影:在相机的基础上,进一步把多张图片组合成连续的动作。(本质都是把光信息存储在化学物质或者物理介质上,然后重映出来)
磁带:把声音振动的能量转化为强弱跟随声音变化的电信号(注意这里是连续的电信号)。电话同理,将声波信号转为电信号,存储或者传输电信号,然后再将电信号转为声波信号。
电报:图像信息转成电流信息,电流信息再转成电磁波,通过电磁波来传输,收到电磁波后再转为电流信息。
PS:上述的设备都是先于计算机产生,用不同的方式去存储和传输信息,但是并没有计算功能。
PSS:电子管的作用:放大电信号,使得电信号可以传播和接收。电话和电报是其早期的一种应用,为计算机的发明奠定了物质基础(计算机的物质基础是如何存储和传播电信号)。
7. 操作系统和语言的发展史
操作系统 | 起始时间 |
---|---|
Windows | 1985年 |
Linux | 1991年 |
MacOs | 1984年 |
Unix | 1970年 |
编程语言 | 起始时间 |
---|---|
C | 1972年 |
C++ | 1983年 |
Python | 1991年 |
Java | 1990年 |
C# | 2000年 |
Go | 2009年 |
8. 多处理器架构
参考文章:多处理器架构
8.1 超线程技术:CPU在调度执行线程时,通常不会占用芯片全部的硬件,比如浮点运算和整数运算占用的是芯片中的不同部分,因此可以并行计算。对于单个物理CPU,模拟成2个CPU核心,并增加不能共享的硬件部分,如上下文缓存,然后共享同一个物理CPU。(其本质是因为CPU处理有大量的硬件冗余,通过增加其它硬件设备来利用这部分冗余)。
8.2 SMP(Sysmmetric Multi-Processor)。CPU之间存在数据竞争,因此无法很好的做动态扩展,可同时存在的CPU数量比较有限。
8.3 NUMA(Non-Uniform Memory Access)。将内存划成等份每份称之为一个节点,分给各个CPU,CPU会优先从最近的的Memory节点中读写内存。(这里会有个问题,对于多线程的进程,其会运行在多个CPU中,其内存也必然会被分配到多个Memory节点中,因此必然会出现跨节点的情况。操作系统需要对NUMA架构进行优化,减少跨节点访问数据,跨节点访问时,极限情况下会退化成SMP)。
总结
- 计算机的发展依赖于通用的信息表示。信息用01表示具有极高的通用性,在这个通用的模型下,把现实中的绝大部分信息都可以转成数字信息。
- 计算机的发展是由下而上来驱动,操作系统依赖于计算机硬件性能的提升,因此需要更优的操作系统来发挥计算机的硬件性能。编程语言依赖于互联网的普及,需要更加符合当下需求的语言来编码。如今计算机硬件的发展逐渐停滞,那么软件的上限是否也会因此而被制约呢?当然,如今软件这一块仍大有可为,云就是从软件层面来整合硬件的。