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

前言

很高興見到你!安全

上一期我在掘金髮表了《重學安卓:Activity 的快樂你不懂!》,本來只是想給你們一把進階的鑰匙,可以由於文章從 0 到 1 的介紹,而對顯示系統你們族 創建起感性的認識、而且埋下好奇的種子 去推進本身繼續探究,沒想到公衆號後臺 有很多讀者追問是否還有後續。網絡

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

平心而論,我比較傾向於 「從 0 到 1」 的這種思考。一上來就討論技術細節的話,對我來講也是件很摸不着頭腦的事。分佈式

因此在開放場合,我清一色地是以 「從 0 到 1」 和你們見面,也但願大家能記得, KunMinX 就是 「專好這口」 的那個做者 ~oop

好了,今天的主題是介紹操做系統的緣起。爲何會想起介紹這個呢?post

問問你身邊的同事或朋友,他們對於操做系統的認識到底有多少?爲何咱們作軟件開發的,要認識操做系統?性能

或者說,到底在什麼狀況下,纔會涉及到操做系統知識?——操作系統

好比,你是否原覺得 Android 應用層開發 根本涉及不到什麼底層的概念,沒想到 在分析 Looper 時,對進程阻塞的概念不解,致使沒法理解爲何死循環不會致使 ANR?設計

又好比在 Android 中,一個 App 一般是一個進程,App 間的組件通訊,靠的就是進程間通訊,因此若是不明白進程,你是否有辦法理解爲何存在進程間通訊?3d

再好比,像 「雙緩衝」 或 「內存抖動」 這些概念,是幾十年前就存在的操做系統概念,是大學教科書上就有的東西,並非安卓平臺獨有的。因此當有人拿着這些名詞向你臭顯擺的時候,你是否可以嗤之以鼻?

不過呢,在介紹任何事物以前,我仍是會以事物的緣起作開頭,因此本文的目標就是介紹操做系統的緣起。

若是閱讀完本文,你對操做系統的緣起、發展,和做用 有了最基本的感性的認識,那個人願望也就達到了。

不得不先講的背景原因

1946 年到 50 年代中期,計算機還處於手工操做方式,此時尚未出現操做系統。

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

那到底是有多嚴重、有多不充分呢?下面我拿具體的客觀數據,來爲你奠基一下感性的認識:

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

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

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

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

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

將做業運行的全流程交給批處理系統來監控和調度,也即解放過程當中幾乎全部的人力操做,實現自動化。

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

但並無解決:在做業的輸入和輸出時、CPU 仍處於忙等狀態、等待慢速的輸入輸出設備完成工做。

第二次改革:脫機批處理系統

將輸入輸出設備與主機分離,經過轉換器將輸入機的數據事先讀取到高速磁帶,並將高速磁帶用於 CPU 的計算,計算結果也存放在高速磁帶中,經過轉換器將數據經過輸出機輸出。

因此能夠理解爲,高速磁帶就是內存的雛形,由轉換器將輸入輸出設備的數據轉換並讀寫在高速磁帶上。這樣,主機並不直接與慢速的輸入輸出設備打交道,而是與高速的磁帶發生關係,如此便 有效緩解了主機與外設的矛盾

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

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

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

將多個程序同時放入內存中,當一個程序執行完了、或請求 IO 操做時,就會切換到另外一個程序繼續執行,而不讓 CPU 忙等。

多個程序之間在微觀上來看是串行,但因爲此處的串行不包含 IO 操做,於是 大大縮短了總體時間

而且又因爲各自都未執行完,於是宏觀上來看多道程序又是在併發執行。

(進程和空間隔離的概念也是這個時期出現的,讓多道程序處於不一樣的內存空間,讓數據更加安全和穩定。)

因而,在批處理系統和多道程序設計技術的基礎上,演化出多道批處理系統。特色是:

1.多道:系統能夠同時容納多個做業,做業以隊列的方式存放於外設中,系統將做業讀取到內存中運行並最終輸出結果,整個過程是個自動轉接的、連續的做業流。

2.成批:系統運行過程當中,用戶沒法干預,沒法與之交互,必須等待運行完成。

因此多道批處理系統 解決了「吞吐量和資源利用率」的問題,以及實現做業流程的自動化。

但缺點是:沒法實現人機交互,並且到目前爲止,計算機還是獨佔的。

背景變遷

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

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

分時系統

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

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

而且 此時的系統是 可交互、且及時響應交互的。用戶可在系統對上一個請求做出響應的基礎上,再次發出新的請求。

(對換存儲等概念也是這個時候出現的。分時系統能夠同時接納數百個用戶。因爲內存空間有限,每每採用 對換方式 的存儲方法,將未輪到的做業先放入磁盤,一旦輪到再放入內存,而時間片一用完,又將做業存回磁盤,使同一內存區域輪流爲多個用戶服務。)

實時系統

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

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

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

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

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

通用操做系統

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

進一步發展

我的操做系統、網絡操做系統、分佈式操做系統等。

綜上

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

2.含分時特性的操做系統能夠 與用戶發生交互、響應用戶的操做

3.含實時特性的操做系統能夠 實時響應事件、或動態獲取最新信息

4.操做系統是對硬件的一層封裝,上層應用直接與操做系統接口打交道,便可間接地調動硬件資源來完成工做。

這樣說,你理解了嗎?

xzl短

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

相關文章
相關標籤/搜索