当前位置: 华文问答 > 数码

为什么要学操作系统?

2014-11-21数码

1、开眼界

作为最常见的复杂软件,操作系统包含了时序与分时等时间相关的经典案例,又是接口与抽象方面的极佳例子,涵盖了常见软件开发中所可能遇到的大部分场景。

弄懂了操作系统解决问题的思路,将来遇到问题就不至于两眼一抹黑。


2、打基础

真正做起工程就会知道,很多很多问题是操作系统相关的。

比如说,做一个网络代理软件,不过是从socket上收一个包然后转发给另一个socket而已,这好像和操作系统没多大关系吧?

但真做了,你会发现,用一个线程处理网络IO,只要写对了,那么哪怕系统压力很大,只要CPU顶得住,就可以保证引入的延迟总是在几个毫秒之内;但如果用了多线程分别处理收/发,那么只要网络压力稍大,引入的延迟就会增加,很快额外延迟就可能突破几十个毫秒(这实际上已经完全不能用了)。

想搞明白这是为什么,对操作系统调度原理、时间片等概念没有足够深刻的理解,是不可能的。

尤其是,当你突然遇到类似「系统压力一大网络延迟急剧升高」的bug时,如果对操作系统没有深入理解,你连准确描述都做不到,连查资料、求帮助都不知道该往哪个方向努力,更不用说debug了。

——应用层开发的确只需要接触冰山在海面上的可见部分;但这只够你开发一些蹩脚的软件;冰山藏在海面下的9/10,和冰山的可见部分毕竟是一体的:浮于表面的软件同样会影响冰山的不可见部分、并被冰山的不可见部分影响。如果没有基本了解,当冰山的不可见部分透过可见部分坑到你时,你绝没能力为这些蹩脚软件debug。

————————————————————

类似的,完全不懂何谓文件系统、何谓目录树的用户,一样可以用windows上网、办公。但一旦出了问题,他就只能求人帮忙——而且必须上门,因为你给他说怎么怎么操作,他是不可能听懂的(同样的,如果不上门,只听他描述,你也绝对听不懂他遇到了什么问题:我能说自己已经被这种人坑了无数次了吗)。