GreyZhang/g_unix: some basic learning about unix operating system. (github.com)

         很久之前就闻听了UNIX的大名,也看过很多相关的故事类文章。其中最让我印象深刻的莫过于Ken发明UNIX的故事以及这个系统对于Linux以及GNU的OS的影响,虽然由于商业化的各种原因看上去如今UNIX不如Linux等流行,但是这背后有一个让程序员看起来比较有趣的故事。另外,这篇文章的两个作者因为这个系统的设计而获得了图灵奖,也足以看得出来这个系统在整个计算机行业的影响足够深远。另外,工作之后接触的一些书籍中也有很多UNIX的思想介绍,但是我一直算是一知半解并没有特别深刻的领悟感。正好现在又遇到了一个小长假,疫情因素我会在家里躲着,这些东西看看也是很好的。

1601_读Dennis M. Ritchie and Ken Thompson的The UNIX TimeSharing System_Unix分时复用系统_unix

1. 从这里看,最早期的UNIX至少是可以提供文本以及文档准备功能的。

2. 这篇文章中的主要概念可能会涉及到分时、操作系统以及命令语言等。

3. 整个系统的开发时间用了大概2人年,从这个数据上看,这的确是一个伟大的作品创作经历。

4. 早期的UNIX运行在一个16bit的处理器计算机上,只有144K的RAM,而UNIX系统则会占用42K。每次看到这样的参数我都为之震惊,因为我现在用到的很多MCU甚至都有着完全超越他的配置。

1601_读Dennis M. Ritchie and Ken Thompson的The UNIX TimeSharing System_Unix分时复用系统_unix_02

1. UNIX系统扮演的一个最重要的角色就是文件系统管理角色,而UNIX中涉及到的文件分为三种:普通的磁盘文件、目录文件以及特殊文件。

2. 目录是一种特殊的文件,这个我在大学的时候就知道这个结论。那么,它的体现形式究竟是什么呢?今天算是第一次知道这其中的设计理念,其实目录文件提供的是文件名与文件的一个映射关系。

3. 在所有的UNIX文件中,最为特殊的莫过于根目录文件,这个是所有文件的一个最初访问点。

4. 这里看到了一个早期UNIX对于文件命名的要求,文件名不能够超过14个字符。现在看起来,的确是很大的限制。估计曾经使用这个OS的人员在文件命名上肯定是很劳神费心。

1601_读Dennis M. Ritchie and Ken Thompson的The UNIX TimeSharing System_Unix分时复用系统_文件名_03

1. 特殊文件的一个典型代表就是外设,那么一个外设的响应动作如何与文件操作产生对应关系呢?这个看上去简单,如果接下来我去分析代码肯定得看看具体的实现来体会一下。

2. 根文件时钟在一个固定的存储外设中,然而整个系统的文件系统却不一定如此。

1601_读Dennis M. Ritchie and Ken Thompson的The UNIX TimeSharing System_Unix分时复用系统_unix_04

1. 大部分的编辑器在修改文件的时候会有一个对修改内容进行拷贝的过程。

2. 文件系统中i-number是否会成为文件系统中文件数目的限制?比如一个目录中平行等级的文件限制?显然还是会的。

3. 在文件的数据结构中会有存放地址以及大小等信息。

1601_读Dennis M. Ritchie and Ken Thompson的The UNIX TimeSharing System_Unix分时复用系统_服务器_05

1. 文件数据结构中还有修改时间戳、目录、是否是特殊文件、大文件还是小文件等属性。

2. 整个文件系统看上去就是一个树状链表,主要是产生各种信息关联。

1601_读Dennis M. Ritchie and Ken Thompson的The UNIX TimeSharing System_Unix分时复用系统_服务器_06

1. 这里有一个对于性能的基本评估方式,那就是汇编程序每秒可以执行多少行代码。感觉这不是一个很严格的评估方式,但是又是一个很有代表性的评估方向。

2. 对于多任务或者说多进程的实现,其实是通过fork让进程不断进行裂变。

1601_读Dennis M. Ritchie and Ken Thompson的The UNIX TimeSharing System_Unix分时复用系统_服务器_07

         标准的输入输出本质上是2个特殊的文件。

1601_读Dennis M. Ritchie and Ken Thompson的The UNIX TimeSharing System_Unix分时复用系统_文件系统_08

Shell环境可以提供顺序执行以及并行两种多任务处理的方式。

1601_读Dennis M. Ritchie and Ken Thompson的The UNIX TimeSharing System_Unix分时复用系统_UNIX_09

1. Shell基本上是一个永不退出的循环,随时在准备应答相关的命令请求。

2. trap的产生大部分是硬件的异常。

3. UNIX最初的设计目的其实是为了改善自己所需要的计算机环境,这种以自我需求为驱动的设计的确是非常有趣的一个动力。在TED演讲中,linus也讲过自己设计linux以及git的最初驱动,其实也只是为了给自己设计一个需要的工具。看起来,很多伟大的作品都有着类似的形成原因。

1601_读Dennis M. Ritchie and Ken Thompson的The UNIX TimeSharing System_Unix分时复用系统_文件名_10

         UNIX的很多技术是继承于其他地方的,之前看Ken的一些故事的时候就知道文件管理等理念很多其实来自于火星计划项目的产物。纵然那个项目有点失败,但是中间的优秀成果总归还是得到传承了。另外,这篇文章中一直在讲的fork,其实也是继承于这个有点失败的项目。

1601_读Dennis M. Ritchie and Ken Thompson的The UNIX TimeSharing System_Unix分时复用系统_文件系统_11

1. 这一页给出了当时写这篇文章时候的UNIX中的一些程序资料等统计信息,看得出来当时的这个UNIX版本的确是一个非常小巧的系统。

2. 从使用的频次以及CPU占用来看,当时的这个系统看起来是程序员专属的工作平台。

3. 纵观整篇文章,可以感受得到当时的计算机CPU设计并不够优秀,并且经常掉链子。而在这样的背景下,作者所用的UNIX系统竟然也做到了全年98%的时间提供服务,可以看得出来这个系统设计的优秀与稳定。