外甥問我什麼是作業系統?

外甥上大一了,起初我還非常擔心他,擔心主要有兩方面的原因:

從小一直是校草,長的

太帥

,會不會天天談戀愛去了

擔心在大學沒能做好自己的規劃

於是經常和他影片聊天,外甥小我沒幾歲,我們經常以兄弟相稱,聊起來自然和諧

從我這幾次和他聊天可以看出,我的擔憂有些太過了

他好像從沒刻意他的帥氣,而是不斷的充實自己的才華,籃球打得好、街舞跳的好、還去參加各種志願者活動

關鍵是最近還對

計算機

產生了強烈的興趣。

唉,帥就算了,還這麼認真,這年輕人不講武德啊

上週末打電話,竟然問我什麼是作業系統? 為什麼要有作業系統?

於是就有了這篇文章,也準備把我外甥的計算機相關疑問全部承包了,喜歡我記得關注我 公號

龍躍十二

外甥問我什麼是作業系統?

喜歡我幾個關注我

什麼是作業系統?

說實話很難有一個準確的定義去描述作業系統,看了多本關於作業系統的書中是這樣說的。

作業系統是一個執行在核心態的軟體,該軟體對底層各種硬體資源做了抽象和管理,並提供統一的API介面供應用程式去呼叫這些資源。

這句話涵蓋了好幾個知識點

作業系統是一個軟體

作業系統軟體執行在

核心狀態

下的軟體,不在使用者態下,應用開發者開發的各種系統軟體都是在使用者態下執行的

撒是使用者態,撒是核心態?你很喜歡剖根問底,這個後面再說

對各種底層

硬體資源

進行了

抽象

管理

抽象了處理器、儲存器、時鐘、磁碟、網路介面、外設等底層硬體資源,把各種資源都抽象為一個個的檔案描述符

設想一下,多核情況下,多個應用程式同時使用一種資源,就會造成混亂局面,此時作業系統就會扮演一個管理者去管理這些資源的使用者。

提供統一對外訪問的介面

外甥問我什麼是作業系統?

作業系統處在中間層,上面有各種系統應用程式、開發人員、使用者,下面有各種計算機硬體資源。

怎麼腦海中浮現了 上下為難 的表情包,哈哈哈有內味了

作業系統

設計者

硬體程式設計

人員可以直接去操作硬體資源

作業系統設計者這不用解釋了,都懂的,都在設計作業系統了,總不至於不能操作硬體資源吧

硬體程式設計人員這個大家可能稍微陌生點,有一類開發人員是直接對硬體進行操作的,如果是你是學習電子資訊相關專業的,應該很熟悉

燒程式

大學做實驗的時候龍叔就經常把寫好的彙編程式或者C語言程式編譯完成了直接燒到計算機硬體上,這叫

燒程式

我寫的程式裡面有對硬體資源進行操作,比如操作某某管腳、某個串列埠等等

所以

沒有作業系統也是可以直接操作計算機硬體資源

,也是可以跑程式的

那為啥還要作業系統呢?

為什麼要有作業系統?

上面已經說了,沒有作業系統是可以操作計算機硬體資源的,那為什麼要有呢?

1)最早期計算機是沒有作業系統的,每次要變更一下功能,都要手動去調整硬體,費時費力。

2)隨著電子管技術的發展,各種硬體資源可以做成通用的,此時就急切需要一個作業系統去控制這些資源,每次改功能,只需要修改輸入的訊號即可。

3)提升計算機的功能性和靈活性

作業系統的演變

序列處理

20世紀40-50年代,電子管技術得到了發展,誕生了第一臺電子管計算機

外甥問我什麼是作業系統?

由於零件的整合度太低,一臺計算機必須用一個

house來放置

而且這臺機器當時數百萬美元的標價,價格是真的貴,一般人用不起,都是一些豪橫的組織才用得起

早期的計算機是沒有作業系統的,操作人員直接和計算機硬體互動,類似下面這樣

外甥問我什麼是作業系統?

所有的操作在控制檯上進行,控制檯上有顯示燈、觸發器、輸入輸出裝置

每次作業都需要有專門的的人員來操作,使用匯編語言寫程式到紙片上,再穿孔成卡片,再將這些卡片交給專門的操作人員去操作,再花費時間等操作結果。

計算機成本高,操作過程複雜,時間還長

人們很自然就想到減少機器時間的浪費,於是就誕生了

批處理系統

批處理系統

到了20世紀50年代General Motors開發了批處理系統,那時候被稱為

監控系統

監控系統是常住在記憶體中的,他做的事情就是

載入使用者程式到使用者程式段

把控制權交給使用者程式

讀取使用者程式指令交給處理器

將處理器的執行結果輸出到裝置

使用者程式完成後交回控制權

進行下一個迴圈

外甥問我什麼是作業系統?

總結一下,監控程式主要主要完成排程功能,一批作業排隊等待,處理器儘可能的被充分利用,不讓他有任何空閒時間。

監控程式很大程度上

提高了處理器的利用率

,減少了處理器空閒時間

多道系統

批處理系統已經提高了程式的利用率,但還是沒最大化壓榨

監控程式和使用者程式需要來回

切換

轉換控制權,這部分時間處理器閒置

監控程式在做

