高级C/C++编译技术(典藏版)
上QQ阅读APP看书,第一时间看更新

1.1 一些有用的抽象概念

计算机技术领域的变化日新月异。集成电路技术带来的元件不仅种类繁多(光学元件、电磁元件和半导体元件)而且在功能性方面不断改进。按照摩尔定律,集成电路上可容纳的晶体管数目大约每隔两年便会增加一倍。而与晶体管数量密切相关的处理能力也将提升一倍。

经验告诉我们,若想要完全应对这种快速变化,唯一的方法就是在经常变动的实现层次之上,利用抽象和泛化的方法为计算机系统定义全局目标与体系结构。这种方法的核心在于描述抽象的方式,该方式要确保在去除相对无关的实现细节后,任何新的实现与核心定义都能够保持一致。整个计算机体系结构可以用图1-1展示的一组结构化抽象表示。

图1-1 计算机体系结构抽象表示

在抽象的最底层,我们利用典型的字节流方式来处理各种类型的I/O设备(鼠标、键盘、控制杆、轨迹球、光笔、扫描仪、条形码扫描器、打印机、绘图仪、数码相机和网络摄像头)的输入和输出。事实上,在忽略不同设备用途、实现方法和功能性的情况下,对计算机系统设计而言,我们只需关注这些设备产生或接收(或两者皆有)的字节流。

下一个抽象层次是虚拟内存,它用来表示系统中多种不同的存储资源。虚拟内存是本书将要讨论的重要主题之一。实际上,这种特定抽象的方式代表了多种不同的物理存储设备,这不仅影响了实际的软件和硬件的设计,而且是设计编译器、链接器和装载器的基础。

下一个抽象层次是指令集,它用来对物理CPU进行抽象。虽然高级程序员一定对指令集所具备的功能及其带来的处理性能十分感兴趣,但就本书所希望讨论的主题来看,这部分抽象的细节不是本书详细讨论的重点。

最后一个抽象层次是操作系统的复杂性。通常来说,操作系统在某些方面的设计(主要是多任务机制)对软件的体系结构有着决定性的影响。对多方都需要访问的共享资源来说,需要有完善的实现方法才可以避免重复的无用代码问题,而这个问题直接为我们引出了共享库设计的概念。

在接着分析整个计算机系统的复杂性之前,我们先了解一下与存储器使用相关的一些关键问题。