对Unix哲学的理解

      Douglas McIlroy是Unix系统上管道机制的发明者,也是Unix文化的缔造者之一。他归纳的Unix哲学如下:

创新互联建站是一家集网站建设,京山企业网站建设,京山品牌网站建设,网站定制,京山网站建设报价,网络营销,网络优化,京山网站推广为一体的创新建站企业,帮助传统企业提升企业形象加强企业竞争力。可充分满足这一群体相比中小企业更为丰富、高端、多元的互联网需求。同时我们时刻保持专业、时尚、前沿,时刻以成就客户成长自我,坚持不断学习、思考、沉淀、净化自己,让我们为更多的企业打造出实用型网站。

程序应该只关注一个目标,并尽可能把它做好。让程序能够互相协同工作。应该让程序处理文本数据流,因为这是一个通用的接口。

      更加简化的版本是:做一件事,做好它。虽然只有第三条是特指Unix系统的,但Unix开发者们常常同时强调这三个信条。

      罗勃·派克在他的《Notes on Programming in C》中提到了以下格言。虽然这些规则是关于程序设计的,但作为Unix哲学丝毫不为过:

  • 规则一:你永远不会知道你的程序会在什么地方耗费时间。程序的瓶颈常常出现在意想不到的地方,因此在你确信找到瓶颈后再动手优化代码吧。

  • 规则二:测试代码。只有在你详细测试了代码,并且发现一部分代码耗费了绝大部分的运行时间时再对程序作速度优化。

  • 规则三:功能全面的算法(fancy algorithm)在处理小规模问题时效率很低,这是因为算法时间效率中的常量很大,而问题往往规模很小。除非你知道你遇到的常常是复杂的情况,否则就让代码丑陋但是简单而高效吧。(即使问题规模确实很大,也首先尝试第二条规则。)

  • 规则四:功能全面的算法比简单的算法更容易产生Bug,更难实现。尽量使用简单的算法和数据结构。

  • 规则五:数据决定一切。如果选择的数据结构能很好的管理数据,算法部分往往不言自明。记住,数据结构,而非算法,才是编程的关键。

  • 规则六:没有第六条规则。

      Pike的第一、二条规则重申了高德纳的著名格言:“过早的优化是一切罪恶的根源。”[1]Pike的第三、四条规则被肯·汤普逊改述成:“疑惑不定之时最适合穷举。”事实上,这两条规则也是KISS原则的具体表现。规则五在之前Fred Brooks的人月神话中也被提及。Jon Bentley的《Programming Pearls》中也有一章阐述了相同的设计哲学。此规则作为“如果你的数据结构很好,那么控制它的算法就无关痛痒了”的例子常常被简化成“简约地写代码,聪明地用数据”。第六条规则当然只是Pike针对蒙提·派森之小品Bruces sketch的幽默发挥而已了。

      1994年,X Window系统开发组的成员Mike Gancarz根据他自己的Unix系统经验以及和其他领域使用Unix系统的资深程序员们的讨论结果,写成了《The UNIX Philosophy》,提出了9条训格之言:

  • 一:小即是美。

  • 二:让程序只做好一件事。

  • 三:尽可能早地创建原型。

  • 四:可移植性比效率更重要。

  • 五:数据应该保存为文本文件。

  • 六:尽可能地榨取软件的全部价值。

  • 七:使用shell脚本来提高效率和可移植性。

  • 八:避免使用可定制性低下的用户界面。

  • 九:所有程序都是数据的过滤器。

此外还有十条原则则并不为所有人认同,甚至还是争论的焦点(如宏内核和微内核之争):

  • 一:应该允许用户定制操作环境。

  • 二:让操作系统核心小而轻。

  • 三:使用小写字母并尽量简短。

  • 四:节约纸张,保护树林。

  • 五:沉默是金。

  • 六:并行地思考。

  • 七:部分加部分大于整体。

  • 八:寻找问题的帕雷托法则。

  • 九:程序随需求而增长(Worse is better)。

  • 十:层级地思考。

     一个Unix内核-核心或操作系统的关键组件-包括像进程管理,内存管理,文件管理,设备管理和网络管理的许多内核子系统。

每个子系统有一些功能:

  • 并发性:由于Unix是一个多操作系统,多程序同时运行,以提高系统的性能。

  • 虚拟内存(VM):内存管理子系统实现虚拟内存的概念,用户不必担心可执行程序的大小和RAM的大小。

  • 分页:它是一种技术,以尽量减少内部以及外部碎片在物理内存中。

  • 虚拟文件系统(VFS):VFS是一个文件系统,用来帮助用户隐藏不同的文件系统的复杂性。用户可以使用相同的标准文件系统调用来访问不同的文件系统。

内核提供这些和其他基本服务的中断和陷阱处理,用户和系统空间之间的分离,系统调用,调度,定时器和时钟处理,文件描述符管理。

的Unix架构概念的一些主要功能是:

  • Unix系统使用集中式的管理制度和流程活动的操作系统内核。

  • 所有非内核软件被组织成独立的,核心管理流程。

  • Unix系统抢先式多任务:可以同时运行多个进程,或者在小的时间片,几乎在同一时间,任何进程都可以被打断,并搬出由内核执行。这就是所谓的线程管理。

  • 文件被存储在一个分层文件系统磁盘上,与一个顶级整个系统中的位置(根,或“/”),文件和目录,子目录,子目录的子目录,等它下面。

  • 除了 少数例外,设备和管理的进程之间的通信的某些类型的文件或假文件内的文件系统层次结构可见。这就是所谓的一切都是文件。然而,Linus Torvalds的状态,这是不准确的,可以更好地表述为“一切是一个字节流”。[1]

UNIX操作系统支持下列特性和功能:

  • 多任务和多用户。

  • 编程接口。

  • 使用文件作为抽象的设备和其它的目的。

  • 内置的联网。(TCP / IP是标准的)

  • 持久的系统服务进程名为“守护”和由init或inetd的管理。


当前标题:对Unix哲学的理解
当前路径:http://azwzsj.com/article/gssopd.html