1.2 计算机基本工作原理
将应用问题(任务)的求解编程流程化编程有限的清晰步骤称为 算法(Algorithm) 描述。
程序设计语言 与自然语言不同,它有严格的执行顺序,不存在二义性,能够唯一地确定计算机指令执行的顺序。
程序实际语言和翻译程序
使用特定计算机规定的指令格式而形成的0/1序列称为 机器语言。
计算机能理解和执行的程序称为 机器代码 或 机器语言程序。
其中每条指令都由0和1组成,称为 机器指令。
通过简短的英文符号和机器指令建立对应关系,方便程序员编写和阅读,这种语言称为 汇编语言。机器指令对应的符号表示称为 汇编指令。
由于计算机无法理解和执行汇编指令,因而用汇编语言编写的 汇编语言源程序 必须先转换为机器语言程序,才能被计算机执行。
要点提示
汇编语言和机器语言都属于 低级语言,它们统称为 机器级语言。
高级程序设计语言 简称高级编程语言,是指面向算法设计的、较接近于日常英语书面语言的程序设计语言,如Java等。计算机无法直接理解和执行高级程序语言,因此需要转换为机器程序语言。
这个转换过程通常由计算机自动完成,进行这种转换的程序称为 翻译程序,被翻译的语言和程序分别被称为 源语言 和 源程序。
翻译生成的的语言和程序分别称为 目标语言 和 目标程序。翻译程序有以下3类:
汇编程序(汇编器):用于将汇编语言源程序翻译成机器语言目标程序。解释程序(解释器):用于将源程序中的语句按其执行顺序逐条翻译成机器指令并立即执行。编译程序(编译器):用于将高级语言源程序翻译成汇编语言或者机器语言目标程序。
从源程序到可执行程序
本小节将以简单的hello程序为例,简要介绍程序的开发于执行过程。
#include <studio.h>
int main(){
printf("hello,world\n");
}为了让计算机能够执行上述应用程序,程序员应当按以下处理:
- 通过IDE生成hello.c文件,其文件在计算机中以ASCII字符方式进行存放。通常把这种ASCII码字符或者汉字字符表示的文件称为
文本文件。 - 将hello.c进行预处理,编译,汇编和链接,最终生成可执行目标文件。例如,在UNIX系统中,使用GCC编译驱动程序进行处理:
unix> gcc -0 hello hello.c上述命令中,unix>为 shell命令行解释器 的命令行提示符,gcc为GCC编译驱动程序名,-o表示后面为输出文件名,hello.c为要处理的源程序。
预处理:预处理程序ccp对源程序中以字符#开头的命令行进行处理,将引入文件内容嵌入源程序中。编译:编译程序cc1对预处理后的源程序进行编译,生成一个汇编语言源程序文件。汇编:汇编程序as对汇编语言源程序进行汇编,生成一个 可重定位目标文件,它是一种二进制文件,由于它的内容是以二进制表示的,因此它是不可读的。链接:链接程序ld将多个可重定位目标文件和标准函数库中的可重定位目标文件合并成为一个可执行目标文件,简称可执行文件,被保存在硬盘上,最终通过某种方式启动执行。
可执行文件的启动和执行
可执行文件在不同系统上有不同执行方式,例如windows系统中可以进行双击图标启动,在UNIX中,可以通过shell命令行来启动上述可执行文件hello:
unix> ./hello
hello,world
unix>第一行表示接收用户的输入,回车键结束,输入的./表示相对路径,表示从当前目录寻找一个叫hello的可执行文件。回车键被按下shell执行文件,由于该hello程序的功能是打印hello,world因此能够在界面上看见字符串,可执行程序执行完成,shell继续等待用户输入。
其执行完成过程可以简述为:
- shell程序将输入的每个字符逐一读入CPU寄存器中,然后保存到内存,并在缓冲区形成字符串./hello。
- 当接收到enter按键时,shell调出操作系统内核中相应服务例程,由内核加载其可执行文件到存储器。
- 内核加载完成可执行文件中的代码及其所要处理的数据后(hello,world\n),将第一条指令的地址送到计数器,随后处理器开始执行程序。
- CPU将加载内存的的字符串取到CPU的寄存器中,然后将该字符串送到显示器,显示出来。
从以上过程可以看出,用户程序被启动执行,必须依靠 操作系统 的支持,包括提供人和机器交互的接入环境(shell、cmd)的 外壳程序。
以上参与程序运行的还有键盘、鼠标、显示器等设备,这些统称为 外设,也被称为I/O设备,即Input和Output的缩写,这些通常由机械部分和电子部分组成,电子部分通常是控制外部设备工作的 I/O控制器或I/O适配器,这两者统称为 设备控制器。
例如键盘接口、打印机适配器、显示卡控制器,网络卡控制器,都是设备控制器,属于一种 I/O模块。
