當前位置: 華文問答 > 數碼

為什麽要學作業系統?

2014-11-21數碼

1、開眼界

作為最常見的復雜軟件,作業系統包含了時序與分時等時間相關的經典案例,又是介面與抽象方面的極佳例子,涵蓋了常見軟件開發中所可能遇到的大部份場景。

弄懂了作業系統解決問題的思路,將來遇到問題就不至於兩眼一抹黑。


2、打基礎

真正做起工程就會知道,很多很多問題是作業系統相關的。

比如說,做一個網絡代理軟件,不過是從socket上收一個包然後轉發給另一個socket而已,這好像和作業系統沒多大關系吧?

但真做了,你會發現,用一個執行緒處理網絡IO,只要寫對了,那麽哪怕系統壓力很大,只要CPU頂得住,就可以保證引入的延遲總是在幾個毫秒之內;但如果用了多執行緒分別處理收/發,那麽只要網絡壓力稍大,引入的延遲就會增加,很快額外延遲就可能突破幾十個毫秒(這實際上已經完全不能用了)。

想搞明白這是為什麽,對作業系統排程原理、時間片等概念沒有足夠深刻的理解,是不可能的。

尤其是,當你突然遇到類似「系統壓力一大網絡延遲急劇升高」的bug時,如果對作業系統沒有深入理解,你連準確描述都做不到,連查資料、求幫助都不知道該往哪個方向努力,更不用說debug了。

——套用層開發的確只需要接觸冰山在海面上的可見部份;但這只夠你開發一些蹩腳的軟件;冰山藏在海面下的9/10,和冰山的可見部份畢竟是一體的:浮於表面的軟件同樣會影響冰山的不可見部份、並被冰山的不可見部份影響。如果沒有基本了解,當冰山的不可見部份透過可見部份坑到你時,你絕沒能力為這些蹩腳軟件debug。

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

類似的,完全不懂何謂檔案系統、何謂目錄樹的使用者,一樣可以用windows上網、辦公。但一旦出了問題,他就只能求人幫忙——而且必須上門,因為你給他說怎麽怎麽操作,他是不可能聽懂的(同樣的,如果不上門,只聽他描述,你也絕對聽不懂他遇到了什麽問題:我能說自己已經被這種人坑了無數次了嗎)。