Open alicemare opened 5 years ago
转载自豆瓣《计算机组成原理》唐朔飞 的书评计算机组成印象
一、CPU体系结构印象 把硬件电路想象成程序代码,就能理解为什么控制器能在时钟的驱动下完成取指译码间址执行中断这些操作了。这里只需要数电的基础就足够,知道与或非门触发器组合逻辑和时序电路,话说时序电路看的时候直接跳过去了,有机会还是要补一下。独立的看控制器就是这样了,然后通过8085的引脚做一下复习和概念封装。这里实现了多级时序下的,取指间址执行及中断。 ALU相对容易理解,专门负责算术和逻辑运算,封装的很强大。想像一下,所有复杂的运算大部分都是串行在ALU中进行的,就不得不惊叹这种简单又精巧的设计。 寄存器就是一堆触发器了。 中断系统比较有趣,之前曾经在上层总结过一个结论,所有被动的想象,实际上总是有主动的本质。中断实际上是时钟驱动下轮询的结果,实现了看起来是实时响应的效果。类比人的触觉和其它感觉之于神经系统,与中断十分类似。人体就是一个集机电光磁于一身的复杂组合逻辑"电路'。中断的排队和屏蔽由专门的中断控制器实现,响应靠的是控制器的中断周期和隐指令,中断向量是由专门的产生器生成的,直接设置到PC寄存器上就OK了。 这样整体看来,指令的实现便有了基础,执行有了驱动,比如调试支持这些特性就很容易直观上理解了,在布尔代数和图灵机的模型基础上,无论是基于机电光磁实现,一个通用的有限状态机,CPU体系结构的整体印象便建立起来了。 接下来就是把这个印象落实下来,x86有哪些寄存器,有怎样的指令系统是如果格式化存储的,有哪些中断优先级如何,中断向量在内存中是如何存放和设置的。这些,就前进到汇编这一层了。
二、总线内存IO印象 冯诺依曼的计算机体系结构可以看作是一个线索,CPU包括了运算器和控制器,然后就是内存和IO,这些设备通过总线连接在一起。 之前对总线的印象是主板上那错综复杂的布线,怀疑自己的智慧是否能看透这布线下的秘密,实际上所谓总线,不过是万能积木中的导线而已,分类有很多,了解的角度,只需要知道数据总线地址总线和控制总线,总线是元件之间连接沟通的桥梁,看主板上的PCI插槽,所做的只是把设备的引脚并联到总线上而已,总线就是这几根导线,无论直观上感觉多么的复杂,落实到实际都是如此的优雅。其实常规意义上的总线是元件之间连接的桥梁,芯片之间乃至机器之间的连接也是广义上的总线。所谓的南桥北桥都是为了更好的发挥不同主频的元件的效率,对总线优化的结果,这里还需要多了解一下。总线的判优和仲裁都是硬件电路,CPU、内存和IO都在总线之上。 CPU实际上只是图灵机中的有限状态机,而内存就是构成完整图灵机的无限长纸带部分。内存的布线和预料的一样复杂,难以想象在内存卡里有数亿个导线连接着存储单元,这是何其壮观的实在。内存的扩展也很巧妙,连接上不同的地址总线就可以实现扩展了。优化又导致了CPU的Cache,这些虽不是关键,但知道来龙去脉总归是好的。话说Cache,类比虚拟内存,非常的相像,所谓的内存外存概念就开始模糊了。说到外存,主要是硬盘软盘磁带和光盘,磁带可以和硬盘一样存储数据,这个事实曾经令我感到惊讶,之前知道还有一种外设能够把真正的歌曲磁带转成mp3。硬盘是主题,可以有多个设备,多个盘片,也就是多个磁头,不同的磁道构成不同的柱面,磁道分割成扇区,这些都是硬件这一层决定的结构。第一次了解到硬盘上不仅仅是数据,还有一些内部的结构,比如磁道索引,扇区号和CRC效验之类的硬件内部数据结构,这些和操作系统的文件系统有点类似,对上层应该是透明的。控制器译码地址通过电机控制小车定位 ,然后利用磁头在告诉旋转的盘面上读出磁信号,然后通过放大电路输出,这一切似乎还比较神秘,但类比一下所谓的高速旋转和时钟频率的速度,就知道告诉旋转,其实是很稳定的。所谓感觉起来不稳定的,都是假象,都是源自于认识上的误区。软盘的结构居然和硬盘差不多复杂,类比软盘驱动器,可以更好的理解硬盘驱动器和光盘驱动器的概念。 IO是最有意思,也是信息量较大的一章,看的比较快,很多都不记得了。IO有五种方式,常见的有三种,程序查询中断和DMA,程序查询是最朴素的设计,键盘好像就是这种类型,也第一次明白了扫描码之所以叫做扫描码的原因了,另外一个比较震惊的是有些键盘中居然有单片机存在。中断是一个优化,比如打印机这类,类比同步和异步就很容易理解,虽然有点“这个羊的毛是地毯做的”的逻辑,异步应该就是通过中断实现的吧。DMA是更牛的优化,把CPU进一步解放出来,对于高速IO设备,比如硬盘,采用这种方式,神秘的DMA,最终走下神坛。设备的选择是使用设备码,那具体是怎么实现的呢,按照设备吗查到设备并通知到?通知是不可能的,因为所谓被动都是假象,总是有主动的实质。实际上是写在硬件电路里,如果设备总线上的设备码刚好等于某个设备的设备码这个设备才会被激活,这样就保证连接到数据状态控制总线上的设备刚好是设备总线上设备吗说对应的设备了。IO设备的接口非常简单,从程序设计的角度来看。这里对接口的定义,比平时看到的更普适一些。所谓的端口,就是寄存器。还是不知道windows支持65536个端口是什么意思。串口和并口按照传送数据的不同方式命名,只是速度的差别,就像直观上很难理解通过电话线可以传送大量数字信息一样,对串并口的吞吐量暂时也比较难想象,就像USB的速度怎么都想不到会有这么快一样。不同速度的设备使用不同的接口,这就是PCI和IDE这些东西的区别了。 真正写出来的时候发现很多地方其实还没弄清楚,结合主板上的元件和接口复习一下应该会是比较好的选择。
三、小结 到这里,在理论基础思想武器的指引下,从电路以及往上到微指令到指令的来龙去脉,就有一个大致的印象了。这虽然可能是个陡峭的学习曲线,但这样才是真正的顺流而下。 《计算机组成原理》是个好东西,作为非计算机专业的程序员,对此不了解,是个不可饶恕的错误。
一、CPU体系结构印象 把硬件电路想象成程序代码,就能理解为什么控制器能在时钟的驱动下完成取指译码间址执行中断这些操作了。这里只需要数电的基础就足够,知道与或非门触发器组合逻辑和时序电路,话说时序电路看的时候直接跳过去了,有机会还是要补一下。独立的看控制器就是这样了,然后通过8085的引脚做一下复习和概念封装。这里实现了多级时序下的,取指间址执行及中断。 ALU相对容易理解,专门负责算术和逻辑运算,封装的很强大。想像一下,所有复杂的运算大部分都是串行在ALU中进行的,就不得不惊叹这种简单又精巧的设计。 寄存器就是一堆触发器了。 中断系统比较有趣,之前曾经在上层总结过一个结论,所有被动的想象,实际上总是有主动的本质。中断实际上是时钟驱动下轮询的结果,实现了看起来是实时响应的效果。类比人的触觉和其它感觉之于神经系统,与中断十分类似。人体就是一个集机电光磁于一身的复杂组合逻辑"电路'。中断的排队和屏蔽由专门的中断控制器实现,响应靠的是控制器的中断周期和隐指令,中断向量是由专门的产生器生成的,直接设置到PC寄存器上就OK了。 这样整体看来,指令的实现便有了基础,执行有了驱动,比如调试支持这些特性就很容易直观上理解了,在布尔代数和图灵机的模型基础上,无论是基于机电光磁实现,一个通用的有限状态机,CPU体系结构的整体印象便建立起来了。 接下来就是把这个印象落实下来,x86有哪些寄存器,有怎样的指令系统是如果格式化存储的,有哪些中断优先级如何,中断向量在内存中是如何存放和设置的。这些,就前进到汇编这一层了。
二、总线内存IO印象 冯诺依曼的计算机体系结构可以看作是一个线索,CPU包括了运算器和控制器,然后就是内存和IO,这些设备通过总线连接在一起。 之前对总线的印象是主板上那错综复杂的布线,怀疑自己的智慧是否能看透这布线下的秘密,实际上所谓总线,不过是万能积木中的导线而已,分类有很多,了解的角度,只需要知道数据总线地址总线和控制总线,总线是元件之间连接沟通的桥梁,看主板上的PCI插槽,所做的只是把设备的引脚并联到总线上而已,总线就是这几根导线,无论直观上感觉多么的复杂,落实到实际都是如此的优雅。其实常规意义上的总线是元件之间连接的桥梁,芯片之间乃至机器之间的连接也是广义上的总线。所谓的南桥北桥都是为了更好的发挥不同主频的元件的效率,对总线优化的结果,这里还需要多了解一下。总线的判优和仲裁都是硬件电路,CPU、内存和IO都在总线之上。 CPU实际上只是图灵机中的有限状态机,而内存就是构成完整图灵机的无限长纸带部分。内存的布线和预料的一样复杂,难以想象在内存卡里有数亿个导线连接着存储单元,这是何其壮观的实在。内存的扩展也很巧妙,连接上不同的地址总线就可以实现扩展了。优化又导致了CPU的Cache,这些虽不是关键,但知道来龙去脉总归是好的。话说Cache,类比虚拟内存,非常的相像,所谓的内存外存概念就开始模糊了。说到外存,主要是硬盘软盘磁带和光盘,磁带可以和硬盘一样存储数据,这个事实曾经令我感到惊讶,之前知道还有一种外设能够把真正的歌曲磁带转成mp3。硬盘是主题,可以有多个设备,多个盘片,也就是多个磁头,不同的磁道构成不同的柱面,磁道分割成扇区,这些都是硬件这一层决定的结构。第一次了解到硬盘上不仅仅是数据,还有一些内部的结构,比如磁道索引,扇区号和CRC效验之类的硬件内部数据结构,这些和操作系统的文件系统有点类似,对上层应该是透明的。控制器译码地址通过电机控制小车定位 ,然后利用磁头在告诉旋转的盘面上读出磁信号,然后通过放大电路输出,这一切似乎还比较神秘,但类比一下所谓的高速旋转和时钟频率的速度,就知道告诉旋转,其实是很稳定的。所谓感觉起来不稳定的,都是假象,都是源自于认识上的误区。软盘的结构居然和硬盘差不多复杂,类比软盘驱动器,可以更好的理解硬盘驱动器和光盘驱动器的概念。 IO是最有意思,也是信息量较大的一章,看的比较快,很多都不记得了。IO有五种方式,常见的有三种,程序查询中断和DMA,程序查询是最朴素的设计,键盘好像就是这种类型,也第一次明白了扫描码之所以叫做扫描码的原因了,另外一个比较震惊的是有些键盘中居然有单片机存在。中断是一个优化,比如打印机这类,类比同步和异步就很容易理解,虽然有点“这个羊的毛是地毯做的”的逻辑,异步应该就是通过中断实现的吧。DMA是更牛的优化,把CPU进一步解放出来,对于高速IO设备,比如硬盘,采用这种方式,神秘的DMA,最终走下神坛。设备的选择是使用设备码,那具体是怎么实现的呢,按照设备吗查到设备并通知到?通知是不可能的,因为所谓被动都是假象,总是有主动的实质。实际上是写在硬件电路里,如果设备总线上的设备码刚好等于某个设备的设备码这个设备才会被激活,这样就保证连接到数据状态控制总线上的设备刚好是设备总线上设备吗说对应的设备了。IO设备的接口非常简单,从程序设计的角度来看。这里对接口的定义,比平时看到的更普适一些。所谓的端口,就是寄存器。还是不知道windows支持65536个端口是什么意思。串口和并口按照传送数据的不同方式命名,只是速度的差别,就像直观上很难理解通过电话线可以传送大量数字信息一样,对串并口的吞吐量暂时也比较难想象,就像USB的速度怎么都想不到会有这么快一样。不同速度的设备使用不同的接口,这就是PCI和IDE这些东西的区别了。 真正写出来的时候发现很多地方其实还没弄清楚,结合主板上的元件和接口复习一下应该会是比较好的选择。
三、小结 到这里,在理论基础思想武器的指引下,从电路以及往上到微指令到指令的来龙去脉,就有一个大致的印象了。这虽然可能是个陡峭的学习曲线,但这样才是真正的顺流而下。 《计算机组成原理》是个好东西,作为非计算机专业的程序员,对此不了解,是个不可饶恕的错误。