libc 简介

libc 简介

2025 南京大学《操作系统原理》
libc 简介

从 “最小” 的 C 程序出发

void _start() {
    __asm__("mov $60, %eax\n"  // syscall: exit
            "xor %edi, %edi\n" // status: 0
            "syscall");
}

我们可以构建 “整个应用世界”

  • C 的语言机制
    • 指针、数组、结构体、函数……
  • 系统调用
    • fork, execve, mmap, open, ...
2025 南京大学《操作系统原理》
libc 简介

系统调用是地基,C 语言是框架

C 语言:世界上 “最通用” 的高级语言

  • C 是一种 “高级汇编语言”
    • 作为对比,C++ 更好用,但也更难移植
  • 系统调用的一层 “浅封装”

C23: 演进没有完全停止

constexpr int n = 5 + 4;  // ???
typeof(n) arr[n];  // ???

[[maybe_unused]] auto* ptr = foo();  // ???
ptr = nullptr;  // ???
2025 南京大学《操作系统原理》
libc 简介
2025 南京大学《操作系统原理》
libc 简介

当然:没有库函数,寸步难行

就算有系统调用,也没法编程啊

  • 道理上可行,工程上不行
int read(int fd, void *buf, size_t count);
int write(int fd, const void *buf, size_t count);

int main() {
    int a = ???; // 读入 a
    int b = ???; // 读入 b
    int sum = a + b;
    // 输出 sum ???
}
2025 南京大学《操作系统原理》
libc 简介

The C Standard Library

语言机制上的运行库

  • 大部分可以用 C 语言本身实现
  • 少部分需要一些 “底层支持”
    • 例子:体系结构相关的内联汇编

库也被标准化

  • ISO IEC 标准的一部分
  • POSIX C Library 的子集
    • 稳定、可靠 (不用担心升级版本会破坏实现)
    • 极佳的移植性:包括你自己的操作系统!
2025 南京大学《操作系统原理》
libc 简介

如何 “实现” 一个 libc?

(当然是让 “老师” 当着你的面实现一个!)
2025 南京大学《操作系统原理》
libc 简介

然后打脸 😂

我修了好多 bug

  • Inline assembly 忘记 %%
  • _start 的 rsp 已经被改过了
  • mmap 的参数顺序错了
  • munmap 忘记处理头上的 8 字节 size
    • 也只是让 test.c 能正常运行了
    • 不知道还有没有更多的问题

代码:谨慎使用 AIGC

2025 南京大学《操作系统原理》