这篇博文源于我在公司的一次技术分享 。没有涉及到具体的操作和原理的讲解,而是从更高一层哲学的抽象探讨的。

到了哲学层面的东西,看似很虚,但我认为它比具体的细节更加重要,所谓为学日益为道日损。
哲学是对基本和普遍之问题的研究的学科,其大无外其小无内,它具有最高的概括性和普适性,技术会被新的技术替代,而思想上却能够以不变应万变,就像那句话:所见的是暂时的,所不见的是永恒的。

关于操作系统之哲学原理,我首先从四个方面通过和自然学科的对比,我们要先认识到计算机科学的本质它是一门人造学科。然后在此基础上,又概括出十个操作系统设计中的哲学原理。当然严谨说的话我们是无法探究到任何事物的本质的,我们能看到的都是表象或者更深一层的表象 。

计算机科学的本质

关于自然学科和人造学科的对比,下面从以下四点来介绍下:

一 精确、绝对 vs 不精确、相对

从自然学科开始它的第一个特点是精确、绝对,比如1+2 只有在算错的情况下不等于3 ,地球人都没有异议。
关于这点如果再延伸一点的话这里的精确绝对也是相对的,比如牛顿的万有引力定律精确地预言了海王星的存在,但却解释不了水星近日点进动问题,而用广义相对论就能很好地解释,但广义相对论也是不完备的,比如在解释宇宙大爆炸理论就会引入奇点,在这个地方所有的物理定理都失效了,只有数学层面的存在,这就是宇宙学中的奇性疑难问题,而霍金引入了无边界宇宙假说以及虚时间。
而对于人造学科:它是不精确、具有相对性的,这里只有所谓的“好”或“坏”, “没有对错”,比如我们不能说Windows系统是对的,Linux系统是错的,苹果安卓也是一样,各有优缺点。再比如精简指令集的CPU 还是复杂指令集的CPU,不能说哪个是对哪个是错。

二 自然存在 vs 人类发明

它的第二个特点是从对自然存在的观察导出,比如牛顿通过观察苹果落地的自然现象和严密的推理,得出了万有引力定律,这不是一般的人能想到的。又因为他是自然本来存在的,所以我们用发现而不是用发明。
人造学科第二个特点是从对人类活动的观察导出,比如上图中在计算机中广泛使用的栈和队列就是对从生活中观察到的现象进行抽象所获得。

三 是否依赖于人的主观判断力

第三个特点说的是这些观察的结果是不依赖于人的主观能动性,就是不论是谁从何种角度,得出的答案都是一致的,不以你主观意志为转移。
人造学科第三个特点依赖于人的主观判断力,不同的人观察同样的现象,得出的结论或抽象出的东西可能不一样,甚至完全相反。这样,多数人所认同的抽象就将成为人造学科里的标准,即存在少数服从多数的原则。计算机学科这方面更加明显,我们现在所用的操作系统,编程语言数据库等,大多是因为某个商业公司在市场上所占比重,如果当年Windows系统没有起来,没有基于此建立的一整套的生态环境,我们用的系统,软件甚于包括计算机都可能是完全不同的,再比如编程语言,我们现在用的都是面向对象的,不一定就是真的是最好的,有种函数式编程的语言现在公司中用的并不多,流行的有时不是因为他好,也有可能是因为易懂易学易上手,而有些类似于武功绝学,威力具大打遍天下无敌手的东西可能会因为不那么易学而失传了。

四 违反人的直觉 vs 符合人的直觉

第四个特点说的是自然的存在的通常是违背人的直觉的,比如下面这张图中的质能方程,E=MC平方,这是违反人的直觉的,非天才的大脑是洞察不出如些深奥的规律,另外在这个基础上弄出来的原子弹威力也是惊人的可怕。再比如我们是生活在三维空间中,对于超出三维的空间是很难理解的,而现代超弦理论说宇宙是由11维组成的,有本书《宇宙的琴弦》有专门讲这方面内容。
人造学科第四个特点通常符合人的直觉,里面的许多原理很多时候都是通过现实的启发或者为了解决某个现实问题而产生的,所以我们在理解它的时候可以类比现实中的例子,同时学好了这些原理与算法也可以把它应用到实际生活中去。

