很高興見到你!安全
上一期我在掘金髮表了《重學安卓: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.操做系統是對硬件的一層封裝,上層應用直接與操做系統接口打交道,便可間接地調動硬件資源來完成工做。
這樣說,你理解了嗎?
看不過癮?這裏只爲你 而準備了一份 簡潔有力的 《重學安卓》認知地圖 😉