从研究环境到文字工作
1969年,贝尔实验室退出Multics项目后,肯·汤普森、丹尼斯·里奇等人希望保留方便交互编程的环境。他们在美国新泽西州默里希尔利用一台数字设备公司的PDP-7,逐步做出文件系统、命令解释器和小型工具。1970年转向新购置的PDP-11时,文字编辑与排版成为争取支持的具体用途,约瑟夫·奥桑纳在其中起了重要作用。
因此,1971年11月3日署名汤普森与里奇的《UNIX程序员手册》,标记的是系统的一次文档定型。早期开发始于1969年,文档日期不能充当Unix从无到有的单一生日。手册所记录的机器已经承担实际工作,但还没有后来Unix全部的功能。
把正在运行的系统写下来
手册按照命令、系统调用、子程序、特殊文件、文件格式、用户维护程序及杂项分为七部分。每个条目交代用途、调用形式、说明、相关文件、诊断、已知缺陷和维护者;读者既能查命令怎么输入,也能知道发生问题该找谁。
编者明确选择描述条目编写时的实际行为。各条目带自己的日期,采用便于替换更新的独立页面,而不是把不断变化的软件写成永久不变的规格。手册本身使用ed编辑器和roff排版程序制作,这让文档成为系统工具的一项真实产品:工具用于写文档,文档又使工具可被其他人使用。
参考:[1]
文件把编辑与计算接起来
文件名和目录让使用者保存文本、程序与结果,不必为每项工作重新安排磁盘位置。第一版的ed按行编辑:先将文件读入编辑缓冲区,修改后必须执行写入命令才保存到文件。它支持用模式寻找和替换文字,因而可以反复处理相同形式的文本,而不只是逐字重打。
设备也通过特殊文件进入系统接口,程序可对已打开的文件进行读写。命令解释器sh能够把输出改写到文件,再让另一条命令从文件读取。这样的组合需要明确的中间文件与先后步骤;第一版尚无后来熟悉的管道操作符。理解这一点,才能看到工具组合怎样在小规模实践中逐步生长。
共享机器怎样执行命令
用户输入一条命令后,shell负责寻找并启动对应程序。fork建立子进程,exec用指定程序替换进程中的执行内容,wait让父进程等待子进程结束,exit完成退出。把这些职责拆开,使shell可以等待命令完成,也可以按用户要求让任务在后台进行。命令解释器本身是用户程序,这使操作方式不必全部固定在内核里。
共享并不表示每个程序都始终驻留内存。早期PDP-11配置只有24千字节核心存储器,系统依靠磁盘交换容纳进程,硬件又缺少内存保护。文件访问权限、登录身份和进程管理提供了协作秩序,却不能等同于后来成熟系统的隔离能力;一个失控程序仍可能影响整台机器。
先在工作中验证,再走向外部
1971年,贝尔实验室专利部门的文字处理工作为Unix提供了程序员之外的使用者。打字员需要编辑、排版和打印申请材料,专利文件的行号等实际要求反过来推动工具改进。计算机因此不只展示算法,还要长期保存文件、接收重复修改,并交付可阅读的文稿。
1973年的学术会议报告以及1974年发表于《美国计算机学会通讯》的论文,随后把Unix介绍给更广泛的计算机研究群体。论文描述的是继续发展的系统,不能拿它的全部特征覆盖1971年的手册。第一版的意义,正在于留下一个可核对的起点:文件提供持久对象,进程提供执行单位,命令提供操作入口,而简短、可更新的说明把开发者的经验变成能够传授的共同知识。