运行环境是操作系统 + 硬件两层叠出来的:硬件决定指令集,操作系统决定能调哪些功能——换一层就可能跑不起来。
第六章讲的是数据怎么变小,这一章换个角度:同一个程序,为什么换个地方就跑不起来。
一、【运行环境】到底是什么
它不是一个玄乎的词,就是两样东西: 硬件——CPU 是哪一种,决定了本机代码长什么样。 操作系统——决定了程序能调用哪些功能(文件怎么打开、窗口怎么画)。 所以同一份可执行文件,换了 CPU 或者换了系统,都可能直接失效。
二、两层各自管什么
硬件这一层管【说的话】:x86 和 ARM 的指令集完全不同,同一串字节在一台机器上是指令、在另一台上可能是乱码。 操作系统这一层管【能办的事】:打开文件、创建进程、显示画面,都要通过系统提供的接口。 换句话说:硬件决定你怎么说,操作系统决定你能办什么。 两层都对上,程序才跑得动——这就是【运行环境】的完整含义。
三、于是跨平台成了难题
想让同一份程序在多个平台上跑,就得同时解决这两层: 硬件差异——不能只给一种 CPU 写代码。 系统差异——不能只盯着一家的接口。 这一章剩下的六节,讲的全是这两个问题上各种各样的解法: 有的靠操作系统自己吸收(7.2),有的靠中间垫一层(7.5),有的干脆把机器也租出去(7.6)。
四、这一章的位置
前六章讲的都是【一台机器内部】的事:CPU、数据、内存、磁盘、压缩。 这一章把镜头再拉远:这台机器外面还包着操作系统、驱动、虚拟机和云。 下一章会接着往下走:一个源文件要经过哪些步骤,才能变成这里说的可执行文件。 先记住这一句就够了:运行环境 = 操作系统 + 硬件。
五、动手 Demo:运行环境=操作系统+硬件
同一个程序,换个环境就可能跑不起来。 因为运行环境是两样东西叠起来的:操作系统 + 硬件。
import platform, struct, sys
print("操作系统 ", platform.system())
print("版本 ", platform.version())
print("处理器架构", platform.machine())
print("指针宽度 ", struct.calcsize("P") * 8, "位")
print("Python ", sys.version.split()[0])
实跑输出:
--------------------------------------------------------------------
运行环境=操作系统+硬件
--------------------------------------------------------------------
**同一个程序,换个环境就可能跑不起来。**
因为【运行环境】其实是两样东西叠起来的:**操作系统 + 硬件。**
**硬件**决定本机代码长什么样(x86 和 ARM 的指令集完全不同)。
**操作系统**决定程序能调用哪些功能(文件怎么打开、窗口怎么画)。
两层都换了,同一份可执行文件自然就失效了。
看看眼前这台机器的环境:
项目 值
--------------------------------------
操作系统(software) Windows
版本 10.0.19045
处理器架构(hardware) AMD64
指针宽度 64 位
Python 版本 3.13.14
**换一台 ARM 的机器,指令集就变了;换一套操作系统,可调用的功能也变了。**
所以要跨平台,程序必须**在中间垫一层**——这就是接下来几节的主题。
实测这台机器:系统 Windows、架构 AMD64、指针 64 位。 换一套系统或换一种 CPU,这两行里就会有一行对不上——那就是跑不起来的原因。
30 秒实验
- 把同一段 Python 代码拷到手机或树莓派上跑,看看哪一行输出会变。
- 想想为什么游戏主机上的游戏,拷到电脑上通常打不开。
常见误区
- 以为运行环境指的是【装了哪些软件】。核心是操作系统与硬件两层。
- 以为换了系统只是【重装一下】。系统调用不同,程序可能根本要重写。
自测三问(点开对答案)
1. 运行环境由哪两部分构成? —— 操作系统 + 硬件。 2. 硬件和操作系统各决定什么? —— 硬件决定本机代码(指令集),操作系统决定程序能调用哪些功能(API)。 3. 为什么换个环境程序可能跑不起来? —— 指令集不同则本机代码失效,系统接口不同则调用的功能不存在。- ☐ 下一节(7.2 Windows消除了CPU之外的硬件差异)
相关笔记
- Windows消除了CPU之外的硬件差异 — 系统能吸收掉哪些差异
- 每种操作系统的API都是不同的 — 吸收不掉的那一层
- 看一看CPU的内部构造 — 硬件那一层长什么样
- 🖥️ 服务器工作原理 · 索引 — 服务器怎么攒出来的
- ⚙️ 程序是怎样跑起来的 · 索引