真香警告:即使不學 OS 進階,也請務必收藏好該文!

KunMinX發表於2019-06-05

前言

很高興見到你!

上一期我在掘金發表了《重學安卓:Activity 的快樂你不懂!》,原本只是想給大家一把進階的鑰匙,能夠因為文章從 0 到 1 的介紹,而對顯示系統大家族 建立起感性的認識、並且埋下好奇的種子 去推動自己繼續探究,沒想到公眾號後臺 有不少讀者追問是否還有後續。

關於這個問題呢,不要慌,答案就在文章的末尾。

平心而論,我比較傾向於 “從 0 到 1” 的這種思考。一上來就討論技術細節的話,對我來說也是件很摸不著頭腦的事。

所以在開放場合,我清一色地是以 “從 0 到 1” 和大家見面,也希望你們能記得, KunMinX 就是 “專好這口” 的那個作者 ~

真香警告:即使不學 OS 進階,也請務必收藏好該文!

好了,今天的主題是介紹作業系統的緣起。為什麼會想起介紹這個呢?

問問你身邊的同事或朋友,他們對於作業系統的認識到底有多少?為什麼我們做軟體開發的,要認識作業系統?

或者說,到底在什麼情況下,才會涉及到作業系統知識?——

比如,你是否原以為 Android 應用層開發 根本涉及不到什麼底層的概念,沒想到 在分析 Looper 時,對程式阻塞的概念不解,導致無法理解為什麼死迴圈不會導致 ANR?

真香警告:即使不學 OS 進階,也請務必收藏好該文!

又比如在 Android 中,一個 App 通常是一個程式,App 間的元件通訊,靠的就是程式間通訊,所以如果不明白程式,你是否有辦法理解為什麼存在程式間通訊?

再比如,像 “雙緩衝” 或 “記憶體抖動” 這些概念,是幾十年前就存在的作業系統概念,是大學教科書上就有的東西,並不是安卓平臺獨有的。所以當有人拿著這些名詞向你臭顯擺的時候,你是否能夠嗤之以鼻?

真香警告:即使不學 OS 進階,也請務必收藏好該文!

不過呢,在介紹任何事物之前,我還是會以事物的緣起做開頭,所以本文的目標就是介紹作業系統的緣起。

如果閱讀完本文,你對作業系統的緣起、發展,和作用 有了最基本的感性的認識,那我的願望也就達到了。

不得不先講的背景緣由

1946 年到 50 年代中期,計算機還處於手工操作方式,此時還沒有出現作業系統。

作業系統最開始的出現,是為了解決 CPU 運算資源利用嚴重不充分的問題。

真香警告:即使不學 OS 進階,也請務必收藏好該文!

那究竟是有多嚴重、有多不充分呢?下面我拿具體的客觀資料,來為你奠定一下感性的認識:

1.從第一代計算機開始,CPU 的運算速度 就已遠遠超過人類,達到每秒 5000 次加法運算。因而任何手工操作在其看來都是度日如年、巨慢無比。

2.第一代計算機的輸入輸出裝置和主機是一體的,計算機需要通過輸入裝置接收 穿孔紙帶 來讀取程式,因而每次上機,整臺計算機是一個上機人員獨佔的。並且在上機人員上紙帶時,CPU 是處於等待狀態

3.第一代計算機的 CPU 是由電子管構成,電子管 每隔 6 分鐘就可能燒壞一個

真香警告:即使不學 OS 進階,也請務必收藏好該文!

綜上,早期計算機的上機成本十分高昂,為了解決 CPU 運算資源利用不充分的問題(或者說彌補巨慢的輸入輸出和巨快的運算速度之間的巨大鴻溝),先後做了 3 次改革。

第一次改革:聯機批處理系統

將作業執行的全流程交給批處理系統來監控和排程,也即解放過程中幾乎所有的人力操作,實現自動化。

真香警告:即使不學 OS 進階,也請務必收藏好該文!

如此一來,便 解決了“人機矛盾”,節省了輸入輸出操作和運算操作之間的切換時間間隙。

但並沒有解決:在作業的輸入和輸出時、CPU 仍處於忙等狀態、等待慢速的輸入輸出裝置完成工作。

第二次改革:離線批處理系統

將輸入輸出裝置與主機分離,通過轉換器將輸入機的資料事先讀取到高速磁帶,並將高速磁帶用於 CPU 的計算,計算結果也存放在高速磁帶中,通過轉換器將資料通過輸出機輸出。

真香警告:即使不學 OS 進階,也請務必收藏好該文!

所以可以理解為,高速磁帶就是記憶體的雛形,由轉換器將輸入輸出裝置的資料轉換並讀寫在高速磁帶上。這樣,主機並不直接與慢速的輸入輸出裝置打交道,而是與高速的磁帶發生關係,如此便 有效緩解了主機與外設的矛盾

