操作系统-第九讲-C标准库和实现

C 标准库和实现

jyy 老师的讲义


内容回顾

操作系统为我们提供了对象和操作它们的 API:我们学习了进程管理的 fork, execve, exit, waitpid;内存管理的 mmap;文件 (对象) 管理的 open, read, write, dup, close, pipe, ……大家观察到这些 API 的设计有一个有趣的原则:“非必要不实现” (“机制与策略分离”、“最小完备性原则”):但凡应用程序能自己搞定的功能,操作系统就不需要提供——在一定程度上,这样的设计能防止 “包揽一切” 导致代码膨胀,甚至在长期演化的过程中成为历史的包袱。

本讲内容:在操作系统 API 之上,为了服务应用程序,毋庸置疑需要有一套 “好用” 的库函数。虽然 libc 在今天的确谈不上 “好用”,但成就了 C 语言今天 “高级的汇编语言” 的可移植地位,以 ISO 标准的形式支撑了操作系统生态上的万千应用。

libc 简介

libc 是 C 标准库的实现,C 是世界上“最通用”的高级语言,是一种高级汇编语言,是系统调用的一层“浅封装”。

假设不能用 scanfprintf 进行输入和输出而只能用系统调用,显而易见这是及其麻烦的(道理上可行,工程上不行)。

minilibc 一个用于教育目的的 C 标准库的简化实现 (claude-3.7-sonnet Cursor IDE),展示了 C 库的核心组件,包括程序的启动和结束、基本的内存管理、字符串操作以及简化的 I/O 功能。该库实现了 _start 函数以设置环境,并提供了简单的 malloc, free, strlenstrcpy。构建该库只需运行 make 命令,生成静态库和测试程序。

基础编程机制的抽象