计算机系统概述---1.2 程序的开发与运行

目录

1.2.1 程序设计语言和翻译程序

1.2.2 从源程序到可执行文件

1.2.3 可执行文件的启动和执行


现代计算机都采取“存储程序”的工作方式,需要计算机完成的各种任务都应先表示为一个程序。首先,应将任务转化为算法描述,使得任务成为流程化的清晰步骤。任何一个问题可能有多种求解算法,我们需要分析哪种算法在时间和空间上是最优的。接着将算法转换为用编程语言描述的程序。程序设计语言与自然语言不同,他有严格执行顺序,不存在二义性,能准确确定计算机执行指令的顺序。

1.2.1 程序设计语言和翻译程序

程序设计语言从抽象层次上来看,可以分成高级语言和低级语言两种

使用计算机特定的指令格式而形成的0/1序列称为机器语言,计算机能理解并执行的程序称为机器代码或机器语言程序,其中的每条指令都由0和1构成,称为机器指令

最早人们采用机器语言编写程序,但是可读性很差也不易记忆。因此人们引入了一种机器语言的符号表示语言,用简短的英文符号和机器指令建立对应关系。这种语言称为汇编语言,对应的符号表示称为汇编指令,例如上一篇文章提到的,机器指令”1110 0110”对应的汇编指令为“load r0,6#”,显然汇编指令要比机器指令方便的多。但是因为计算机无法理解和执行汇编指令,所以用汇编语言编写的汇编语言程序必须先转化为机器语言程序。

汇编指令和机器指令都与特定的机器结构相关,因此,汇编语言和机器语言都属于低级语言,统称为机器级语言

机器级语言因为每条指令的功能都非常简单,而且一个程序不能在不同机器上运行。所以程序员多采用高级程序设计语言(简称高级编程语言),是指面向算法设计的,接近日常英语书面语言的程序设计语言,如BASIC,C,C++,Java,Fortran,C#等等,它与具体的机器结构无关,可读性好,描述能力更强。

因为计算机无法直接理解和执行高级编程语言程序,所以要转化成机器语言程序。因为这个过程是计算机自动完成的,所以把这种转换的软件统称为翻译程序,被翻译的语言和程序分别称为源语言源程序,翻译生成的分别称作目标语言目标程序。翻译程序分为以下三类

  1. 汇编程序:也称汇编器,实现将汇编语言翻译为机器语言目标程序。
  2. 解释程序:也称解释器,实现将源程序中的语句按执行顺序翻译成机器指令并立即执行。
  3. 编译程序:也称编译器,实现将高级语言源程序翻译成汇编语言或机器语言目标程序。

 

1.2.2 从源程序到可执行文件

我们来举例一个名为“hello.c”的C语言源程序代码

#include <stdio.h>

int main()
{
    printf("hello,world\n");
}

为了让计算机能执行上述代码,我们应按以下步骤进行处理。

  1. hello.c在计算机中以ASCII字符方式存放
  2. 将hello.c进行预处理,编译,汇编和链接,最终生成可执行目标文件

 

  •  预处理阶段:预处理程序(cpp)对源程序中以字符#开头的命令进行处理。
  • 编译阶段:编译程序(ccl)对预处理后的源程序进行编译,生成一个汇编语言源程序文件
  • 汇编阶段:汇编程序(as)对汇编语言源程序进行汇编,生成一个可重定位目标文件
  • 链接阶段:链接程序(ld)将多个可重定位目标文件和标准函数库中的可重定位目标文件合并为一个可执行目标文件 

1.2.3 可执行文件的启动和执行

 

对于一个存放在磁盘上的可执行文件,我们可以双击或者在命令行中输入可执行文件名来启动执行。在UNIX 系统中,可以通过shell命令解释行来执行可执行文件,例如执行上述可执行文件hello,输入./hello来执行

shell程序会讲用户输入的每个字符逐一读入CPU寄存器中,然后保存到主存储器,在主存缓冲区形成字符串./hello,等到接收到【enter】键时,shell将调出系统内核中相应的服务例程,有内核加载文件hello到存储器。加载完其代码及其所有数据后,将hello第一条指令的地址送到PC(这里PC指程序计数器,而不是我们平常所说的个人计算机)中,CPU将PC的内容作为将要执行指令的地址,处理器随后将需要输出的字符从主存取到CPU的寄存器中,然后送到显示器上显示出来。

从上述过程中,一个程序被用户启动,必须依靠系统支持,包括提供人机接口环境和内核服务历程,例如shell是操作系统的外壳程序,提供了人机接口环境,加载程序并执行的操作系统内核服务例程也是必不可少的。

键盘,磁盘,显示器等外部设备简称外设,也成为I/O设备,其中,I/O是input/output的缩写。外设由机械部分和电子部分组成,并且两部分是可以分开的。机械部分是外部设备本身,电子设备是用来控制外部设备工作的I/O控制器I/O适配器,统称为设备控制器

程序的执行过程就是数据在CPU,主存储器和I/O模块之前流动的过程,所有数据都通过总线等进行流动的,但在传输之前,需要先缓存在存储部件中,因此,除了主存本身是存储部件以外,在CPU,I/O桥接器,设备控制器中也有存放数据的缓冲存储部件。

 

 

 

 

  • 26
    点赞
  • 27
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值