天天看點

作業系統讀寫者問題實驗報告_作業系統沒啥用,不用學了

程式員張大胖學了幾天作業系統,感覺模模糊糊的,說它有用吧,又不知道哪裡有用,說它沒用吧,但是它确實很重要。于是他決定對作業系統做一次采訪。

作業系統,資料結構,計算機網絡這些大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程式員。

作業系統讀寫者問題實驗報告_作業系統沒啥用,不用學了

如何降低程式員的工資?

程式員,你得選準跑路的時間!

兩年,我學會了所有的程式設計語言!

一直CRUD,一直996,我煩透了,我要轉型

位元組碼萬歲!

上帝托夢給我說:一切皆檔案

Javascript: 一個屌絲的逆襲

Node.js :我隻需要一個店小二

我是一個線程

TCP/IP之大明郵差

一個故事講完Https

CPU 阿甘

作業系統讀寫者問題實驗報告_作業系統沒啥用,不用學了

繼續閱讀