你写下一行代码:
printf("Hello World");
点了一下运行。
屏幕上蹦出来一行字。
就这么简单?
不。这背后经历了一场“变形记”。
一、CPU是个“文盲”
你写的代码,CPU一个字都看不懂。
CPU只认得一种东西:0和1。(机器语言)
printf 是什么?不认识。它眼里只有 010101。
二、翻译官上场
编译器就是那个翻译官。
你写C语言,CPU听机器语言。编译器把你这头的人话,翻成那头CPU能听懂的二进制指令。
代码 → 编译器 → 二进制机器指令
翻完之后,生成一个可执行文件,里面全是CPU能看懂的东西了。
三、操作系统把程序搬进内存
你双击运行,操作系统把这个文件从硬盘搬到内存里。
然后告诉CPU:“从这开始执行吧。”
CPU收到,开始干活。
四、CPU像个流水线工人
CPU干活就四步,一直循环:
取指 → 译码 → 执行 → 写回
一秒几十亿次。
不思考,只干活。
五、但是,事情没那么简单
如果故事到这就结束,操作系统这门课一节课就能讲完。
问题是,程序跑起来会出乱子——想偷内存、想霸占CPU、想关机。
所以指令被分了等级:
非特权指令:谁都能执行,比如加法
特权指令:只有管理员能执行,比如关机
那问题来了:CPU怎么知道当前这条指令,到底有没有资格执行?
答案是:CPU内部有硬件电路专门做这个检查。发现没资格,会触发中断,由操作系统来处理。
具体怎么查、查完发生什么——下篇讲。
今天你记住三件事:
1你写的代码CPU看不懂,需要编译器翻译成0和1
2CPU执行就是一条接一条,循环四步走
3指令分等级,CPU有硬件机制做检查
严谨说明
为了帮助读者建立清晰、无负担的认知框架,本文做了刻意简化。本文每一处简化,都是在“保证不误导”的前提下,为“降低认知门槛”服务的。