很久很久以前,有一台神奇的機器···

語言: CN / TW / HK

計算機

很久很久以前,有一台機器,體型巨大,每秒鐘可以進行幾千次的加法運算,名震一時,人類給它取了個名字:計算機。

除了加法,它還能計算平方、立方、正弦、餘弦,比人類的大腦算得快多了。

許多程序慕名而來,想在它上面運行一下,體會這飛一般的感覺。

“來來來,排好隊,一個一個來”,計算機的管理員説到。

眾程序挨個排好隊,等待管理員傳喚。

執行完一個,管理員再將其取出,換上下一個開始執行。

久而久之,程序們紛紛抱怨:排隊十分鐘,執行三秒鐘。人類管理員太慢了,時間都用在排隊上了,能不能讓計算機自動完成程序切換,不要手動切換?

人工操作的速度比起計算機實在是慢太多了,人機矛盾日益凸顯,人類決定對機器重新進行設計,並且開發了一個控制程序,在它的指揮下,可以批量執行程序,自動實現切換,不用再需要人工介入了,效率提高了不少。

多道程序處理

慕名而來的程序越來越多了,等待執行的隊伍排的越來越長。

有些程序等的不耐煩了,詢問控制程序:“大哥,你看前面那傢伙在做輸入輸出,CPU給空出來了,一時半會兒用不上,這不是浪費嗎,要不叫下一個上去執行吧”

控制程序皺着眉頭説到:“那怎麼行,前面程序執行的數據都在內存裏放着了,再放程序進去,要是弄壞了誰負責?再説CPU只有一個,前面的程序忙完輸入輸出回來了又該如何處理?”

大家一時語塞,誰也給不出主意,紛紛歎氣,只好作罷,繼續等待。

不過聰明的人類倒是發現了這問題:讓一個程序獨佔計算機確實浪費資源,執行輸入輸出的時候,CPU就空着了,執行計算操作的時候,輸入輸出設備又閒着了,總有一個閒着。

於是人類又重新設計了計算機,並開發了新版的控制程序,這一次,允許多個程序同時進入計算機執行了。

如果程序A執行輸入輸出,就把CPU空出來讓給另一個程序B執行,一會兒B再執行輸入輸出,再把CPU分給A執行,彼此交替,這樣一來就不會浪費了!

時間分片

不過沒多久,又出現了新的問題。

這一天,其他程序都在排隊等待控制程序翻牌子,可左等右等也不見傳喚,眾程序急了,質問控制程序,控制程序大倒苦水:“前面那個傢伙寫了個死循環,死活結束不了啊!”

聽他這麼一説,眾程序都怒了。

“怎麼能這樣,這也太自私了”

“你這控制程序也不管管,要你有何用?”

“趕緊想辦法啊!”

“我也沒辦法,他不執行輸入輸出,我也拿不到CPU的控制權,拿他沒有辦法啊”,控制程序歎氣説到。

眾程序七嘴八舌,吵的是不可開交。

敏感的人類又一次發現了這個問題,好一通研究,搞了一個叫“中斷”的技術出來:可以給CPU發送中斷信號,CPU收到信號後,就得停下手頭的工作,轉而執行控制程序處理中斷信號,這樣控制程序就有辦法獲得控制權了!

為了能夠讓控制程序及時獲得控制權,人類搞了一箇中斷源,週期性的給CPU發送中斷信號,並把這叫做時鐘中斷。

升級後的控制程序又上崗開始工作了,眾程序聞風而來。

“大哥,聽説你又升級了,這一次改了啥,可以搞定死循環的程序嗎?”,一個程序問道。

“大家排好隊,聽好了,現在按照時間片來劃分了,每個程序一次只有一小段時間,時間一用完我就得請他出來,讓別的程序來了”

“那要是時間到了,我還沒執行完可咋辦呢?”

“大家不用擔心,都是輪着來的,等下一輪又有機會執行了”,控制程序解釋道。

“我們這麼多程序,輪到下一輪,那不得等好久”

“這台計算機從裏到外都升級過了,別看它個頭變小了,裏面都是大規模集成電路了,執行速度可比之前的大塊頭快了不少,每秒能執行幾十萬次運算呢~你們還沒感覺到就轉了一圈回來了”

眾程序聽後一片譁然,“幾十萬,我的乖乖!這也太快了,快讓我們體驗一下”

説完,大家都摩拳擦掌排好隊,準備登上這台升級後的計算機運行。

果不其然,這升級後的計算機跑起來那叫一個快,有了時鐘中斷,控制程序總能按時獲得CPU的控制權,在背後默默控制着程序們的運行,眾程序絲毫感覺不到自己曾經停止過。

狀態

不過,計算機速度雖然變快了,但慕名而來的程序也更多了,這些程序的功能也越來越複雜。

漸漸的,程序們不再滿足於現狀,開始出現了新的問題。

有些程序在sleep,有些程序在同步等待,白白浪費了時間片,大夥向控制程序提出了抗議,控制程序卻説對待所有程序要一視同仁,要講公平,大夥當面不敢説,背後卻罵他不作為。

控制程序把這個問題反饋給了人類,聰明的工程師又開始琢磨:所有程序都排成一個隊來輪轉確實有些欠妥,得給這些程序劃分成不同的狀態,只有準備就緒的程序才有資格執行。

人類一口氣搞了好些個任務狀態出來,創建、就緒、運行、阻塞、終止···

控制程序一下變得複雜起來,原來只要挨個傳喚執行就行,現在還得記錄他們的狀態,選擇合適狀態的程序來運行,工作量增加了不少。

優先級

本以為這麼一改,大家就會滿意了,沒想到有幾個老油條私下找到控制程序:“老哥,咱們幾個程序對實時性要求比較高,能不能給咱們整個VIP隊列,別跟他們一起排,優先執行我們?”

控制程序一聽臉都綠了,斷然拒絕。

其中有一個傢伙説到:“我們幾個程序可是非常重要的,要是延誤了時間,你能擔待的起嗎?”

沒辦法,控制程序只能再次反饋給人類。工程師一想,倒也是,所有程序都是同樣的優先級,確實太草率了。

工程師再一次升級了控制程序,這一次,不僅劃分了任務狀態,還設定了不同的優先級,劃分了不同的隊伍,讓程序們去各自優先級所在的隊伍排隊,優先執行高優先級的程序。

不僅如此,如果有高優先級的程序出現,即使低優先級程序的時間片還沒用完,也會被剝奪執行機會,工程師把這叫做搶佔。

不過,這一次的改動,控制程序把大傢伙都蒙在了鼓裏,要是知道他們還被劃分了三六九等,估計得鬧翻天。

經過這一輪改動,大家總算過了一段清靜日子。

多核時代

硬件技術發展的太快了,有一天,人類激動的告訴控制程序:現在CPU裏面有多個核心了,可以真正同時執行多個程序了,我們決定再次對你升級!

可對於控制程序來説,這可不是什麼好消息,本來一個核的程序調度管理已經讓他夠忙活的了,現在來了多個核,這調度管理任務就更復雜了。原來只是多個優先級的隊列,現在每個核都得搞一套,真是想想都頭大了。

人類開始對控制程序大動手術,把它變得越來越複雜,功能也越來越強大。

最後,還給他取了一個新的名字:操作系統。