106 / 163 · C11 · 约 8 分钟
操作系统导论
先记住这句话
本章概述操作系统如何通过虚拟化将有限的物理硬件转变为易于使用的抽象,同时充当资源管理器和标准接口提供者。
指令执行的基本循环
任何程序运行时,处理器不断从内存取出指令、解码其含义并立即执行,如此循环直至程序结束。软件通常可以忽略底层流水线和乱序执行等硬件加速细节,而把执行视为严格按序进行。
把物理资源变成虚拟资源
操作系统的核心工作是把真实的处理器、内存和磁盘转换成数量更多、更易用的虚拟版本。这样用户感觉自己拥有许多独立的CPU和私有内存空间,即使底层硬件数量有限。
系统调用与策略决策
应用程序通过一组系统调用与操作系统交互,这些调用构成了事实上的标准库。当多个程序同时竞争同一资源时,操作系统还必须运用调度、分配等策略来决定谁获得资源以及何时获得。
常见误区
- 把操作系统仅仅看成普通函数库而忽略其特权与隔离职责
- 以为虚拟化只是简单轮流使用硬件而忘记地址空间隔离的必要性
运行一个例子
最低标准 C11 · 完整程序 · 下载 .c
#include <stdio.h>
#include <stdlib.h>
int main(void) {
printf("Starting program execution.\n");
int *mem = malloc(sizeof(int) * 3);
if (!mem) {
return 1;
}
mem[0] = 10;
mem[1] = 20;
mem[2] = mem[0] + mem[1];
printf("Computed result: %d\n", mem[2]);
free(mem);
printf("Program completed.\n");
return 0;
}
在本地编译
gcc -std=c11 -Wall -Wextra -Wpedantic -Werror ostep-02-introduction.c -o example && ./example预期结果
Starting program execution.
Computed result: 30
Program completed.
CHECK YOUR UNDERSTANDING
合上答案,试着解释。
为什么即使只有一颗物理处理器,用户仍然可以同时启动多个程序?
查看参考答案
操作系统通过快速切换正在运行的程序,让每个程序都短暂占用处理器,从而制造出许多虚拟处理器同时工作的假象。
继续查证
标准草案与官方章节会更新;版本标记只说明示例最低要求。