清晰!一起穿梭操作系統(tǒng)歷史
本文轉(zhuǎn)載自微信公眾號「ConeZhang」,作者Cone。轉(zhuǎn)載本文請聯(lián)系ConeZhang公眾號。
你好,我是 Cone。
首先,我們思考一個問題。
為什么會有操作系統(tǒng)?
在我們教科書上會提到分時系統(tǒng)、批處理系統(tǒng)等等現(xiàn)代操作系統(tǒng)前的中間產(chǎn)物,也會講到管理硬件的功能,但似乎沒有講到為什么有操作系統(tǒng)這個東西,誕生操作系統(tǒng)是為了解決什么樣的問題?下面就來通俗易懂的聊聊為什么有這個東西。
假設(shè)在遠古時代的計算機需要由人工進行運行操作,但是運行期間又不需要更多的人為干預(yù),這個時候人就空閑下來了,但是計算機被這個任務(wù)占據(jù)了,啥也干不了,白白的浪費時間(程序員的工資那么高,時間這么浪費了的話,損失慘重!),而且對于計算機的核心部件 CPU 來說,并不是一直有數(shù)據(jù)可以來運行,也有對于其他部件的操作等待,比如 IO 操作,在等待 IO 的時間里特別漫長,這就浪費了寶貴的 CPU 資源。所以這樣的計算機運行狀況是非常低效的,那么操作系統(tǒng)解決的一個問題就是提高效率,提高 CPU 的使用率,不讓 CPU 休息,瘋狂壓榨它!!!
同時,計算機操作人員直接操作計算機硬件的話,非常麻煩,還容易出錯,所以人們總是尋求一些辦法來解決現(xiàn)有問題,這種解決問題的方法論在哪個學(xué)科都成立,既然麻煩,那何不根據(jù)計算機領(lǐng)域哲學(xué)方法論:添加一個中間層來解決現(xiàn)有問題,那么操作系統(tǒng)就是相對于硬件的中間層。它的出現(xiàn)就屏蔽了底層硬件的細節(jié),從而讓出錯的概率大大降低,以及讓計算機操作人員更加順風(fēng)順?biāo)牟僮?,程序也開始可以被操作系統(tǒng)自動管理。
上面提到的兩個問題可以歸結(jié)于三個字:自動化。程序員總是趨向于追求自動化,比如自動化測試等等。自動化有什么好處呢?借用一句工業(yè)革命時期的話那就是:解放生產(chǎn)力。代替那些重復(fù)性工作。
所以操作系統(tǒng)的出現(xiàn)也可比喻成生產(chǎn)力的解放,使得程序運行更加高效。
既然我們知道了需要這么一個操作系統(tǒng)來進行自動化運行,那么什么是操作系統(tǒng)呢,為什么叫操作系統(tǒng)而不叫管理系統(tǒng)或者其他名字呢?
什么是操作系統(tǒng)?
操作系統(tǒng)的英文名為:Operating Systems. 翻譯為操作系統(tǒng),操作二字有點流水線工人操作員的意味,是不是感覺有點土。這么理解的話,那就有些許偏差了,再來一個英語詞匯:Operating Surgeon. 這個詞匯的意思是主刀大夫. 主刀大夫是什么人物?在整個手術(shù)室里是權(quán)威呀,說上麻藥,麻醉師馬上就位,說要 xx 手術(shù)刀,助理大夫馬上送到,是主宰手術(shù)室一切的人物。所以操作系統(tǒng)就是主宰一切的系統(tǒng),計算機體系世界里的一把手。
那么操作系統(tǒng)主宰的一切,這一切包含什么呢?
當(dāng)然是計算機上里發(fā)生的一切事情。在最原始的計算機并沒有操作系統(tǒng),而是直接由人來掌控事情,即所謂的單一控制終端、單一操作員模式。但是隨著計算機復(fù)雜性的增長,人已經(jīng)不能勝任直接掌控計算機了。于是我們編寫出操作系統(tǒng)來掌控計算機,將人類從日益復(fù)雜的掌控任務(wù)中解脫出來。
所以明確的說操作系統(tǒng)就是 掌控計算機一切的舵主,權(quán)威至上。
我們知道操作系統(tǒng)管理計算機的一切,那操作系統(tǒng)具體管理哪些東西?
操作系統(tǒng)管理哪些東西?
還是來張圖已顯得更加清晰。如下圖。操作系統(tǒng)的 4 個核心管理,當(dāng)然還有其他的一些安全性管理等等。
如圖,第一個是進程管理,管理要素包含三個:第一個是公平,即每個程序都有機會被 CPU 執(zhí)行。第二個是非阻塞,任何一個程序不能無限制的阻塞 CPU 給其他程序執(zhí)行。如果一個程序在運行過程中需要輸入輸出或者因別的什么事情而發(fā)生阻塞,這個阻塞不能妨礙其他進程繼續(xù)運行。第三個是優(yōu)先級,CPU 也是分優(yōu)先級的,也就說優(yōu)先級高的進程會首先被 CPU 執(zhí)行,都優(yōu)先級其次。
內(nèi)存管理主要是管理緩存、主存、磁盤、磁帶等存儲介質(zhì)所形成的內(nèi)存架構(gòu)。為實現(xiàn)這一內(nèi)存架構(gòu),設(shè)計了虛擬內(nèi)存這一層結(jié)構(gòu),即將物理內(nèi)存擴充到外部存儲介質(zhì)上。這樣內(nèi)存的空間就大大地增加了,能夠運行的程序的大小也大大地增加了。內(nèi)存管理的另一個目的是讓很多程序 共享同一個物理內(nèi)存。這就需要對物理內(nèi)存進行分割和保護,不讓一個程序訪問另一個程序所占的內(nèi)存空間。
外存管理通常也稱為存儲管理,它也就是文件系統(tǒng)管理了。文件系統(tǒng)的主要目的是將磁盤變成一個很容 易使用的存儲媒介以提供給用戶使用。這樣我們在訪問磁盤時無須了解磁盤的物理屬性或數(shù)據(jù)在磁盤上的精確位置,諸如磁道、磁柱、扇面等。當(dāng)然,文件系統(tǒng)還可以建立在光盤和磁帶上。只是使用最為頻繁的文件 系統(tǒng)都以磁盤為介質(zhì)。
I/O 管理也稱為設(shè)備管理,就是管理輸入輸出設(shè)備。I/O 管理的目的有兩個:一是屏蔽不同設(shè)備的差異性,即用戶用同樣的方式訪問不同的設(shè)備,從而降低編程的難度,你要知道目前存在有上萬種 IO 設(shè)備,每個 IO 設(shè)備的適配都是在這里進行的,這是抽象和封裝的魅力;二是提供并發(fā)訪問,即將那些看上去并不具備共享特性的設(shè)備(如打印機等)變得可以共享。
上面三個問題,我們走進了操作系統(tǒng)的世界,了解了操作系統(tǒng)為何而來,它又在干些什么,下面還是來進入主題,操作系統(tǒng)歷史,那么操作系統(tǒng)到底經(jīng)歷了些什么呢?老規(guī)矩:一圖勝千言。
我們就從萌芽階段的狀態(tài)機系統(tǒng)來講起。
第一階段:狀態(tài)機系統(tǒng)
狀態(tài)機系統(tǒng)是計算機在萌芽階段出現(xiàn)的,也就是大概 1940 年以前。其實這種系統(tǒng)其實都不能算做操作系統(tǒng),因為他就是一種簡單的狀態(tài)轉(zhuǎn)換程序,通過特定的輸入和特定的狀態(tài)進行轉(zhuǎn)換。能做的計算也非常簡單,也就僅限于加減法,也不支持命令交互等等功能。當(dāng)然,它有一個非常大的好處,沒有安全風(fēng)險,沒幾個人能接觸到它,自然就不存在安全問題了。
第二階段:單一控制系統(tǒng)
學(xué)過計算機導(dǎo)論的話,你應(yīng)該了解計算機領(lǐng)域的的經(jīng)典模型——馮若依曼體系結(jié)構(gòu)原理,它是 1945 年左右提出的,屬于這個時期,那還記得我們?nèi)澜绲牡谝慌_電子計算機是什么時候出現(xiàn)的嗎?沒錯,也是這個時期出現(xiàn)的,時間是 1946 年 2 月,誕生在美國的賓夕法尼亞大學(xué),名稱叫做 ENIAC。
這臺電子計算機其實沒有搭載所謂的操作系統(tǒng),他只是提供了一些標(biāo)準(zhǔn)的命令給用戶使用,這些標(biāo)準(zhǔn)的命令集就構(gòu)成了原始的操作系統(tǒng) SOSC(System Operation Support Center)。這些 SOSC 滿足了系統(tǒng)運行的基本功能,提供人機交互功能,在這種情況下,任何時刻卻只能做一件事,不支持并發(fā)也不支持多道程序設(shè)計。在這種系統(tǒng)下的資源利用率很低很低,你輸入一個命令它就執(zhí)行一次,類似于撥一下就動一下,但是動的拿一下又全部占用計算機。這種情況,我們可以理想成只有一個程序能運行。從機器的角度出發(fā),時時刻刻都要等著人來操作,效率真的太低了,詳細情況看看下圖更清晰。
多個人需要使用這臺計算機,指令就會斷斷續(xù)續(xù),就會影響效率,就算是一個人輸入多個命令,相比于計算機來講,人輸入的指令速度也會很慢。
那有沒有不等人的操作讓其自己執(zhí)行呢?隨著計算機的發(fā)展那當(dāng)然有了,接下來就打破這種過于笨拙的情況,來到自動化一點的時代。
第三階段:批處理系統(tǒng)
在仔細考察了 SOSC 后,人們發(fā)現(xiàn),SOSC 效率之所以低下,是因為計算機總是在等待人的下一步動作,而人的動作總是很慢。因此,人們覺得,如果去掉等待人輸入命令的時間,即讓所有的人先想好自己要運行的命令構(gòu)成一個程序,然后列成一個清單,打印在紙帶上,然后交給一個操作人員來一批一批地處理,效率不就提高了嗎?這樣就形成了批處理操作系統(tǒng)。這是又大大提高單一控制終端的操作系統(tǒng) SOSC 的效率。
顯然,在這種工作模式下,系統(tǒng)的功能得到了提升,必然復(fù)雜性也隨之提升,在這種系統(tǒng)下,用戶只管把程序放在磁帶上,用戶自己可以不在場而去干別的,接下里就是由操作員操作批處理系統(tǒng)來處理一個個任務(wù),處理完了就給出結(jié)果。最早的自動化處理雛形出現(xiàn)了。但是這個時候也只能一個個任務(wù)處理,一個任務(wù)讀取 IO 的時候 CPU 就等待下來了,還是在一定程度上會影響 CPU 運行的效率,有沒有辦法再提高一些呢。這個時候就抓住了 CPU 和 I/O 設(shè)備運行時串行的這點,做了文章。
第四階段:多道批處理系統(tǒng)
先來看看單道批處理下的 CPU 與 IO 運行關(guān)系,如圖。
當(dāng) IO 操作的時候,CPU 會等待 IO 操作的結(jié)果,結(jié)果返回后才會繼續(xù)執(zhí)行程序,我們可以認為這個時候程序是串行的。由于 I/O 設(shè)備的運行速度相對于 CPU 來說實在太慢,這種讓高速設(shè)備等待低速設(shè)備的狀況無法接受。那能不能將 CPU 和 I/O 進行并發(fā)呢?即在一個程序輸入輸出時,讓另一個程序繼續(xù)執(zhí)行。換句話說,能不能將 CPU 運行和 I/O 設(shè)備的運行重疊起來而改善整個系統(tǒng)的呢?答案是肯定的,我們可以設(shè)計將多個程序同時加載到計算機內(nèi)存里,以前內(nèi)存里只有一個程序,而現(xiàn)在有多個程序在運行,從而就出現(xiàn)了多道批處理操作系統(tǒng)。這是一個劃時代的操作系統(tǒng),開始從原來串行執(zhí)行任務(wù),到并發(fā)執(zhí)行任務(wù),大大提高了 CPU 的使用率,具體如圖。
這樣 CPU 就開始被任一時刻都用起來了,不會讓它再次打盹了。這兩個階段都是可以為圍繞如何提高 CPU 運行效率來優(yōu)化??梢园l(fā)現(xiàn),在程序 1 要讓出 CPU 的時候,那么到底是讓程序 2 執(zhí)行呢,還是程序 n 執(zhí)行呢,這就涉及到 CPU 運行時間如何分配問題,隨著發(fā)展,我們又有了分時運行的方案。
第五階段:分時系統(tǒng)
多道批處理操作系統(tǒng)的出現(xiàn)使計算機的效率(主要是吞吐率)大大提高。不過批處理系統(tǒng)這里有一個很大的問題,寫程序的人需要交給一個計算機操作人員來執(zhí)行程序,對于結(jié)果等全部執(zhí)行完了之后才知道,也不能知道執(zhí)行步驟,這顯然也是低效且很難接受的。萬一這個計算機操作人員操作失誤或者忘記了呢,所以這個時候就得提出人人都可以擁有計算機的使用權(quán),從而去考慮 CPU 資源怎么分配,這就是分時系統(tǒng),給每個用戶分配的時間是均等份的。即分給每個人有限的時間,只要時間到了,就換一個進程。這種時分切換下的操作系統(tǒng)就是分時操作系統(tǒng)。在這種系統(tǒng)下,用戶就可以自己調(diào)試程序,這里就相當(dāng)于有多個程序并發(fā)的在執(zhí)行,只要我們將 CPU 切換的時間無限細分,那么每個用戶就會感覺獨自占有計算機資源一樣,這樣的運行模式下就是有多個程序一起執(zhí)行,也就是我們現(xiàn)代操作系統(tǒng)里的進程并發(fā)概念。詳細情況如圖。
A,B,C,D 四個程序依次在 CPU 上執(zhí)行,如果將每等分無限細分,就好像 A,B,C,D 四個程序自己一個人獨占 CPU 資源一樣,這也就出現(xiàn)了程序執(zhí)行的并發(fā)現(xiàn)象,這是一個假象,只是執(zhí)行速度太快,人類無法感知而已。
在分時系統(tǒng)下,操作系統(tǒng)的復(fù)雜性開始大大提高,還會涉及到資源互斥、進程通信死鎖、保護等問題,復(fù)雜性指數(shù)可以說是增長超快了。
那么在分時系統(tǒng)下,每個進程獲得 CPU 的執(zhí)行時間是公平的,不存在偏差,這就會導(dǎo)致一個問題,比如我輸入單詞這么一個操作,不可能等 CPU 執(zhí)行權(quán)限來到了才能執(zhí)行吧,得及時響應(yīng),不然的話,用戶體驗極其差評!所以就出現(xiàn)了實時系統(tǒng)。
第六階段:實時系統(tǒng)
隨著計算機技術(shù)的進步,產(chǎn)生了一種需求:有一個程序需要在需要運行的時候馬上運行,而不能等到分時輪到這個進程執(zhí)行,比如現(xiàn)在的鼠標(biāo)、鍵盤等輸入性操作,在不破壞操作系統(tǒng)原有運行體系下,需要響應(yīng)這些事件。也就是計算機對這些事件必須在規(guī)定的事件內(nèi)做出響應(yīng),這就是實時系統(tǒng),詳細情況如下圖。
這個時候響應(yīng)事件的優(yōu)先級最高,CPU 會優(yōu)先處理這些高優(yōu)的事件,也就是有了實時被處理的感覺。
第七階段:現(xiàn)代操作系統(tǒng)
1980 之后,就開始進入現(xiàn)代操作系統(tǒng)時代了,計算機工業(yè)開始迅速騰飛,出現(xiàn)了 DOS,Windows,MacOS 主流操作系統(tǒng),總結(jié)了前面各個階段的優(yōu)缺點,發(fā)展了現(xiàn)代操作系統(tǒng),同期也出現(xiàn)了 PC 機,計算機算力開始大大提高,后來又出現(xiàn)網(wǎng)絡(luò),分布式操作系統(tǒng)又得到了發(fā)展。
在操作系統(tǒng)的歷史演進過程中,我們可以發(fā)現(xiàn)基本上是圍繞如何提高 CPU 效率這個方向來進行,讓 CPU 不打盹是我們的目標(biāo),圍繞這個點來看計算機發(fā)展史,非常能理解當(dāng)前時代出現(xiàn)了什么問題,如何去解決問題。
最后
我們生活在一個最好的時代,這個時代只要你動動手就能獲取你想要了解的信息。一起享受這個時代所帶來的的便捷吧!