外甥上大一了,起初我還非常擔心他,擔心主要有兩方面的原因:
從小一直是校草,長的太帥,會不會天天談戀愛去了 擔心在大學沒能做好自己的規劃
於是經常和他視訊聊天,外甥小我沒幾歲,我們經常以兄弟相稱,聊起來自然和諧
從我這幾次和他聊天可以看出,我的擔憂有些太過了
他好像從沒刻意他的帥氣,而是不斷的充實自己的才華,籃球打得好、街舞跳的好、還去參加各種志願者活動
關鍵是最近還對計算機產生了強烈的興趣。
唉,帥就算了,還這麼認真,這年輕人不講武德啊
上週末打電話,竟然問我什麼是作業系統? 為什麼要有作業系統?
於是就有了這篇文章,也準備把我外甥的計算機相關疑問全部承包了,喜歡我記得關注我 公號 龍躍十二
喜歡我幾個關注我
什麼是作業系統?
說實話很難有一個準確的定義去描述作業系統,看了多本關於作業系統的書中是這樣說的。
作業系統是一個執行在核心態的軟體,該軟體對底層各種硬體資源做了抽象和管理,並提供統一的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系統簡單結構如上圖所示,作業系統和應用程式以及裝置驅動都可以操作硬體。
可以看出來沒有很好的模組劃分和分離,這種方式的好處是任意呼叫都比較高效,缺點是程式大並且複雜的呼叫會讓作業系統變得笨拙且難以理解。
再來看看早起UNIX系統結構
可以看到早期Unix系統結構也是有限的結構化,主要是早期受到硬體限制
早期考慮作業系統設計的核心要素是 在最小的空間裡面提供最多的功能
特別像網際網路公司初期的系統架構,全部單體應用,所有服務在一起,隨著業務複雜、併發增加
漸漸這種單體應用的優勢會完全被覆蓋,公司不得不進行架構升級
層次式系統
單體結構的缺點在硬體不斷髮展和使用者需求激增下越來越明顯
類似公司規模不斷增大,早期架構的一點點優勢越來越敵不過缺點了,不得不進行架構升級
層次化結構的原則是:每一層只能使用下一層提供的服務
最早的層次化結構系統是Dijkstra大佬設計出來的,叫THE OS,他把整個系統分為了6層
這種層次化結構的顯著優點:
底層和高層 甚至於每層只要按照規則 都可以分別實現,便於擴充 上層的錯誤不會影響下層,便於除錯、功能的增刪改 呼叫關係清楚,上層對下層的單向依賴,避免遞迴呼叫,保證了設計和實現的正確性 可移植性非常好
當然也有顯著的缺點:
系統中所有程式的控制轉移、通訊等任務都交給系統的核心去管理,代價較大 層次的劃分和安排,要保證不出現雙向依賴關係
微核心
微核心體現在一個微字, 怎麼樣來達到這個微呢?
通過劃分系統程式和使用者程式,把所有不必要的部分移除核心,形成一個小核心 微核心提供最少量的程式管理、儲存管理、以及通訊功能
整個作業系統由兩部分組成,執行在核心態的核心和執行在使用者態的並且以C/S模式提供服務
Windows NT就是以這種架構方式
微核心的顯著優點:
核心精巧,核心提供核心功能 程式管理、儲存管理、以及通訊功能
面向多處理機和分散式系統,基於微核心的系統在核心中引入了多處理機排程和管理機制,並且引入了執行緒,有了執行緒就有了並行執行,這可不得了啊。
基於C/S體系結構 微核心的任務通訊機制和訊息機制採用CS模式向使用者提供服務
現代作業系統的體系結構就是微核心與層次式結構的結合體
以上就是本期的主要內容,基本回答了外甥的問題,也希望能解答大家的疑惑。
內容對大家有幫助的話,求分享、求轉發、求點贊,一鍵三連就是對我最大的鼓勵,感謝。
我是龍su,一個傾慕外甥帥氣容顏的舅舅,一個半吊子架構師,我們下期見。