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