操作系统设计中的十个哲学原理

我们首先要认识到操作系统这个概念,可能与翻译以及文化差异有关,我们的理解操作通常就像是流水线上的操作相对比较低级,可能给人感觉操作系统没那么重要的感觉,但英文中 Operating System和我们的感受可能区别很大,它如同手术台上的主刀医师,一旦在手术台上所有的工作人员都要配合于他的操作。其实在计算机中操作系统是很重要且拥有很高权力的。
下面再讲下操作系统设计中的哲学原理,在这些指导原则和思想下我们可以更好的去判断现实中各具体的操作系统 。 
我一 一解释下 :

第一条哲学原理:层次架构

操作系统有很多的模块,而模块之间又是按层次分解的,下面一层向上面一层提供功能,而上面一层也只能对直接下属进行控制,一般不会跨层级。这种好实现,好管理。这也很像是一个国家或部落的层层管理机制。

第二条哲学原理:没有对错

如之前提到我们不能说Windows是对的,UNIX是错的。我们只能说,Windows更容易使用,而UNIX不太容易使用而已。而对于另外一些人来说则恰恰相反。又例如,操作系统进程调度策略有很多,而每种调度策略有其适用的场
景。我们不能说,时间片轮转是对的,而优先级调度是错误的。只能说时间片轮转更接近公平,而优先级调度更接近人类社会的等级制度。这两者都有其存在的合理性。
这就像现实生活中的争吵场景,俗话说“公说公有理,婆说婆有理”。

第三条哲学原理:懒人哲学

有人说,这个世界是由懒惰的人推动的。因为懒惰,我们发明洗衣机来洗衣服;因为懒惰,我们发明汽车作为代步工具。
在操作系统中也一样,因为有时提前将事情做完也许是一种浪费。
比如,fork是一个类UNIX操作系统里面创建子进程的系统调用,在fork刚刚出现的时候,fork创建的是一个和父进程一模一样的子进程,它们有着相同的地址空间和资源。而fork的实现就是将父进程地址空间拷贝到子进程地址空间里。但多数人创建fork的子进程是为了干其它的事情,子进程创建后会被新的程序所覆盖,这时每次都拷贝一次父进程的内容就显得多余,后来工程师们对fork的语义进行了修改,在fork时只创建一个空的子进程,而不进行父子进程地址空间的拷贝。

第四条哲学原理:让困于人

就像那句古话“各人自扫门前雪,休管他人瓦上霜。”  我们要”将方便留给自己,把困难让给别人。” 操作系统中的设计也遵循这一原则,就是每个功能只做好他份内的事情,而不属于自己的事情不去管。
一个简单的例子就是文件系统一致性的保证。即操作系统只对目录夹的操 作进行原语保护,而对用户数据的操作通常不会采用这种保护措施。对于操作系统 来说,它需要保证自己的正确性,而文件夹对于操作系统的文件系统的正常运转至 关重要,因此,文件夹始终不能出现问题。而用户文件的一致与否则不影响操作系 统本身的运行。虽然用户文件毁坏可能激怒用户,但这不是操作系统有义务管的事情。

第五条哲学原理:留有余地

也像俗话说“不可将事情做绝” 。 
这一点在操作系统的设计中也得到了充分体现。看文件系统目录夹的设计:一个目录夹记录里面通常都有一部分所谓的保留空间(reserved space)。
例如,DOS目录夹记录里面就有10个字节的保留空间,这样,如果后来人对此系统进行改善,他们将有余地回旋。而事实上,这10个保留字在Win98文件系统里面就得到了利用。如果没有这些保留字,我们将不得不为了扩展而设计全新的系统。

第六条哲学原理:子虚乌有——海市蜃楼之美

