这学期上《计算机系统结构》这门课,用的是张晨曦老师编写的教材,任课老师一直赞本书多么权威(的确权威,该本书有一个内容丰富的配套网站)。这么一说就激起同学们不得不认真学习书中知识的热情了。 

自从大学接触计算机以来,我对于计算机体系结构的理解从来都是上层(如应用程序)封装下层(如操作系统)的具体实现细节,由下层向上层提供相应的服务,前提是上层必须服务下层所公开的API(或者说协议、规约等) 

上面的这种看待计算机的观点就如书中这种下层为上层提供基础的多层次结构体系(注意书中是说从计算机语言的角度,把计算机系统按功能划分的),如下:

clip_p_w_picpath002

 

注意到图片中在“软件”层次上的4个分层中都有“虚拟机”一词,想到了Java虚拟机(JVM)。从计算机语言的角度上看,我认为计算机系统的确是这样上层封装下层并不断抽象出一个适合当前用户理解能力的视图。譬如,不是每个人都能够掌握CPU层级的微程序指令,那么就往上封装一下称为机器语言;但机器语言又是天书般难懂,那就只得再一层层往上封装直至恰当的抽象层次了。 

这种不断封装、抽象的机制不仅帮助计算机用户只关注于当前自己需要理解的层面,减少对于底层具体实现细节理解负担,还从另一方面使得计算机的底层知识对用户透明。而这种透明正是底层实现细节能够脱离于具体用户而灵活改变实现的基础,同时也保证了计算机系统的安全性。 

基于这种层层封装、抽象的角度来看待计算机系统,我们就将其理解为上层调用下层服务的工作流程。然而,一旦转换个角度来看,结构恰好不是这样子的。看了高焕堂老师的《Android应用框架原理与程序设计36技》对于框架的讲解,很惊讶于其看待操作系统与应用程序的关系,当然这两者之间还隔着应用框架这一至关重要的层次。 

按照原来的看待角度得到的视图如下:

clip_p_w_picpath004

转换一种层次来看的话,计算机的不同模拟层次结构如下:

clip_p_w_picpath006

 
       书中高焕堂老师称第一种为“常见的迷思”,而第二种为“较合理的观点”。之所以会有第二种看法,接下来读着高老师对应用框架的魅力——控制反转(IoC的讲解就能大概地有些许了解了。
 
       我的理解,在这里应用框架是作为应用程序与操作系统之间进行沟通的桥梁,也可以理解为操作系统提供给外部应用程序的API,即统一的接口。这样子我们就可以比较理解平时在Windows下安装软件(应用程序)这一过程和目的了。安装软件的目的是向操作系统注册该软件的身份(大概注册表的存在与用途就是这原因吧),而在使用时则由应用框架来动态地(即书中写道“主控者是应用框架,而不是应用程序”)选择适合用户要求的服务。应用程序在这里只被当作是一种事前已向操作系统注册,使用时通过应用框架来动态调用的一种服务。
 
       但是话说回来,平时我们明明是针对操作系统上已安装的某个应用程序来使用我们的计算机的,这第二种看法似乎也有点让人迷糊。我的看法是,怎么看待都是合理的,造成所看待视图的差异的原因只是因为我们不同的人对同一事物有不同的关注点,甚至同一个人在面对同一事物时,也会因为在不同情境下对该事物的期望不同而造成差异。一句话就是:角度不同,抽象层面不同!
 
       对于控制反转(IoC)还不甚了解,模模糊糊说不出来,好像很大程度上就是涉及到多态机制的运用。只待在接下来的学习中能多点注意这方面的知识了。