程序开发的流程

| 步骤 | 定义 |
|---|---|
| 编辑 | 创建一个程序,根据高级语言的语法规则书写代码 |
| 预处理 | 在编译之前进行的处理 (C语言的预处理:1.宏定义2.文件包含3.条件编译 ) |
| 汇编 | 汇编代码转换机器码 |
| 编译 | 1、检查语法后,并把高级语言转换成计算机可识别的低级语言即2进制语言 2、利用编译程序从源语言编写的源程序产生目标程序的过程 |
| 链接 | 把目标模块相对对立的地址空间合并成一个地址空间 |
| 装入 | 将代码装入内存,准备运行 |
| 运行 | 运行可执行文件 |
软件工程的角度上看程序的开发
需求分析、设计、实现、测试
程序的链接
链接的定义
链接,是将目标模块相对独立的地址空间合并成一个地址空间,该地址空间可以是一维的,也可以是二维的,我们将这个地址空间称为逻辑地址空间。
链接的工作

链接的方式
| 方式 | 定义 |
|---|---|
| 静态链接方式 | 程序运行之前,将各目标模块链接成一个完整的装入模块,以后不再拆开 |
| 装入时动态链接 | 目标模块再装入内存时,遍装入遍链接,在内存中形成一个完整的装入模块 |
| 运行时动态链接 | 程序在执行中,当发现某个被调用模块尚未链接,立即由OS在系统内找到该模块并将之装入内存,并把它链接到调用者模块上。 |
程序的装入
装入的定义
将代码装入内存,准备运行。
装入模块被装入内存时需要解决逻辑地址和物理地址不一致的问题。

装入的方式
绝对装入方式
绝对装入方式(AbsoluteLoadingMode),根据装入模块即将在内到存驻留的起始物理地址,链接从起始物理地址处开始向上(向下)扩展,产生与物理地址一致的代码,即装入模块的逻辑地址与装入内存物理地址一致。
- 常应用于嵌入式开发中
- 软硬件联系紧密,依赖于硬件平台
可重定位装入方式
到可重定位装入方式(RelocationLoadingMode),装入模块在被装入内存时修改装入模块的逻辑地址,使其与即将装入内存的物理地址
- 在外存中存放是独立的逻辑地址
- 不依赖于任何的硬件平台,进入内存中才与硬件平台紧密相关
运行时动态装入方式
运行时动态装入方式(Run-timeDynamicLoading)装入模块装入到内存时,并不立即修改装入模块的逻辑地址而是把逻辑地址到物理
地址的转换推迟到程序真正运行时进行。
- 与硬件平台无紧密联系,
- 程序可以在内存中来回移动。
- 重定位寄存器在硬件上增加了成本,使软件彻底独立于硬件平台
1187

被折叠的 条评论
为什么被折叠?



