深入理解计算机系统结构——链接

链接是将各种各样代码和数据部门收集起来并组合成为一个单一文件的过程,这个文件可被加载(或被拷贝)到存储器并执行。链接可以执行于编译时,也就是在源代码被翻译成机器代码时;也可执行于加载时,也就是在程序被加载器加载的存储器并执行时;甚至执行于运行时,由应用程序来执行。

1 编译器驱动程序

考虑如下的两个源文件:main.c和swap.c。

main.c

void swap();

int buf[2]={1,2};

int main()
{
    swap();
    return 0;
}

swap.c

extern int buf[];

int *bufp0=buf;
int *bufp1;

void swap()
{
    int temp;

    bufp1=&buf[1];
    temp=*bufp0;
    *bufp0=*bufp1;
    *bufp1=temp;
}

大多数编译系统提供编译驱动程序,它代表用户在需要时调用语言预处理器、编译器、汇编器和链接器。

例如:

gcc -02 -g --o p main.c swap.c

驱动程序首先调用C预处理器(cpp),它将C源程序main.c翻译成一个中间文件main.i:

cpp [other arguments] main.c /tmp/main.i

接下来,驱动程序运行C编译器(cc1),它将main.i翻译成一个汇编语言文件main.s

cc1 /tmp/main.i main.c -02 [other arguments] -o /tmp/main.s

然后,驱动程序汇编器(as),它将main.s翻译成一个可重定位目标文件main.o:

as [other arguments] -o /tmp/main.o /tmp/main.s

驱动程序经过相同的过程生成swap.o。最后,它运行链接器程序ld,将main.o和swap.o以及一些必要的系统目标文件组合起来,创建一个可执行目标文件p:

ld -o p [system object files and args] /tmp/main.o /tmp/swap.o

要运行可执行文件p,我们只需要输入 ./p

外壳调用操作系统中一个叫做加载器的函数,它拷贝可执行文件p中的代码和数据到存储器,然后将控制转移到这个程序的开头。

2 静态链接

时间: 2024-09-28 20:12:10

深入理解计算机系统结构——链接的相关文章

深入理解计算机系统结构——虚拟存储器

虚拟存储器 虚拟存储器是硬件异常.硬件地址翻译.主存.磁盘文件和内核软件的完美交互,它为每个进程提供了一个大的.一致的和私有的地址空间.通过一个很清晰的机制,虚拟存储器提供了三个重要的能力: (1)它将主存看成是一个存储在磁盘上的地址空间的高速缓存,在主存中只保存活动区域,并根据需要在磁盘和主存之间来回传送数据,通过这种方式,它高效地使用了主存. (2)它为每个进程提供了一致的地址空间,从而简化了存储器管理. (3)它保护了每个进程的地址空间不被其他进程破坏. 物理和虚拟寻址 物理寻址 计算机系

深入理解计算机系统结构——并发编程

并发编程 如果逻辑控制流在实际上重叠,那么它们就是并发的,这种常见的现象称为并发,出现在计算机系统的许多不同层面上. 应用级并发在其他情况下也是很有用的: 访问慢速I/O设备. 与人交互. 通过推迟工作以降低延迟. 服务多个网络客户端. 在多核机器上进行并行计算. 使用应用级并发的应用程序称为并发程序.现代操作系统提供了三种基本的构造并发程序的方法: 进程.用这种方法,每个逻辑控制流都是一个进程,由内核来调度和维护.因为进程有独立的虚拟地址空间,想要和其他流通信,控制流必须使用某种显式的进程间通

通过反汇编一个简单的C程序,分析汇编代码理解计算机是如何工作的

实验一:通过反汇编一个简单的C程序,分析汇编代码理解计算机是如何工作的 学号:20135114 姓名:王朝宪 注: 原创作品转载请注明出处   <Linux内核分析>MOOC课程http://mooc.study.163.com/course/USTC-1000029000 1 1)实验部分(以下命令为实验楼64位Linux虚拟机环境下适用,32位Linux环境可能会稍有不同) 使用 gcc –S –o main.s main.c -m32 命令编译成汇编代码,如下代码中的数字请自行修改以防与

