购买
下载掌阅APP,畅读海量书库
立即打开
畅读海量书库
扫码下载掌阅APP

1.2 程序执行

程序由一系列存储在内存中的指令组成。在创建新程序时,你要使用编辑器编写源代码,多使用高级语言(例如,C、C++或Java)。编辑器将新程序的源代码(通常存储为磁盘文件)视为数据。然后使用编译器将高级语言语句转换成机器代码指令(同样存储为磁盘文件)。和编辑器一样,编译器将源代码和最终的机器指令视为数据。

在执行程序时,CPU将磁盘文件中的机器代码指令载入内存。大多数程序包含的一些常量数据也一并被读入内存。CPU通过读取[通常称为提取(fetching)]并执行内存中的指令来运行程序。此外还会根据程序的需要提取数据。

当CPU准备好执行程序的下一条指令时,该指令在内存中的位置会被放在地址总线上。CPU还会将读信号放在控制总线上。内存子系统则将指令放在地址总线上,由CPU随后复制。如果CPU被指示从内存中读取数据,则同样的事件序列会再次发生。

如果CPU被指示将数据存入内存,那么它会将数据放在数据总线上,将保存数据的内存地址放在地址总线上,将写信号放在控制总线上。内存子系统则将数据总线上的数据复制到指定的内存位置。

这种“编辑-编译-执行”方案有多种变体。解释器是将编程语言转换成机器指令的程序,但不是将指令保存在文件中,而是立即执行。另一种变体是编译器将编程语言转换成中间速记语言,并将其保存在可以由解释器执行的文件中。

大多数程序还会访问I/O设备。有些是为了实现人机交互,例如,键盘、鼠标、屏幕。有些是为了机器可读的I/O,例如,磁盘。I/O设备要比CPU和内存慢得多,而且时序特性差异很大。由于其时序特性,I/O设备与CPU和内存之间的数据传输必须明确编程。

I/O设备编程要求全面理解设备的工作原理及其与CPU和内存的交互方式。我们将在本书接近尾声的时候介绍一些一般性概念。同时,书中编写的几乎每个程序至少都会用到终端屏幕,这是一种输出设备。操作系统包含可执行I/O的函数,C运行时环境(C runtime environment)提供了一个面向应用程序的函数库来访问操作系统的I/O函数。我们将使用这些C库函数来执行大部分的I/O操作,I/O编程相关的主题可以参阅其他更高阶的书籍。

上述内容旨在为你提供计算机硬件组织形式的概览。在更深入地探究这些概念之前,1.3节会先帮助你设置好本书余下部分要用到的编程工具。 x1rbmheng+WHRS2IB7DIKSzq+NPqaHjzY5q4HVII7VXIrjCpO6N5Nq68QR/KBUKo

点击中间区域
呼出菜单
上一章
目录
下一章
×