Hello, OS World

Hello, OS World

2024 南京大学《操作系统:设计与实现》
Hello, OS World

Hello, OS World

Operating System: A body of software, in fact, that is responsible for making it easy to run programs (even allowing you to seemingly run many at the same time), allowing programs to share memory, enabling programs to interact with devices, and other fun stuff like that. (OSTEP)

要想理解 “操作系统”,就要理解什么是 “程序”

  • 那就从 Hello World 开始吧
int main() {
    printf("Hello, World\n");
}
2024 南京大学《操作系统:设计与实现》
Hello, OS World

意识到的问题

这个 Hello World 似乎太复杂了

  • 一点也不 “最小”

相关的工具

  • objdump 工具可以查看对应的汇编代码
  • --verbose 可以查看所有编译选项 (真不少)
    • printf 变成了 puts@plt
  • -Wl,--verbose 可以查看所有链接选项 (真不少)
    • 原来链接了那么多东西
    • 还解释了 end 符号的由来
  • -static 会链接 libc (大量的代码)
2024 南京大学《操作系统:设计与实现》
Hello, OS World

试图构造最小的 Hello, World

试着手动链接编译的文件

  • 直接用 ld 链接失败
    • ld 不知道怎么链接 printf
  • 不调用 printf 可以链接
    • 但得到奇怪的警告 (可以定义成 _start 避免警告)
    • 但是 Segmentation Fault 了
  • 如果改成 while (1); 可以正确运行
    • 说明我们写的代码的确被执行了
2024 南京大学《操作系统:设计与实现》
Hello, OS World

为什么?怎么办?

我在操作系统课的练习题中写了一个代码,发生了 Segmentation Fault,我阅读了代码,无法定位到问题的地方。程序也没有任何输出。我应该怎么办?

学习任何别人学过的东西,别人都遇到过你遇到过的困难

  • 你只需要提出问题
  • 随着熟练度的增长,你就可以 RTFM 了
    • 此时 M 变得 friendly
    • 在你问不出问题时,Manual 的价值就体现了

人类的新时代即将来临

  • (你问不出问题的时候,langchain 可以帮你枚举)
2024 南京大学《操作系统:设计与实现》
Hello, OS World

什么是程序?

答案在这里:

struct CPUState {
    uint32_t regs[32], csrs[CSR_COUNT];
    uint8_t *mem;
    uint32_t mem_offset, mem_size;
};

处理器:无情的、执行指令的状态机

  • M[PC]M[PC] 取出一条指令
  • 执行它
  • 循环往复
2024 南京大学《操作系统:设计与实现》
Hello, OS World

解决异常退出

程序自己是不能 “停下来” 的

  • 指令集里没有一条关闭计算机的指令,那么操作系统是如何在关闭所有软件后,切断计算机的电源的?

只能借助操作系统

movq $SYS_exit,  %rax   # exit(
movq $1,         %rdi   #   status=1
syscall                 # );
  • 把 “系统调用” 的参数放到寄存器中
  • 执行 syscall,操作系统接管程序
    • 操作系统可以任意改变程序状态 (甚至终止程序)
2024 南京大学《操作系统:设计与实现》
Hello, OS World

Everything (二进制程序) = 状态机

状态

  • gdb 内可见的内存和寄存器

初始状态

  • 由 ABI 规定 (例如有一个合法的 %rsp)

状态迁移

  • 执行一条指令
    • 我们花了一整个《计算机系统基础》解释这件事
    • gdb 可以单步观察状态机的执行
  • syscall 指令: 将状态机 “完全交给” 操作系统
2024 南京大学《操作系统:设计与实现》