"Principles of Computer System Design"读后感 -- 江鋆晨

Principles of Computer System Design是一本针对计算机系统设计人员的著作。作者是MIT的Saltzer和Kaashoek。Saltzer是计算机网络中最重要的概念之一end-to-end argument的提出者,而Kaashoek也是在计算机和计算机网络中的很多重要概念上有所贡献。

计算机系统的设计在本书中被提升到了理论的角度。首次,计算机系统区别于其他系统的本质在于计算机的性能既受到了物理世界的限制,同时又可以在新产品进步时得到发展。这使得计算机系统的设计有着独特性,具体说来就是计算机系统设计的复杂度。本书的最重要目的就是将计算机系统设计中的关键技术进行抽象,抽取出本质的一些设计原则,而不是设计细节。在本书看来,最重要的降低复杂度的设计原则是模块化。实现模块化的方式有很多,这些就是本书的内容分章节的方式。以下就节选一些章节谈一下我的感想。

计算机系统的组织结构

计算机系统的组织结构一种层次化的想法。层次化的目标是使得下层的问题对上层进行透明处理。这样的原则在计算机和计算机网络的设计中被淋漓尽致地应用。在作者看来,这就是实现模块化最重要的手段之一。复杂的系统一定存在功能实现方式的选择问题。类似的工程问题可以具体问题具体分析,但在本文看来,他们的共同本质都是将具体的应用性问题放在上层进行解决,而将接近底层结构的问题放在下层进行解决。

利用通信进行模块化

利用通信的好处在于将模块之间互相影响的作用降到最低。这样可以降低错误带来的复杂度。当两个模块之间仅有的通信渠道是文本的时候就可以很好地定义每个模块之间的接口。不然的话,如果可以让一个模块直接接触另一个模块的操作,那将很难区分出错的是这个模块本身的操作还是另一个模块在这个模块上施加的操作。一种最重要例子就是因特网。在因特网中,所有机器都是只能通过数据包的文本信息就行通信。虽然因特网的安全问题广受诟病,但假设另一台机器可以对一台机器进行直接操作,那肯定会带来更多的安全问题。

利用虚拟进行模块化

虚拟的最重要贡献在于如何在当模块和模块共享同一些资源的时候进行模块化。当模块和模块用同一个资源时,就需要有一个资源管理的机制,使得模块在操作一个资源的时候不用考虑是否会影响其他模块的资源。这种虚拟化的最明显例子是计算机操作系统的进程管理机制。不同的进程就是一种使用同几个资源(内存,IO,CPU等)并且需要独立进行运行的模块。

我的研究方向就是计算机网络,而计算机网络是最重要的几个计算机系统之一,所以本书的动机让我激动不已。Saltzer在1990年的划时代论文中提出了end-to-end argument是计算机网络的基础原则之一。这个原则是为了合理分配功能的实现。在计算机网络的领域看来,end-to-end argument已经是非常本质的原理,而在本书的理解中,end-to-end只不过是众多原则中的一个特例。

你可能感兴趣的:(System)