《程序是怎样跑起来的》第七章
本章主要讲了程序在怎样的环境下运行。同一个程序被很多用户使用就可以产生巨大的价值,这个价值既可以,是出售软件来赚钱,也可以是分发自有软件来获得认同,但是我们自己编写的程序能被很多用户使用时,其运行环境的差异会对此产生影响。就比如说WINDOWS的程序基本上不能直接在macOS上运行,这就是运行环境不同所导致的。每个程序都有其对应的运行环境。程序的运行环境是通过操作系统和硬件来表示的,也就是说,操作系统和硬件决定了程序的运行环境。一台计算机可以安装多种操作系统,例如PC不仅可以安装WINDOWS还可以安装linux操作系统。因此,office 2019的运行环境需要同时规定,操作系统和硬件类型。但是只说WINDOWS和linux还不够,因为操作系有很多版本,有些应用程序可能只能在特定版本的操作系统中运行。
再将硬件作为程序运行环境考虑,是CPU的类型非常重要。CPU只能解释特定种类的机器语言,不同类型的CPU能解释的机器语言也不同。除了x86,CPU的类型还包括MIPS、SPARC、PowerPC等,他们各自使用的机器语言都是不同的机器语言的程序,也称为本机代码。程序员使用C语言等编写的程序,在编写阶段都只是普通的文本文件,在任何环境下,文本文件都可以显示和编辑这样的文本,称为源代码,对源代码进行编译,可以得到本机代码。大多数情况下,应用程序不是以源代码的形式发布的,而是以本机代码的形式发布的。计算机的硬件并不只有CPU,还有用来存储程序指令和数据的内存,通过I/O连接的键盘显示器,硬盘打印机等外部设备在不同的计算机中,这些外部设备的访问方式也有所不同。在WINDOWS应用程序中,键盘输入显示器输出等操作不是通过直接访问硬件来实现的,而是通过向WINDOWS发出请求来间接的实现的。这样一来,程序员就不需要关注内存和iood值的差异了,因为WINDOWS代替了应用程序,对各种不同机型的硬件进行操作,但是WINDOWS本身还需要为PC/AT兼容机PC-9801等不同的机型专门适配不同的版本。每种操作系统的API都是不同的,应用程序向操作系统发出请求的方式是由API来决定的。WINDOWS和linux的API提供了可被认知的于不同的操作系统提供的API ,所以如果要将一个应用程序移植到另一个操作系统上,就必须重新编写其中使用API的部分。API提供了键盘输入、鼠标输入、显示器输出、文件输入/输出等与外部设备之间输入/输出的功能。在同一操作系统中,无论使用怎样的硬件API都是基本相同的,因此操作系统的API编写的程序在任何硬件上都可以运行。当然,如果CPU类型不同,机器语言也会不同,本机代码不可能保持不变。在这种情况下,我们需要使用对应的编译器重新编译源代码,以便生成适配各种CPU的本机代码。不将源代码编译为本机代码,而是一种中间代码,就可以提供不依赖特定操作系统和硬件的运行环境了Java使用的就是这种方法Java这个词有两个含义是Java编程语言,另一个是Java程序运行环境和其他编程语言一样,用Java编写的源代码也需要经过编译才能运行,但是编译后生成的并不是针对特定CPU的本机代码,而是一种自检码的代码自检码的运行环境,称为Java虚拟机Java虚拟机会将Java字节码逐一转换为本机代码来执行。编译后的字节码需要在运行时转换为本机代码,它可以让相同的字节码在不同的环境中运行,只要为各种操作系统的硬件开发对应版本的Java虚拟机,就可以让相同的字节码应用程序在所有环境中运行了。从操作系统的角度来看,Java虚拟机也是一种应用程序,但从Java应用程序的角度来看,Java虚拟机就是其运行环境,也就是操作系统+硬件的结合体。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 零经验选手,Compose 一天开发一款小游戏!
· AI Agent开发,如何调用三方的API Function,是通过提示词来发起调用的吗