16. 系统调用和 UNIX Shell

⚠️本周日 (4.28) 随堂期中测验

形式:闭卷笔试。内容:并发编程、进程管理、进程的地址空间。

背景回顾:整个计算机系统世界的 “创建” 从 CPU Reset 开始,Firmware 加载操作系统内核代码,操作系统成为状态机的管理者,初始化第一个进程,从而成为一个中断处理程序和系统调用执行者。《操作系统》课程的很重要部分就是操作系统中的对象和操纵这些对象的 API——我们已经学习了 fork, execve, exit, 和 mmap (munmap/mprotect)。如何用这些 API,以及更多的 API,实现丰富的应用程序?

本讲内容:一些操作系统 API 的补充;UNIX Shell 实现。

16.1 更多的操作系统 API

16.2 操作系统的外壳

16.3 复刻经典、展望未来

Take-away Messages

通过 freestanding 的 shell,我们阐释了 “可以在系统调用上创建整个操作系统应用世界” 的真正含义:操作系统的 API 和应用程序是互相成就、螺旋生长的:有了新的应用需求,就有了新的操作系统功能。而 UNIX 为我们提供了一个非常精简、稳定的接口 (fork, execve, exit, pipe ,...),纵然有沉重的历史负担,它在今天依然工作得很好。

课后习题/编程作业

1. 阅读材料

📚阅读材料

教科书 Operating Systems: Three Easy Pieces:

  • 第 5 章 - Process API (继续阅读)

2. 编程实践

Freestanding shell 很好地揭开了操作系统上应用程序的 “真面目”;理解 sh.c (包括使用正确的工具) 是非常重要的,因此我们特别在此一提。