但此時仍沒有解決的是:當一個程式執行到一半,發出 IO 請求時,CPU 便不得不等待 IO 操作完成。

第三次改革:多道批處理系統

此時出現了多道程式設計技術:

將多個程式同時放入記憶體中,當一個程式執行完了、或請求 IO 操作時,就會切換到另一個程式繼續執行,而不讓 CPU 忙等。

多個程式之間在微觀上來看是序列,但由於此處的序列不包含 IO 操作,因而 大大縮短了整體時間

並且又由於各自都未執行完,因而巨集觀上來看多道程式又是在併發執行。

(程式和空間隔離的概念也是這個時期出現的,讓多道程式處於不同的記憶體空間,讓資料更加安全和穩定。)

真香警告:即使不學 OS 進階,也請務必收藏好該文!

於是,在批處理系統和多道程式設計技術的基礎上,演化出多道批處理系統。特點是:

1.多道:系統可以同時容納多個作業,作業以佇列的方式存放於外設中,系統將作業讀取到記憶體中執行並最終輸出結果,整個過程是個自動轉接的、連續的作業流。

2.成批:系統執行過程中,使用者無法干預,無法與之互動,必須等待執行完成。

所以多道批處理系統 解決了“吞吐量和資源利用率”的問題,以及實現作業流程的自動化。

但缺點是:無法實現人機互動,而且到目前為止,計算機仍是獨佔的。

背景變遷

20世紀60年代初,電晶體的出現,使 CPU 在大幅降低耗能、體積和損毀率的同時,效能大幅提升。這使得計算機的背景環境發生了變化。

真香警告:即使不學 OS 進階,也請務必收藏好該文!

再加上前 3 次改革的目標是解決資源利用率和吞吐量的問題,而沒有解決計算機獨佔的問題,因而促成了分時系統的出現,來 解決計算機獨佔的問題,並且讓彼時的系統能與使用者發生互動。

分時系統

分時技術的特點:把 CPU 的執行時間分成很短的時間片,按時間片輪流把 CPU 分配給各聯機作業使用。在一個時間片內不能執行完,則時間一到,任務暫時中斷,切換給另一作業使用,直到下一次再輪到自己。

此時的一個典型應用就是 多個終端共享一臺主機。巨集觀上看好像是並行執行,微觀上看其實是輪流序列執行。並且終端之間獨立運作、互不干擾。

真香警告:即使不學 OS 進階,也請務必收藏好該文!

並且 此時的系統是 可互動、且及時響應互動的。使用者可在系統對上一個請求作出響應的基礎上,再次發出新的請求。

(對換儲存等概念也是這個時候出現的。分時系統可以同時接納數百個使用者。由於記憶體空間有限,往往採用 對換方式 的儲存方法,將未輪到的作業先放入磁碟,一旦輪到再放入記憶體,而時間片一用完,又將作業存回磁碟,使同一記憶體區域輪流為多個使用者服務。)

實時系統

雖然 多道批處理系統 和 分時系統 分別解決了 資源利用率 和 系統響應 的問題,但卻不能滿足 實時控制實時資訊處理 這兩個應用領域的需求。

於是就產生了實時系統,可以及時響應隨機發生的外部事件,並在嚴格的時間內完成對事件的處理。

真香警告:即使不學 OS 進階,也請務必收藏好該文!

1.實時控制系統:比如飛機飛行、導彈發射的自動控制。

2.實時資訊處理系統:比如查詢航班、航線、票價等實時資訊。對實時性的要求稍弱於第一種。

特點:及時響應,高可靠性。

通用作業系統

複合了 多道批處理系統、分時系統、實時系統,也即包含其中兩種或三種特性的系統。

進一步發展

個人作業系統、網路作業系統、分散式作業系統等。

綜上

1.作業系統的出現,最初是為了 解決資源利用率和吞吐量的問題。(因為打從一開始,CPU 的速度就已一騎絕塵,讓人類和外設無以望其項背。CPU 的巨快,是導致作業系統的出現,乃至 “多道程式設計”、“分時複用技術” 這些 “騷操作” 得以存在的最根本的緣由。)

2.含分時特性的作業系統可以 與使用者發生互動、響應使用者的操作

3.含實時特性的作業系統可以 實時響應事件、或動態獲取最新資訊

4.作業系統是對硬體的一層封裝,上層應用直接與作業系統介面打交道,即可間接地調動硬體資源來完成工作。

這樣說,你理解了嗎?

xzl短

看不過癮?這裡只為你 而準備了一份 簡潔有力的 《重學安卓》認知地圖 ?

相關文章