计算机系统结构,组成和实现

计算机系统结构的定义: 计算机系统结构是其所处环境中最高层次的概念,是对计算机系统中各个机器之间界面的划分和定义,以及对各级界面上,下的功能进行分配.也称为体系结构. 计算机体系结构指的是计算机系统设计的观念和架构,描述计算机在实际中所做的设计的原则. 计算机体系结构是从程序员的角度所看到的系统的属性,是概念上的结构和功能上的行为. 例如: 功能特性指令系统及其执行模式: 数据表示:硬件直接识别和处理的数据类型 寻址技术:编址方式,寻址方式和定位方式 寄存器定义:寄存器的定义,数量和使用规则 指

理解计算机的工作方式——通过汇编一个简单的C程序并分析汇编代码

Author: 翁超平 Notice:原创作品转载请注明出处 See also:<Linux内核分析>MOOC课程http://mooc.study.163.com/course/USTC-1000029000  本文通过汇编一个简单的C程序,并分析汇编代码,来理解计算机是如何工作的.整个过程都在实验楼上完成,感兴趣的读者可以通过上面给出的课程链接自行动手学习.以下是实验过程和结果. 一.操作步骤 1.首先在通过vim程序建立main.c文件.代码如下: 图1 2.使用如下命令将main.c编

Linux内核设计第一周 ——从汇编语言出发理解计算机工作原理

Linux内核设计第一周 ——从汇编语言出发理解计算机工作原理 作者:宋宸宁(20135315) 一.实验过程 图1 编写songchenning5315.c文件 图2 将c文件汇编成32位机器语言 图3 将.s文件中的链接语句删除,获得最后的汇编代码 二.分析堆栈变化情况 三.总结 阐明对“计算机是如何工作的”的理解. ①计算机是依据冯诺依曼体存储结构,依据其核心思想——存储程序计算机工作模型,按程序编排的顺序,一步一步地取出指令,自动地完成指令规定的操作. ②从硬件的角度看,是通过总线连接C

Linux内核设计(第一周)——从汇编语言出发理解计算机工作原理

Linux内核设计(第一周)--从汇编语言出发理解计算机工作原理 计算机工作原理 汇编指令 C语言代码汇编分析 by苏正生 原创作品转载请注明出处 <Linux内核分析>MOOC课程http://mooc.study.163.com/course/USTC-1000029000 从2月22日起,本学期的linux课程开始了.通过这两天的学习,觉得孟宁老师讲的真不错,条理清晰,举例适当.本周从计算机工作原理出发,回顾了冯诺依曼计算机结构,也回顾了汇编寄存器.汇编指令.C语言程序的汇编分析技巧,很

计算机系统结构1-概论

计算机系统结构-概论 考察知识点 计算机系统的层次结构 计算机系统结构.计算机组成.计算机的实现 计算机的软硬件取舍及定量设计原理 软件.应用.器件的发展对系统结构的影响 系统结构中的并行性开发及计算机系统的分类 知识难度: 每个知识点使用 ※ 号标记掌握程度和类型. ※:标识,能够记住知识点和概念: ※※:领会,需要领悟和理解,能够消化和吸收,对知识点做出正确的解释.说明.论述. ※※※:简单应用,能够运用课程中的知识点,例如计算.绘图,去分析.实现和解决一般的应用问题. ※※※※:综合应用,

计算机系统结构概述

计算机系统的多层次结构: 是从使用语言的角度,基于程序员与计算机系统对话中所采用的语言结构和语义划分. 系统结构.组成和实现三者的相互关系: 具有相同系统结构的计算机可以采用不同的组成,一种计算机组成可以采用多种不同的计算机实现: 采用不同的系统结构会使可以采用的组成技术产生差异,计算机组成也会影响系统结构. 计算机系统的设计原则: 哈夫曼压缩原理 Amdahl定律 程序访问的局部性规律 计算机系统的设计思路: 由上往下(Top-down) 由下往上(Bottom-up) 由中间开始(Middl