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

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

  • 從小一直是校草,長的太帥,會不會天天談戀愛去了
  • 擔心在大學沒能做好自己的規劃

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

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

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

關鍵是最近還對計算機產生了強烈的興趣。

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

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

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

喜歡我幾個關注我

什麼是操作系統?

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

操作系統是一個運行在內核態的軟件,該軟件對底層各種硬件資源做了抽象和管理,並提供統一的API接口供應用程序去調用這些資源。

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

  1. 操作系統是一個軟件
  2. 操作系統軟件運行在內核狀態下的軟件,不在用戶態下,應用開發者開發的各種系統軟件都是在用戶態下運行的

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

  1. 對各種底層硬件資源進行了抽象管理

抽象了處理器、存儲器、時鐘、磁盤、網絡接口、外設等底層硬件資源,把各種資源都抽象爲一個個的文件描述符

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

  1. 提供統一對外訪問的接口

操作系統處在中間層,上面有各種系統應用程序、開發人員、用戶,下面有各種計算機硬件資源。

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

操作系統設計者硬件編程人員可以直接去操作硬件資源

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

硬件編程人員這個大家可能稍微陌生點,有一類開發人員是直接對硬件進行操作的,如果是你是學習電子信息相關專業的,應該很熟悉燒程序

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

我寫的程序裏面有對硬件資源進行操作,比如操作某某管腳、某個串口等等

所以沒有操作系統也是可以直接操作計算機硬件資源,也是可以跑程序的

那爲啥還要操作系統呢?

爲什麼要有操作系統?

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

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

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

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

操作系統的演變

串行處理

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

由於零件的集成度太低,一臺計算機必須用一個house來放置

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

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

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

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

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

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

批處理系統

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

監控系統是常住在內存中的,他做的事情就是

  1. 加載用戶程序到用戶程序段
  2. 把控制權交給用戶程序
  3. 讀取用戶程序指令交給處理器
  4. 將處理器的執行結果輸出到設備
  5. 用戶程序完成後交回控制權
  6. 進行下一個循環

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

監控程序很大程度上提高了處理器的利用率,減少了處理器空閒時間

多道系統

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

監控程序和用戶程序需要來回切換轉換控制權,這部分時間處理器閒置

監控程序在做IO操作時,由於IO是比較慢的,磁盤讀寫很慢的,此時處理器需要等待

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

多道系統就是同時加載多個用戶程序,當其中一個用戶程序需要IO等待時,切換到另一個不在等待IO的用戶程序進行處理。

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

多道系統會比單道系統複雜很多,比如 所有程序都在內存中,涉及到 內存管理

多個用戶程序需要運行處理器先運行誰? 這涉及到 調度算法

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

分時系統

多道系統已經解決了處理器資源合理且高效利用問題,但是隨着計算機的發展,人們對於計算機又有了新的需求 交互式處理

計算機需要具備多個用戶同時訪問、操作和處理用戶程序,此時 分時系統 就應運而生了。

舉個例子:程序A是一個非常消耗處理器資源的程序一般運行一次需要10分鐘,程序B是一個簡單計算程序,運行一次只需要1分鐘。

在多道系統裏,只能是程序A處理完了才能處理B,但是這B等着着急啊

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

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

在這個過程中,處理器的性能並沒有提升,反而會因爲調度切換降低利用率,但是對用戶來說提高了用戶程序響應效率。

分佈式系統

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

於是就誕生了分佈式系統,分佈式系統就是在網絡的幫助下實現實時的計算和協同處理

操作系統的體系結構

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

單體系統

整個操作系統在內核以單一程序的方式運行

MS_DOS系統簡單結構
MS_DOS系統簡單結構

早期MS_DOS系統簡單結構如上圖所示,操作系統應用程序以及設備驅動都可以操作硬件。

可以看出來沒有很好的模塊劃分和分離,這種方式的好處是任意調用都比較高效,缺點是程序大並且複雜的調用會讓操作系統變得笨拙難以理解

再來看看早起UNIX系統結構

早期UNIX系統結構
早期UNIX系統結構

可以看到早期Unix系統結構也是有限的結構化,主要是早期受到硬件限制

早期考慮操作系統設計的核心要素是 在最小的空間裏面提供最多的功能

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

漸漸這種單體應用的優勢會完全被覆蓋,公司不得不進行架構升級

層次式系統

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

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

層次化結構的原則是:每一層只能使用下一層提供的服務

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

THE OS系統
THE OS系統

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

  • 底層和高層 甚至於每層只要按照規則 都可以分別實現,便於擴充
  • 上層的錯誤不會影響下層,便於調試、功能的增刪改
  • 調用關係清楚,上層對下層的單向依賴,避免遞歸調用,保證了設計和實現的正確性
  • 可移植性非常好

當然也有顯著的缺點:

  • 系統中所有進程的控制轉移、通信等任務都交給系統的核心去管理,代價較大
  • 層次的劃分和安排,要保證不出現雙向依賴關係

微內核

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

  1. 通過劃分系統程序和用戶程序,把所有不必要的部分移除內核,形成一個小內核
  2. 微內核提供最少量的進程管理、存儲管理、以及通信功能
微內核結構
微內核結構

整個操作系統由兩部分組成,運行在覈心態的內核和運行在用戶態的並且以C/S模式提供服務

Windows NT就是以這種架構方式

微內核的顯著優點:

內核精巧,內核提供核心功能 進程管理、存儲管理、以及通信功能

面向多處理機和分佈式系統,基於微內核的系統在內核中引入了多處理機調度和管理機制,並且引入了線程,有了線程就有了並行執行,這可不得了啊。

基於C/S體系結構 微內核的任務通信機制和消息機制採用CS模式向用戶提供服務

現代操作系統的體系結構就是微內核層次式結構的結合體

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

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

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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章