本节书摘来自华章计算机《计算机系统:系统架构与操作系统的高度集成》一书中的第1章,第1.2节,作者:(美)拉姆阿堪德兰(Ramachandran, U.)(美)莱希(Leahy, W. D.)著, 更多章节内容可以访问云栖社区“华章计算机”公众号查看。
1.2 计算机系统中的抽象层次
让我们来看一个你可能熟悉的应用,比如说谷歌地球(Google Earth,见图1-2)。你可以在图形用户界面(Graphical User Interface,GUI)的帮助下通过在地球地域上移动鼠标来在整个地球表面上浏览。你可以将鼠标移动到任何感兴趣的区域(比如说珠穆朗玛峰),然后单击鼠标。你马上就可以在屏幕上看到世界上最高山脉的3D模型、卫星图片以及该区域的一些照片等。在盒子里发生什么事情才能带给你这样的视觉体验呢?
再考虑一个更复杂一些的例子,一个叫做“棒球”的多人视频游戏(见图1-3)。游戏的目标非常简单,即比别的队获得更多的分数以赢得比赛。但是,实际比赛需要复杂的规则和处罚措施。
我们考虑开发这个应用的软件体系结构。想象有一个(逻辑上的)中心软件组件,我们称其为服务器,它负责维护游戏的状态。每个玩家也由一个软件组件代表,我们称其为客户端。由于这是一个多人视频游戏,客户端和服务器并不在同一台机器上执行,它们在由局域网连接起来的不同机器上执行。这类应用程序很自然地应该用高级语言(High Level Language,HLL)编程。
我们可能会给正在设计的游戏添加一些音频/视频的内容。正如你在图1-4中所见,要让视频游戏软件能运行,除了我们自己编写的代码(在图右侧的灰色方框中),还需要很多其他部分的协同。CPU显然不懂机器语言外的任何其他语言,因此编译器必须将高级语言程序翻译成处理器能理解的指令集,程序才能在处理器硬件上执行。
现在我们来自底向上地了解一下处理器(图1-4的左侧)。在抽象层次的最底层,是构成半导体基底的电子和洞穴。晶体管抽象层给电子和洞穴的狂野世界带来了秩序。逻辑门由晶体管构成。组合和顺序逻辑单元是由基本的逻辑门组成的,并进一步组织成数据通路(datapath)。有限状态自动机控制着数据通路以实现处理器指令集体系结构中指令的能力。因而指令集是软件和硬件的交汇点。处理器需要面向指令集生成可以在处理器上运行的代码;软件并不关心指令集在硬件上是如何实现的。类似地,硬件实现并不关心处理器上运行的程序是什么,而只是简单地在硬件上履行指令集体系结构所指定的软件和硬件之间的“合同”。
图1-4 硬件/软件接口。左半边展示了硬件的抽象层次,从底部的电子和洞穴到顶部的指令集。指令集是硬件和软件之间的“合同”。右半边展现了视频游戏这样的应用从概念到实现所需的软件组件
正如你看到的,连续的抽象层次(指令集、数据通路和控制、逻辑单元、门以及晶体管)允许我们使用高级语言程序控制半导体基层上的电子和洞穴的概率性行为。图1-5展示了联网的视频游戏是如何通过这些抽象层次来控制半导体基层上的电子和洞穴的。这就是抽象的威力。抽象是处理系统复杂性的一种核心方法,而不管是软件子系统还是硬件子系统。图1-4和图1-5都展示了通过一系列抽象层将高级语言程序转化为可以在处理器上执行代码的概念性步骤。
现在我们回到联网视频游戏的例子,了解一下操作系统在游戏开发生命周期以及玩家真正玩游戏时的作用。