操作系統:一個老漢的無聲告白
老夫生于上世紀五十年代,作為八零后的大叔,九零后的老伯,同時也是你們動輒就要重裝的操作系統,我的學名是“計算機管理控制程序”,英譯“operating system”,小老弟們常喊我“OS”。雖說是老弟,目的卻都不怎么單純,大部分人只想玩我,剩下一小撮人卻鐘愛探索我的身體,他們沉迷于當下,但真正愿意了解我過去的所剩無幾。今兒個趁機會給你們介紹一下我的過去。
人工操作
在我幼年時期,雖然跟我打交道的絕大部分都是精英程序員,但做的事還是很基礎的,想執行一段程序必須先把代碼寫到卡片上,塞到我身體里,打開開關,等我對數據進行計算,計算完畢后再把卡片卸下來,這才把控制權交給下一個人,這就叫做“人工操作方式”。但是很明顯,我的處理能力是有目共睹的,本來幾秒鐘就能處理完的作業,偏偏人工操作就等了幾分鐘,不僅我心急,后面排隊的人也很容易跟他干架,可如果把浪費的時間用來處理其它作業,效率一定會蹭蹭的往上漲。
單道批處理系統
為了解決等待人工操作的問題,絕頂聰明的我想到了一個好方法,首先準備一個磁帶作為存儲設備,程序員將作業聚在一起塞給我,然后我成批的將作業讀入磁帶,這時候程序員們就可以走開做別的事了。showtime!接下來只需依次將作業裝入內存,計算數據并輸出結果即可。因我引以為傲的處理能力自然而然的就省下了等待人工操作的時間。
雖然有了批量處理的能力,但還是有很大的缺陷,因為我一次只能執行一個作業,所以作業執行時是獨占我所有資源的。這意味著當我進行I/O時,我的CPU是無事可做的,非常浪費資源,如果讓空閑的CPU去處理其它作業,理論上就能做到同時處理兩個作業了。
多道批處理系統
說干就干,接下來我進行了一些改造,目的就是“誰閑給誰活干”——當一個作業在使用CPU時,另一個作業可以進行I/O,反之亦然。這樣不僅實現了多個作業的同時處理,還提高了老夫的資源利用率和吞吐能力。與此同時,我不再嚴格按照順序裝載作業,而是由我的作業調度程序負責分配作業的裝載,并由進程調度程序分配CPU,這樣權責分明,更有利于日后調度策略的優化和調整。
現在的作業已經不同以往,不再獨占全機,但它們卻面臨著共享CPU、內存、設備等問題。有共享就會有資源歸屬權的沖突,既然可預見到沖突就得提前預防,怎么預防呢?這就需要有專門的模塊來管理規避由共享產生的沖突問題,比如CPU管理、內存管理、設備管理等,這些模塊是我的靈魂,也是以后主要圍繞的發展方向。
雖然比起單道時期的我性能得到極大提升,但人嘛畢竟是不知足的,機器也一樣。我的平均周轉時間還有很大的改善空間,周轉時間呢,是指從作業提交給系統到執行完畢所花費的時間,而平均周轉時間是指“所有作業的時間總和與作業總數的比值”,平均周轉時間越小意味著性能越高。減少該時間最有效的方式就是調整調度策略,讓所有作業盡可能快的執行完畢,調度策略相對復雜,以后的章節再給大家講解。除平均周轉時間外,與用戶交互能力的提升也是我的重中之重,現在的我只能同時與一個程序員進行交流,但這是遠遠不夠的,要和人類長期打交道,他們的滿意度才是我邁向成功的最高準則。
分時操作系統
為解決人類強烈的交互欲望,努力修煉的我終于練就了一套絕世武功——時間片輪轉法。這是一套極強的掌法,用戶可以通過若干個終端連接到我這里,我按一定時間間隔輪流的為各個終端服務,由于我極快的處理速度,用戶完全無法感知我做了什么手腳,以至于他們認為我只為他們本人服務,而現在每天打游戲的你仍然在走著我的套路/滑稽,正所謂“天下武功唯快不破”,而這種戲弄你們的感覺讓我奇爽無比。
實時操作系統
如果說分時的我一定要有缺陷的話,那么在某些場景下公平的分時就是我的缺陷。剛才講到分時是用時間片輪轉法輪流的為每個用戶服務,雖能誆得了小白,但在高精尖領域不太適用,比如航空航天、海底探測,絲毫的處理延遲可能會導致無法挽回的后果,想要解決延遲,時間片就不能過于均衡,優先級高的要先執行,但總執行優先級高的又會導致低權重的一直得不到執行,或是兩個同樣高優先級的作業因互搶資源發生死鎖,聽起來很復雜吧,但這就是調度策略的藝術之處。不過我一時半會也解釋不清楚,要不就先到這里吧,我要關機了,以下是我為你們整理的思維導圖,拜拜。

Go語言組件學習示例開源庫,歡迎star
https://github.com/EnochZg/golang-examples

浙公網安備 33010602011771號