本文已經收錄至個人GitHub,歡迎你們踊躍star 和 issues。git
https://github.com/midou-tech/articlesgithub
外甥上大一了,起初我還很是擔憂他,擔憂主要有兩方面的緣由:算法
因而常常和他視頻聊天,外甥小我沒幾歲,咱們常常以兄弟相稱,聊起來天然和諧編程
從我這幾回和他聊天能夠看出,個人擔心有些太過了網絡
他好像從沒刻意他的帥氣,而是不斷的充實本身的才華,籃球打得好、街舞跳的好、還去參加各類志願者活動架構
關鍵是最近還對計算機產生了強烈的興趣。併發
唉,帥就算了,還這麼認真,這年輕人不講武德啊分佈式
上週末打電話,居然問我什麼是操做系統? 爲何要有操做系統?性能
因而就有了這篇文章,也準備把我外甥的計算機相關疑問所有承包了,喜歡我記得關注我 公號 龍躍十二學習
喜歡我幾個關注我
說實話很難有一個準確的定義去描述操做系統,看了多本關於操做系統的書中是這樣說的。
操做系統是一個運行在內核態的軟件,該軟件對底層各類硬件資源作了抽象和管理,並提供統一的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,一個傾慕外甥帥氣容顏的舅舅,一個半吊子架構師,咱們下期見。