程序是如何运行起来的

早期程序运行的问题

程序的运行环境是由操作系统和硬件决定的.
CPU所负责的是解释和运行最终转化为机器语言的程序内容。不同类型的CUP能解释的机器语言的种类也是不同的。机器语言的程序称为本地代码(native code)。通过对源代码进行编译而得到的本地代码。

应用程序向操作系统传递指令的路径称为API(Application Programming Interface),不同操作系统的API不同。像键盘输入、鼠标输入、显示器输出、文件输入输出等功能都是通过API提供的。不同软件则必须根据不同的操作系统类型来专门开发。

解决方法:

  • 通过运行在不同操作系统的虚拟机,如Java虚拟机可以将Java源代码编译出适用于不同操作系统的本地代码。仅靠编译时无法得到可执行文件的,后面会讲述

编译器转化源代码后,就会生成本地文件。而编译之后的文件是扩展名为“.obj”的目标文件。不过,本地文件是无法直接运行的。为了得到可执行的exe文件,编译之后还需要进行“链接”处理。把多个目标文件结合,生成一个exe文件的处理就是链接,运行链接的程序称为链接器。

一个程序包含有以下几种文件类型:二进制文件、库文件、配置文件、帮助文档。
库文件(libraries)指的是把多个目标文件集成保存到一个文件中的形式。Windows以函数的形式为应用提供了各种功能。这些功能的函数称为API(Application Programming Interface,应用程序接口)。Windows中,API的目标文件并不是存储在通常的库文件中,而是存储在名为DLL文件的特殊库中。

DLL文件(Dynamic Link Library),是在程序运行是可以动态加载Library(函数和数据的集合)的文件。通过共用同一个DLL文件可以达到节约内存的效果。与此相反,存储者目标文件的实体,并直接和exe文件结合的库文件形式称为静态链接库

操作系统的硬件控制功能,通常是通过一些小的函数集合体形式来提供的。这些函数及调用函数的行为称为系统调用(System call)。通过使用操作系统提供的系统调用,程序员就没有必要编写直接控制硬件的程序了。

高级编程语言的机制就是,使用独自的函数名,然后再在编译时将其转换成相应操着系统的系统调用。也就是说,用高级编程语言编写的应用在编译后,就转换成了利用系统调用的本地代码。

在高级编程语言中,也存在可以直接调用系统调用的编程语言。不过,利用这种方式做成的应用,移植性1并不友好(也俗称为有恶意行为的应用)。例如,直接调用Windows系统调用的应用,在Linux上显然是无法运行的.

Windows是通过名为API的函数集来提供系统调用的。API是联系作为应用的程序员和操作系统之间的接口。所以称为应用程序接口。

还有没有完善好,其他内容后面再补充


  1. 移植性指的是同样的程序在不同操作系统下运行时需要花费的时间等,费时越少说明移植性越好。 ↩︎

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值