IO

操作時,由於IO是比較慢的,磁碟讀寫很慢的,此時處理器需要等待

為了更好的利用處理器的計算效能,大佬們搞出了多道系統

外甥問我什麼是作業系統?

多道系統就是同時載入多個使用者程式,當其中一個使用者程式需要

IO等待

時,

切換

到另一個不在等待IO的使用者程式進行處理。

這就很好的減少處理器資源的浪費,同時提高了程式處理的效率。

多道系統會比單道系統複雜很多,比如 所有程式都在記憶體中,涉及到

記憶體管理

多個使用者程式需要執行處理器先執行誰? 這涉及到

排程演算法

當然 別慌張,這些知識都會在後面的文章中講到。

分時系統

多道系統已經解決了處理器資源

合理且高效

利用問題,但是隨著計算機的發展,人們對於計算機又有了新的需求

互動式處理

計算機需要具備多個使用者同時訪問、操作和處理使用者程式,此時

分時系統

就應運而生了。

舉個例子:程式A是一個

非常消耗

處理器資源的程式一般執行一次需要10分鐘,程式B是一個簡單計算程式,執行一次只需要1分鐘。

在多道系統裡,只能是程式A處理完了才能處理B,但是這B等著著急啊

於是就有了分時系統,CPU資源對使用者程式是公平的,每一個使用者擁有的資源是公平的

外甥問我什麼是作業系統?

利用上下文資訊,去切換CPU執行的時間,做到儘可能讓每個使用者都平等擁有資源

在這個過程中,處理器的效能

並沒有提升

,反而會因為排程切換降低利用率,但是對使用者來說提高了使用者程式響應效率。

分散式系統

隨機計算機的發展,終於到了個人電腦的出現,這時候計算機又增加了新的需求,多個計算機之間網路互連、多核利用等等

於是就誕生了

分散式系統

,分散式系統就是在網路的幫助下實現實時的計算和協同處理

作業系統的體系結構

作業系統是一種系統軟體,在理解這個層次結構時可以結合軟體設計的層次結構。

單體系統

整個作業系統在核心以單一程式的方式執行

外甥問我什麼是作業系統?

MS_DOS系統簡單結構

早期MS_DOS系統簡單結構如上圖所示,

作業系統

應用程式

以及

裝置驅動

都可以操作硬體。

可以看出來沒有很好的模組劃分和分離,這種方式的好處是任意呼叫都比較

高效

,缺點是程式大並且複雜的呼叫會讓作業系統變得

笨拙

難以理解

再來看看早起UNIX系統結構

外甥問我什麼是作業系統?

早期UNIX系統結構

可以看到早期Unix系統結構也是

有限的結構化

,主要是早期受到

硬體限制

早期考慮作業系統設計的

核心

要素是 在

最小的空間

裡面提供

最多的功能

特別像網際網路公司初期的系統架構,全部單體應用,所有服務在一起,隨著業務複雜、併發增加

漸漸這種單體應用的優勢會

完全被覆蓋

,公司不得不進行架構升級

層次式系統

單體結構的缺點在硬體不斷髮展和使用者需求激增下越來越明顯

類似公司規模不斷增大,早期架構的一點點優勢越來越敵不過缺點了,不得不進行架構升級

層次化結構的原則是:

每一層只能使用下一層提供的服務

最早的層次化結構系統是Dijkstra大佬設計出來的,叫THE OS,他把整個系統分為了6層

外甥問我什麼是作業系統?

THE OS系統

這種層次化結構的顯著優點:

底層和高層 甚至於每層只要按照規則 都可以分別實現,便於擴充

上層的錯誤不會影響下層,便於除錯、功能的增刪改

呼叫關係清楚,上層對下層的單向依賴,避免遞迴呼叫,保證了設計和實現的正確性

可移植性非常好

當然也有顯著的缺點:

系統中所有程序的控制轉移、通訊等任務都交給系統的核心去管理,代價較大

層次的劃分和安排,要保證不出現雙向依賴關係

微核心

微核心體現在一個微字, 怎麼樣來達到這個微呢?

透過劃分系統程式和使用者程式,把所有不必要的部分移除核心,形成一個小核心

微核心提供最少量的程序管理、儲存管理、以及通訊功能

外甥問我什麼是作業系統?

微核心結構

整個作業系統由兩部分組成,執行在核心態的核心和執行在使用者態的並且以C/S模式提供服務

Windows NT就是以這種架構方式

微核心的顯著優點:

核心精巧

,核心提供核心功能 程序管理、儲存管理、以及通訊功能

面向多處理機和分散式系統

,基於微核心的系統在核心中引入了多處理機排程和管理機制,並且引入了執行緒,有了執行緒就有了並行執行,這可不得了啊。

基於C/S體系結構

微核心的任務通訊機制和訊息機制採用CS模式向用戶提供服務

現代作業系統的體系結構就是

微核心

層次式結構

的結合體

以上就是本期的主要內容,基本回答了外甥的問題,也希望能解答大家的疑惑。

內容對大家有幫助的話,求分享、求轉發、求點贊,一鍵三連就是對我最大的鼓勵,感謝。

我是龍su,一個傾慕外甥帥氣容顏的舅舅,一個半吊子架構師,我們下期見。