操作系统把硬件管理和抽象出来,然后服务于应用程序和用户,展示给用户看到的东西和操作系统的实际实现有十万八千里的差异,它就像一个魔法师一样。比如我们看到的文件系统,里面有各种各样的文件,我们感觉到有用不完的内存空间其实都是一种虚幻的东西。再引伸一些我们现实感知到的世界就是真实的吗,有兴趣的可以查查缸中之恼 。

第七条哲学原理:时空转换——沧海桑田之变

时间和空间是可以相互转换的,在这一点上毛主席把他运用到了极致,比如他的《论持久战》中的以空间换时间 。
在操作系统中时空转换的应用也有很多,例如由于页表的尺寸通常很大,占用内存过多,我们便将页表分级,只保留一部分页表在内存, 而其他部分放置于磁盘上。这样页表所占空间大为减少。但付出的代价就是时间成本:从虚拟地址转换为物理地址需要经过多级转换,从而导致转换时间增加。为了控制这种时间的增加,操作系统又使用了快表来提升转换的速度。而快表付出的代价不是别的,正是空间的增加。同样的转换也出现在文件缓存、非一致性多级索引结构等许多其他的地方。 (页表的内容就是该进程的虚拟地址到物理地址的一个映射。)

第八条哲学原理:策机分离与权利分离

为的是使比赛公平运动场上,裁判和运动员不能是同一个人,甚至不能是同一国家的 人。在一个国家机器里,立法机构和执法机构也不能是同一个 团体,否则就会出现滥用法律的情况。而立法就是策略,执法就是实现机制。
在操作系统设计中比如策略可以由用户指定,操作系统则是执行机制。所以有了调度算法参数化,算法在内核里,参数可以由用户指定。

第九条哲学原理:简单为美——求于至简、归于永恒

在数学领域有个不成文的共识:如果一个问题有多个数学表示,那么最简单的表示通常是正确的。在人类社会里面,也是越简单的架构效率越高。在操作系统的设计应该越简单越好,在文件的存储方式上,我们在网型组织、树型组织、记录流、数据块流和字节流的各种选择当中,现代操作系统选择的都是最简单的字节流。

第十条哲学原理:适可而止

就如中国的中庸之道,凡事不可走极端,所谓泰极生否。操作系统的设计中也不要过度追求完美和面面俱到,懂得适可而止。
比如当年Multics(Multiplexed Information and Computing System) 上世纪60年代,在当时的技术条件下,研发这样的通用操作系统存在了太多难以解决的技术难题。导致研发进度极为缓慢,而最终没有实现。当然由他后来促成了Unix系统和 C语言的发明。

在你了解了操作系统中的常用设计哲学,再去读一些操作系统中细节的实现或者它的的源代码,你会有了更高层面的指导思路,有了一套自身的框架,会更加清晰不迷惑。所谓为学日益为道日损,损之又损以至于无为,无为而无不为 。

最后推荐一本书 ,就叫 《操作系统之哲学原理》 ,相信我,读过你将会有更多的收获取。

