外甥上大一了遥椿,起初我還非常擔(dān)心他,擔(dān)心主要有兩方面的原因:
- 從小一直是校草淆储,長的太帥冠场,會(huì)不會(huì)天天談戀愛去了
- 擔(dān)心在大學(xué)沒能做好自己的規(guī)劃
于是經(jīng)常和他視頻聊天,外甥小我沒幾歲本砰,我們經(jīng)常以兄弟相稱碴裙,聊起來自然和諧
從我這幾次和他聊天可以看出,我的擔(dān)憂有些太過了
他好像從沒刻意他的帥氣点额,而是不斷的充實(shí)自己的才華舔株,籃球打得好、街舞跳的好还棱、還去參加各種志愿者活動(dòng)
關(guān)鍵是最近還對(duì)計(jì)算機(jī)產(chǎn)生了強(qiáng)烈的興趣载慈。
唉,帥就算了珍手,還這么認(rèn)真办铡,這年輕人不講武德啊
上周末打電話辞做,竟然問我什么是操作系統(tǒng)? 為什么要有操作系統(tǒng)寡具?
于是就有了這篇文章凭豪,也準(zhǔn)備把我外甥的計(jì)算機(jī)相關(guān)疑問全部承包了,喜歡我記得關(guān)注我 公號(hào) 龍躍十二
喜歡我?guī)讉€(gè)關(guān)注我
什么是操作系統(tǒng)晒杈?
說實(shí)話很難有一個(gè)準(zhǔn)確的定義去描述操作系統(tǒng),看了多本關(guān)于操作系統(tǒng)的書中是這樣說的孔厉。
操作系統(tǒng)是一個(gè)運(yùn)行在內(nèi)核態(tài)的軟件拯钻,該軟件對(duì)底層各種硬件資源做了抽象和管理,并提供統(tǒng)一的API接口供應(yīng)用程序去調(diào)用這些資源撰豺。
這句話涵蓋了好幾個(gè)知識(shí)點(diǎn)
- 操作系統(tǒng)是一個(gè)軟件
- 操作系統(tǒng)軟件運(yùn)行在內(nèi)核狀態(tài)下的軟件粪般,不在用戶態(tài)下,應(yīng)用開發(fā)者開發(fā)的各種系統(tǒng)軟件都是在用戶態(tài)下運(yùn)行的
撒是用戶態(tài)污桦,撒是內(nèi)核態(tài)亩歹?你很喜歡剖根問底,這個(gè)后面再說
- 對(duì)各種底層硬件資源進(jìn)行了抽象和管理
抽象了處理器凡橱、存儲(chǔ)器小作、時(shí)鐘、磁盤稼钩、網(wǎng)絡(luò)接口顾稀、外設(shè)等底層硬件資源,把各種資源都抽象為一個(gè)個(gè)的文件描述符
設(shè)想一下坝撑,多核情況下静秆,多個(gè)應(yīng)用程序同時(shí)使用一種資源,就會(huì)造成混亂局面巡李,此時(shí)操作系統(tǒng)就會(huì)扮演一個(gè)管理者去管理這些資源的使用者抚笔。
- 提供統(tǒng)一對(duì)外訪問的接口
操作系統(tǒng)處在中間層,上面有各種系統(tǒng)應(yīng)用程序侨拦、開發(fā)人員殊橙、用戶,下面有各種計(jì)算機(jī)硬件資源狱从。
怎么腦海中浮現(xiàn)了 上下為難 的表情包蛀柴,哈哈哈有內(nèi)味了
操作系統(tǒng)設(shè)計(jì)者和硬件編程人員可以直接去操作硬件資源
操作系統(tǒng)設(shè)計(jì)者這不用解釋了,都懂的矫夯,都在設(shè)計(jì)操作系統(tǒng)了鸽疾,總不至于不能操作硬件資源吧
硬件編程人員這個(gè)大家可能稍微陌生點(diǎn),有一類開發(fā)人員是直接對(duì)硬件進(jìn)行操作的训貌,如果是你是學(xué)習(xí)電子信息相關(guān)專業(yè)的制肮,應(yīng)該很熟悉燒程序冒窍。
大學(xué)做實(shí)驗(yàn)的時(shí)候龍叔就經(jīng)常把寫好的匯編程序或者C語言程序編譯完成了直接燒到計(jì)算機(jī)硬件上,這叫燒程序豺鼻。
我寫的程序里面有對(duì)硬件資源進(jìn)行操作综液,比如操作某某管腳、某個(gè)串口等等
所以沒有操作系統(tǒng)也是可以直接操作計(jì)算機(jī)硬件資源儒飒,也是可以跑程序的
那為啥還要操作系統(tǒng)呢谬莹?
為什么要有操作系統(tǒng)?
上面已經(jīng)說了桩了,沒有操作系統(tǒng)是可以操作計(jì)算機(jī)硬件資源的附帽,那為什么要有呢?
1)最早期計(jì)算機(jī)是沒有操作系統(tǒng)的井誉,每次要變更一下功能帘营,都要手動(dòng)去調(diào)整硬件灶伊,費(fèi)時(shí)費(fèi)力。
2)隨著電子管技術(shù)的發(fā)展,各種硬件資源可以做成通用的塞耕,此時(shí)就急切需要一個(gè)操作系統(tǒng)去控制這些資源陆淀,每次改功能绍弟,只需要修改輸入的信號(hào)即可赢笨。
3)提升計(jì)算機(jī)的功能性和靈活性
操作系統(tǒng)的演變
串行處理
20世紀(jì)40-50年代,電子管技術(shù)得到了發(fā)展蔽午,誕生了第一臺(tái)電子管計(jì)算機(jī)
由于零件的集成度太低应狱,一臺(tái)計(jì)算機(jī)必須用一個(gè)大house來放置
而且這臺(tái)機(jī)器當(dāng)時(shí)數(shù)百萬美元的標(biāo)價(jià),價(jià)格是真的貴祠丝,一般人用不起疾呻,都是一些豪橫的組織才用得起
早期的計(jì)算機(jī)是沒有操作系統(tǒng)的,操作人員直接和計(jì)算機(jī)硬件交互写半,類似下面這樣
所有的操作在控制臺(tái)上進(jìn)行岸蜗,控制臺(tái)上有顯示燈、觸發(fā)器叠蝇、輸入輸出設(shè)備
每次作業(yè)都需要有專門的的人員來操作璃岳,使用匯編語言寫程序到紙片上,再穿孔成卡片悔捶,再將這些卡片交給專門的操作人員去操作铃慷,再花費(fèi)時(shí)間等操作結(jié)果。
計(jì)算機(jī)成本高蜕该,操作過程復(fù)雜犁柜,時(shí)間還長
人們很自然就想到減少機(jī)器時(shí)間的浪費(fèi),于是就誕生了批處理系統(tǒng)堂淡。
批處理系統(tǒng)
到了20世紀(jì)50年代General Motors開發(fā)了批處理系統(tǒng)馋缅,那時(shí)候被稱為 監(jiān)控系統(tǒng)
監(jiān)控系統(tǒng)是常住在內(nèi)存中的扒腕,他做的事情就是
- 加載用戶程序到用戶程序段
- 把控制權(quán)交給用戶程序
- 讀取用戶程序指令交給處理器
- 將處理器的執(zhí)行結(jié)果輸出到設(shè)備
- 用戶程序完成后交回控制權(quán)
- 進(jìn)行下一個(gè)循環(huán)
總結(jié)一下,監(jiān)控程序主要主要完成調(diào)度功能萤悴,一批作業(yè)排隊(duì)等待瘾腰,處理器盡可能的被充分利用,不讓他有任何空閑時(shí)間覆履。
監(jiān)控程序很大程度上提高了處理器的利用率蹋盆,減少了處理器空閑時(shí)間
多道系統(tǒng)
批處理系統(tǒng)已經(jīng)提高了程序的利用率,但還是沒最大化壓榨
監(jiān)控程序和用戶程序需要來回切換轉(zhuǎn)換控制權(quán)硝全,這部分時(shí)間處理器閑置
監(jiān)控程序在做IO操作時(shí)栖雾,由于IO是比較慢的,磁盤讀寫很慢的柳沙,此時(shí)處理器需要等待
為了更好的利用處理器的計(jì)算性能,大佬們搞出了多道系統(tǒng)
多道系統(tǒng)就是同時(shí)加載多個(gè)用戶程序拌倍,當(dāng)其中一個(gè)用戶程序需要IO等待時(shí)赂鲤,切換到另一個(gè)不在等待IO的用戶程序進(jìn)行處理。
這就很好的減少處理器資源的浪費(fèi)柱恤,同時(shí)提高了程序處理的效率数初。
多道系統(tǒng)會(huì)比單道系統(tǒng)復(fù)雜很多,比如 所有程序都在內(nèi)存中梗顺,涉及到 內(nèi)存管理
多個(gè)用戶程序需要運(yùn)行處理器先運(yùn)行誰泡孩? 這涉及到 調(diào)度算法
當(dāng)然 別慌張,這些知識(shí)都會(huì)在后面的文章中講到寺谤。
分時(shí)系統(tǒng)
多道系統(tǒng)已經(jīng)解決了處理器資源合理且高效利用問題仑鸥,但是隨著計(jì)算機(jī)的發(fā)展,人們對(duì)于計(jì)算機(jī)又有了新的需求 交互式處理变屁。
計(jì)算機(jī)需要具備多個(gè)用戶同時(shí)訪問眼俊、操作和處理用戶程序,此時(shí) 分時(shí)系統(tǒng) 就應(yīng)運(yùn)而生了粟关。
舉個(gè)例子:程序A是一個(gè)非常消耗處理器資源的程序一般運(yùn)行一次需要10分鐘疮胖,程序B是一個(gè)簡單計(jì)算程序,運(yùn)行一次只需要1分鐘闷板。
在多道系統(tǒng)里澎灸,只能是程序A處理完了才能處理B,但是這B等著著急啊
于是就有了分時(shí)系統(tǒng)遮晚,CPU資源對(duì)用戶程序是公平的性昭,每一個(gè)用戶擁有的資源是公平的
利用上下文信息,去切換CPU執(zhí)行的時(shí)間县遣,做到盡可能讓每個(gè)用戶都平等擁有資源
在這個(gè)過程中巩梢,處理器的性能并沒有提升创泄,反而會(huì)因?yàn)檎{(diào)度切換降低利用率,但是對(duì)用戶來說提高了用戶程序響應(yīng)效率括蝠。
分布式系統(tǒng)
隨機(jī)計(jì)算機(jī)的發(fā)展鞠抑,終于到了個(gè)人電腦的出現(xiàn),這時(shí)候計(jì)算機(jī)又增加了新的需求忌警,多個(gè)計(jì)算機(jī)之間網(wǎng)絡(luò)互連搁拙、多核利用等等
于是就誕生了分布式系統(tǒng),分布式系統(tǒng)就是在網(wǎng)絡(luò)的幫助下實(shí)現(xiàn)實(shí)時(shí)的計(jì)算和協(xié)同處理
操作系統(tǒng)的體系結(jié)構(gòu)
操作系統(tǒng)是一種系統(tǒng)軟件法绵,在理解這個(gè)層次結(jié)構(gòu)時(shí)可以結(jié)合軟件設(shè)計(jì)的層次結(jié)構(gòu)箕速。
單體系統(tǒng)
整個(gè)操作系統(tǒng)在內(nèi)核以單一程序的方式運(yùn)行
<figcaption style="margin-top: 5px; text-align: center; color: #888; font-size: 14px;">MS_DOS系統(tǒng)簡單結(jié)構(gòu)</figcaption>
早期MS_DOS系統(tǒng)簡單結(jié)構(gòu)如上圖所示,操作系統(tǒng)和應(yīng)用程序以及設(shè)備驅(qū)動(dòng)都可以操作硬件朋譬。
可以看出來沒有很好的模塊劃分和分離盐茎,這種方式的好處是任意調(diào)用都比較高效,缺點(diǎn)是程序大并且復(fù)雜的調(diào)用會(huì)讓操作系統(tǒng)變得笨拙且難以理解徙赢。
再來看看早起UNIX系統(tǒng)結(jié)構(gòu)
<figcaption style="margin-top: 5px; text-align: center; color: #888; font-size: 14px;">早期UNIX系統(tǒng)結(jié)構(gòu)</figcaption>
可以看到早期Unix系統(tǒng)結(jié)構(gòu)也是有限的結(jié)構(gòu)化字柠,主要是早期受到硬件限制
早期考慮操作系統(tǒng)設(shè)計(jì)的核心要素是 在最小的空間里面提供最多的功能
特別像互聯(lián)網(wǎng)公司初期的系統(tǒng)架構(gòu),全部單體應(yīng)用狡赐,所有服務(wù)在一起窑业,隨著業(yè)務(wù)復(fù)雜、并發(fā)增加
漸漸這種單體應(yīng)用的優(yōu)勢(shì)會(huì)完全被覆蓋枕屉,公司不得不進(jìn)行架構(gòu)升級(jí)
層次式系統(tǒng)
單體結(jié)構(gòu)的缺點(diǎn)在硬件不斷發(fā)展和用戶需求激增下越來越明顯
類似公司規(guī)模不斷增大常柄,早期架構(gòu)的一點(diǎn)點(diǎn)優(yōu)勢(shì)越來越敵不過缺點(diǎn)了,不得不進(jìn)行架構(gòu)升級(jí)
層次化結(jié)構(gòu)的原則是:每一層只能使用下一層提供的服務(wù)
最早的層次化結(jié)構(gòu)系統(tǒng)是Dijkstra大佬設(shè)計(jì)出來的搀擂,叫THE OS西潘,他把整個(gè)系統(tǒng)分為了6層
<figcaption style="margin-top: 5px; text-align: center; color: #888; font-size: 14px;">THE OS系統(tǒng)</figcaption>
這種層次化結(jié)構(gòu)的顯著優(yōu)點(diǎn):
- 底層和高層 甚至于每層只要按照規(guī)則 都可以分別實(shí)現(xiàn),便于擴(kuò)充
- 上層的錯(cuò)誤不會(huì)影響下層哨颂,便于調(diào)試秸架、功能的增刪改
- 調(diào)用關(guān)系清楚,上層對(duì)下層的單向依賴咆蒿,避免遞歸調(diào)用东抹,保證了設(shè)計(jì)和實(shí)現(xiàn)的正確性
- 可移植性非常好
當(dāng)然也有顯著的缺點(diǎn):
- 系統(tǒng)中所有進(jìn)程的控制轉(zhuǎn)移、通信等任務(wù)都交給系統(tǒng)的核心去管理沃测,代價(jià)較大
- 層次的劃分和安排缭黔,要保證不出現(xiàn)雙向依賴關(guān)系
微內(nèi)核
微內(nèi)核體現(xiàn)在一個(gè)微字, 怎么樣來達(dá)到這個(gè)微呢蒂破?
- 通過劃分系統(tǒng)程序和用戶程序馏谨,把所有不必要的部分移除內(nèi)核,形成一個(gè)小內(nèi)核
- 微內(nèi)核提供最少量的進(jìn)程管理附迷、存儲(chǔ)管理惧互、以及通信功能
<figcaption style="margin-top: 5px; text-align: center; color: #888; font-size: 14px;">微內(nèi)核結(jié)構(gòu)</figcaption>
整個(gè)操作系統(tǒng)由兩部分組成哎媚,運(yùn)行在核心態(tài)的內(nèi)核和運(yùn)行在用戶態(tài)的并且以C/S模式提供服務(wù)
Windows NT就是以這種架構(gòu)方式
微內(nèi)核的顯著優(yōu)點(diǎn):
內(nèi)核精巧,內(nèi)核提供核心功能 進(jìn)程管理喊儡、存儲(chǔ)管理拨与、以及通信功能
面向多處理機(jī)和分布式系統(tǒng),基于微內(nèi)核的系統(tǒng)在內(nèi)核中引入了多處理機(jī)調(diào)度和管理機(jī)制艾猜,并且引入了線程买喧,有了線程就有了并行執(zhí)行,這可不得了啊匆赃。
基于C/S體系結(jié)構(gòu) 微內(nèi)核的任務(wù)通信機(jī)制和消息機(jī)制采用CS模式向用戶提供服務(wù)
現(xiàn)代操作系統(tǒng)的體系結(jié)構(gòu)就是微內(nèi)核與層次式結(jié)構(gòu)的結(jié)合體
以上就是本期的主要內(nèi)容淤毛,基本回答了外甥的問題,也希望能解答大家的疑惑算柳。
內(nèi)容對(duì)大家有幫助的話低淡,求分享、求轉(zhuǎn)發(fā)瞬项、求點(diǎn)贊蔗蹋,一鍵三連就是對(duì)我最大的鼓勵(lì),感謝滥壕。
我是龍su纸颜,一個(gè)傾慕外甥帥氣容顏的舅舅兽泣,一個(gè)半吊子架構(gòu)師绎橘,我們下期見。