操作系統沒啥用,不用學了
程序員張大胖學了幾天操作系統,感覺模模糊糊的,說它有用吧,又不知道哪里有用,說它沒用吧,但是它確實很重要。于是他決定對操作系統做一次采訪。
操作系統,數據結構,計算機網絡這些大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獲取授權】