计算机操作系统——编译、链接和加载

我是荔园微风,作为一名在IT界整整25年的老兵,今天给大家讲讲操作系统。这可能是全社区讲解编译、链接和加载最好的文章了,我还专门摘录了从网上找来的最好的配图并给予说明。

在执行用高级语言编写的程序之前,必须先将程序翻译成机器语言,与它所依赖的各种其他机器语言进行链接,并加载到内存中。在这里,我们要考虑用高级语言所编写的程序是如何编译(compile)成机器语言代码的,同时也要描述链接器和加载器如何为执行编译过的代码做准备。

编译

虽然每一种计算机只能理解它自己的机器语言,但几乎所有的程序都是用高级语言编写的。在生成可执行程序的过程中,第一阶段是将用高级程序设计语言所编写的代码编译成机器语言。编译器接收源代码(source code),源代码是用高级语言编写的,这作为输入,并返回目标码(object code),目标码包含要执行的机器语言指令,这作为输出。几乎所有商业上可以使用的应用程序都只交付目标码,有些分发(即开源软件)提供源代码。

编译过程可以分成几个阶段,图示意了编译的每个阶段。每一个阶段都对程序进行修改,以便能被下一阶段解释,一直到程序被翻译成机器代码。首先,源代码被传递到词法分析器(lexer 或者 lexical analyzer),也称为扫描器(scanner),它将程序源代码的字符分离成记号(token),包括关键字(例如,if,else 和int)、标识符(例如,有名称的变量和常量)、运算符(例如,-、+、*和/)和标点符号(例如,分号)。

词法分析器将这些记号流传递给解析器(parser),也称为语法分析器(syntax analyzer),它将这些记号分成语法上正确的语句组。中间代码生成器(intermediate code generator)将这一语法结构转换成与汇编语言类似的简单指令流(虽然它并没有指定每一个操作所使用的寄存器)。优化器(optimizer)力图提高代码的执行效率,并减少程序的内存需求。在最后阶段,代码生成器(code

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值