程序员张大胖学了几天操作系统,感觉模模糊糊的,说它有用吧,又不知道哪里有用,说它没用吧,但是它确实很重要。于是他决定对操作系统做一次采访。
操作系统,数据结构,计算机网络这些大V都住在郊区的一座座别墅中,前来拜访的程序员很多,但是只有操作系统的门前冷冷清清。
张大胖按了门铃,说明来意,操作系统把他请进客厅,张大胖环顾四周,只见客厅悬挂着一个巨幅的毛笔字:抽象和接口的最佳范例
张大胖搞不懂这是什么意思, 问道:“操作系统先生,你这副字是什么意思啊,太抽象了吧。”
操作系统很得意:这个嘛,还是计算机网络懂我,把我的精华都写到这副字中了:文件是对I/O设备的抽象, 虚拟存储器是对内存+文件的抽象,进程是对CPU+虚拟存储器的抽象, socket是对TCP/IP的抽象。
张大胖心想 socket应该是计算机网络的东西,也被操作系统给霸占了,不过TCP/IP栈是在操作系统内核实现的,也说得过去。
操作系统:接口就是open ,create, write,allocate这些东西了, 我把一切都当作文件来处理了,非常精妙吧!
(详情参见:《上帝托梦给我说:一切皆文件》)
张大胖:可是这些东西都是一些概念,和实际的编程关联不大啊!
操作系统有些不满:你们现在这些程序员,只知道去隔壁刷LeetCode,刷面经,哦对了,还会学个什么爪哇,派森,做几个项目,然后就去面试了,这样下去是要坏事的。
张大胖心中不爽:这不是很正常的操作吗!
“这样吧,我让看看我操作系统到底有什么东西,到底有什么用处!” 操作系统请张大胖上了二楼。
上了二楼,第一个房间上写着“进程管理”,里边堆着进程,线程,竞争条件,屏蔽终端,TSL指令, XCHG指令 优先级反转问题,信号量,互斥量,有限缓冲问题,哲学家进餐问题,读者-写者问题,死锁问题,进程调度算法等一大堆资料。
操作系统:你看看,如果你不懂我的线程,不懂抢占/调度,怎么可能写出高质量的并发程序?
张大胖反驳:我在JVM中也学了线程的状态和调度, 如何加锁,如何避免死锁,我觉得写Java程序足够了啊!
操作系统:别提JVM那小子,把我都给屏蔽了!让程序员变得越来越懒,都不看底层了。你不看底层,怎么知道锁是怎么实现的?Java 的CAS是怎么实现的?用了什么硬件指令?
张大胖笑道:面经里都有啊!不过我一直好奇,类似哲学家进餐问题,读者写者问题有啥用啊?
操作系统:这些看起来没用的东西展示的都是进程同步原语的精髓啊,哲学家进餐问题,对于互斥访问有限资源的竞争问题,在多进程之间分配多个资源不会出现死锁和饥饿的问题,非常有用。读者-写者问题,为一个共享数据的读写建立了模型。你是程序员,如果你理解了这些,工作中的很多类似的并发问题你自己就可以解决了,不用再看网上那些云里雾里的文章了。
张大胖:我工作中遇不到这样的问题,如果遇到了,我就到网上搜类库,调用类库!谁还自己写啊!还有,这进程调度算法,什么轮转调度,先到先服务,最短任务优先,优先级调度...... 到底有啥用?
操作系统:你要学习其中的思想啊, 你做Web服务器负载均衡的时候,是不是也要用到轮转,最少链接,按优先级这些方法? 没有最好的策略,关键是平衡,要在有限的资源和有限的时间内做出平衡,这也是设计大型系统的基本思想,你觉得没用?
张大胖:我从来不设计大型系统!
操作系统已经面露怒色,但他还是耐着性子,带着张大胖来到了隔壁房间:存储管理。
张大胖探头一看,这里边堆着内存保护,虚拟地址空间,分页,页表,页面置换算法,系统颠簸,工作集,写时复制,内存映射文件..... 一大堆让人看不懂的东西。
张大胖撇撇嘴:没有一个有用的!
操作系统随手拿起一个虚拟地址空间的图片:你看看,这个进程的虚拟地址空间,多重要啊,理解了它才可能去理解可执行文件的格式,程序的链接,程序的装载..... 我为了给每个进程都营造一个假象,让他们有一个虚拟的地址空间,可是费了很大的劲,在背后又分段又分页,做虚拟内存和物理内存的映射......
张大胖:操作系统先生,你说的这些我在编程中都用不到。
操作系统很无奈,又拿起内存映射的资料和写时复制的资料,说到:Kafka在消费消息的时候会用到零Copy,很多Web服务器(如nginx)利用sendfile来实现文件快速发送, Redis在持久化的时候,使用写时复制技术, 难道它们都没用吗?
张大胖:会用Kafka,Nginx,Redis不就行了,了解这么深干嘛?
操作系统气不打一出来:那你在性能监控的时候用过Linux 上的命令vmstat吧,你不懂得存储管理,进程管理,肯定看不懂吧。
张大胖:我没用过这个命令哦!
操作系统:作为一个程序员,你难道连一点好奇心都没有吗,难道你就不愿意了解一下系统的工作原理?
张大胖:实话实说,好奇心肯定是有滴,只是这些东西吧,太枯燥,我看不下去。
操作系统说:唉!我在一楼还有两间房子,分别是文件系统,I/O系统,你这么浑浑噩噩,不看也罢。我直接带你到地下一层吧。
地下一层的大厅灯火通明,虽说有不少人,但是很安静,每个人都非常专注地盯着自己眼前的屏幕。
张大胖问道:他们在干嘛?
操作系统:这是一群操作系统的爱好者,他们都在自制属于自己的操作系统。
张大胖吐了下舌头,说到:我的妈呀,这事儿我可干不了,我上个厕所先。
然后他一溜烟地溜走了。
操作系统看着他逃跑的背影,叹了一口气,在一个小本上写到:今天接待了第39868个CRUD程序员。
操作系统看着他逃跑的背影,叹了一口气,在一个小本上写到:今天接待了第39868个CRUD程序员。
【本文为51CTO专栏作者“刘欣”的原创稿件,转载请通过作者微信公众号coderising获取授权】