8. 终端和 UNIX Shell

我们已经知道如何用 “文件描述符” 相关的系统调用访问操作系统中的对象:open, read, write, lseek, close。操作系统也提供了 mount, pipe, mkfifo 这些系统调用能 “创建” 操作系统中的对象。当然,我们也知道操作系统中的对象远不止于此,还有很多有趣的对象我们还没有深入了解过——终端就让人细思恐极。

本讲内容:从大家每天用的终端模拟器开始,一探究竟 Ctrl-C 到底做了什么——在此基础上,我们就可以实现自己的 “多任务管理器” 了。

8.1 终端

8.2 终端和操作系统

💬
Prompt: 为什么我们需要 sigaction 替代 UNIX 的信号机制?
💬
Prompt: 在有了 pty 机制之后,我们可以用 session 的机制,为每个 “窗口” 分配一个新的 pty,这样可以简化系统调用,例如 process group 的概念可以消除。是否可以这样设计新的操作系统?

8.3 UNIX Shell 编程语言

8.5 总结

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