计算机科学的本质与操作系统中十条哲学原理相关推荐

  1. 推荐一本书:计算机的心智:操作系统之哲学原理

    对于我们这些非计算机专业的学生来说,能够从计算机的底层理解计算机的运算过程其实是需要花费很大的努力,尤其是没有老师带,没有同学交流,只能自己一个人去摸索的情况下. 因为要学习计算机的基础知识,我从网上 ...

  2. 操作系统 之哲学原理

    当你在电脑上玩游戏的时候,当你在电脑上与朋友聊天的时候,当你编写了一个程序并加载运行的时候,你有没有一种像观看魔术的感觉?一个人编写的程序能够编译运行,计算出结果,并显示或打印出来.你有没有觉得它很神 ...

  3. 计算机的心智-操作系统之哲学原理

    "所见的是暂时的,所不见的是永远的"这是"计算机的心智-操作系统之哲学原理"这本教材封面顶部的小字体.        收到机械工业出版社发来的这本书的介绍,还申 ...

  4. 如何避免操作系统中多线程资源竞争的互斥与同步?

    作者 | 小林coding 来源 | 小林coding(ID:CodingLin) 前言 先来看看虚构的小故事 已经晚上 11 点了,程序员小明的双手还在键盘上飞舞着,眼神依然注视着的电脑屏幕. 没办 ...

  5. JavaScript 原型中的哲学思想

    欢迎来我的博客阅读:「JavaScript 原型中的哲学思想」 记得当年初试前端的时候,学习JavaScript过程中,原型问题一直让我疑惑许久,那时候捧着那本著名的红皮书,看到有关原型的讲解时,总是 ...

  6. 操作系统之哲学原理 第2版

    操作系统之哲学原理 第2版 下载地址 https://pan.baidu.com/s/1CwLwrkE0yBIxf3GIT871gQ 扫码下面二维码关注公众号回复 100113获取分享码 本书目录结构 ...

  7. 秦曾昌人工智能课程---3、机器学习中的哲学

    秦曾昌人工智能课程---3.机器学习中的哲学 一.总结 一句话总结: 机器学习分类:了解机器学习分类:监督学习,非监督学习,增强学习 机器学习针对性:了解什么问题是机器学习问题,什么不是 1.三个门, ...

  8. 《操作系统之哲学原理(第2版)》——— 操作系统的发展历史

    <操作系统之哲学原理(第2版)>本书对操作系统的核心内容进行了全面分析,包括操作系统的发展历史和基本概念.进程与线程.内存管理.文件系统.输入与输出.多核环境下的进程调度和操作系统设计.本 ...

  9. 操作系统中任务调度的实现

    操作系统中任务调度的实现   作者:谢煜波 Email : xieyubo@126.com QQ : 13916830 2004-5-31 简 介 说起任务调度,我想我们大家都非常熟悉,任何一本操作系 ...

最新文章

  1. 十周第一次课(5月25日)
  2. 博弈论笔记:不完全信息与声誉
  3. 如何启用计算机超级账户,Windows7启用超级管理员账户的方法
  4. 【数据结构与算法】之深入解析“括号生成”的求解思路与算法示例
  5. android fm模块学习,AndroidFM模块学习之5关闭FM流程
  6. C# 捕获系统闪退BUG
  7. SVN中tag branch trunk用法详解
  8. python语言基础实验_实验二Python语言基础函数包练习.doc
  9. Vmware16一打开虚拟机就蓝屏
  10. Oracle 远程 RAC 打造双活数据中心 | 从容灾迈向双活案例分享
  11. 如何使用 Firefox 阻止指纹识别的侵扰?
  12. 普通程序员能实现财务自由吗?
  13. 汕头大学计算机英语复试,2020年汕头大学计算机应用技术考研经验分享
  14. [转载] python中字典copy_python深度复制字典,copy方法与deepcopy方法
  15. FFmpeg的编解码(二)
  16. Unity 3D下载安装教程
  17. 松下plc安装序列号afpsgr7_《松下PLC 编程软件 FPWINGR7 操作手册 中文高清版》.pdf...
  18. 用HTML+CSS做员工信息登记表
  19. Java虚拟机的类加载机制全面解析
  20. 【卡尔曼滤波原理及基本认知】

热门文章

  1. 华为云GPU服务器部署PaddleOCR中英文识别服务
  2. Java定义一个抽象类科学家_Java程序设计作业
  3. 【大学生课程】《Python数据分析》课程大作业要求
  4. 如何保证战略落地_如何确保企业战略落地
  5. 服务器php网站配置域名访问,phpstudy在服务器上配置域名
  6. E28 LoRa模块透传 定点传输 RSSI测试与MicroPython应用
  7. Web of Science爬虫实战(Post方法)
  8. 学硕与专硕,全日制与非全日制,定向与非定向......8大考研常识,你清楚吗?
  9. 【SSM-报销单】6.报销单-修改报销单
  10. Android SDK 完整版