今天,我們從三個(gè)方面來簡單聊聊為什么計(jì)算機(jī)系統(tǒng)需要操作系統(tǒng)這個(gè)話題。
資源分配器
資源隔離與秩序維護(hù)者
細(xì)節(jié)屏蔽者
資源分配器
如果你的CPU上只需要運(yùn)行一個(gè)程序,那么你的確不需要操作系統(tǒng)。
可是,一旦你的CPU上需要再運(yùn)行一個(gè)程序,那么馬上就會(huì)面臨一個(gè)問題:兩個(gè)程序開始競爭資源,因?yàn)橛?jì)算機(jī)的硬件就那么多:有限的處理器個(gè)數(shù)、有限的內(nèi)存容量、有限的磁盤容量等等,當(dāng)在只有一個(gè)CPU(核)的機(jī)器上要運(yùn)行兩個(gè)程序時(shí),在某一個(gè)時(shí)刻CPU到底該運(yùn)行哪個(gè)程序呢?
這顯然不是程序1應(yīng)該關(guān)心的事情,當(dāng)然,也不是程序2該關(guān)心的事情,這就需要必須得有一個(gè)什么程序來關(guān)心,這個(gè)程序就是操作系統(tǒng)。
操作系統(tǒng)存在的目的就是為了合理的給各個(gè)運(yùn)行起來后的程序分配資源,從這個(gè)角度你可以把操作系統(tǒng)理解為一個(gè)資源分配器。
顯然你不能把CPU切成多個(gè)小的CPU,而只能采用“分時(shí)”的策略,也就是“你用一會(huì)我用一會(huì)”,這就好比大家去游樂場玩過山車,由于過山車只有一個(gè),而且不能拆分成更小的給大家用,因此大家只能排隊(duì),你用一會(huì)我用一會(huì);
操作系統(tǒng)也采用此策略將CPU資源分配給各個(gè)進(jìn)程,因此從操作系統(tǒng)的角度看“進(jìn)程A用一會(huì)CPU后然后暫停,進(jìn)程B再用一會(huì)兒”,即,操作系統(tǒng)不斷的將CPU在各個(gè)進(jìn)程之間切換,只不過切換的速度足夠快,因此從用戶看來進(jìn)程在同時(shí)運(yùn)行;操作系統(tǒng)決定以什么樣的順序?qū)PU分配給各個(gè)進(jìn)程就是所謂的進(jìn)程調(diào)度。
而像內(nèi)存或者磁盤這類存儲(chǔ)資源與CPU不同,我們可以很方便的將內(nèi)存進(jìn)行劃分,因此可以采用“分塊”的策略,也就是“ 你用一塊我用一塊”,這就是好比停車位,一個(gè)停車場中有很多停車位,大家可以同時(shí)去停車場中停車。
內(nèi)存也是同樣的道理,我們可以將內(nèi)存的劃分給不同的進(jìn)程,因此不同的進(jìn)程可以同時(shí)存在于內(nèi)存中。
為高效使用有限的內(nèi)存資源,操作系統(tǒng)在內(nèi)存的使用上可謂絞盡腦汁,虛擬內(nèi)存就是精彩的發(fā)明,其可以讓更多進(jìn)程常駐內(nèi)存,當(dāng)然,虛擬內(nèi)存也帶來不小的挑戰(zhàn),這些都需要靠軟硬件結(jié)合來解決。
資源隔離與秩序維護(hù)者
程序A的運(yùn)行不能干擾到程序B,即,如果程序A出現(xiàn)bug導(dǎo)致崩潰,那么它不能影響到系統(tǒng)中的其它程序,當(dāng)然也包括操作系統(tǒng)這個(gè)程序;
程序A決不能隨意訪問程序B所在的內(nèi)存區(qū)域等等,你肯定不希望其它程序能直接獲取你的聊天信息,這些都需要操作系統(tǒng)進(jìn)行資源隔離。
除此之外,復(fù)雜的任務(wù)需要借助多個(gè)程序通力合作才能完成,因此程序之間除了隔離之外也必須進(jìn)行必要的通信,比如進(jìn)程間通信等,這時(shí)操作系統(tǒng)必須提供必要的同步以及互斥機(jī)制,確保程序?qū)蚕碣Y源的訪問以及程序的運(yùn)行順序符合程序員的預(yù)期。
因此從這個(gè)角度看操作系統(tǒng)又是資源隔離與秩序維護(hù)者。
細(xì)節(jié)屏蔽者
操作系統(tǒng)和TCP/IP協(xié)議棧的作用是類似的,如果沒有TCP/IP協(xié)議棧,那么在發(fā)送網(wǎng)絡(luò)數(shù)據(jù)時(shí)你需要自己填寫好tcp協(xié)議header,維護(hù)好tcp的鏈接狀態(tài),發(fā)送前要進(jìn)行三次握手,發(fā)送的過程中需要保證數(shù)據(jù)包的可靠傳輸、還要自己維護(hù)tcp的擁塞控制等等,搞定tcp協(xié)議還不算完,不要忘了還有ip協(xié)議。
除此之外還有數(shù)據(jù)鏈路層等等,如果這一切都要自己搞定,相信沒有多少程序員能進(jìn)行網(wǎng)絡(luò)編程,而且大部分程序員在編寫網(wǎng)絡(luò)程序時(shí)相信對(duì)這些細(xì)節(jié)也不感興趣。
這時(shí)tcp/ip協(xié)議棧就非常重要了,它通過socket對(duì)上層程序員屏蔽了網(wǎng)絡(luò)的復(fù)雜度,程序員僅需要調(diào)用send/recv即可進(jìn)行網(wǎng)絡(luò)數(shù)據(jù)的收發(fā),這大大簡化了網(wǎng)絡(luò)編程,因此你可以把內(nèi)核中負(fù)責(zé)處理tcp/ip的那一部分理解為計(jì)算機(jī)網(wǎng)絡(luò)的”操作系統(tǒng)“。
而操作系統(tǒng)也是同樣的道理,我們知道真正完成計(jì)算任務(wù)的是硬件,hardware,而硬件本身通常是非常難以編程的,尤其設(shè)計(jì)I/O的部分。
因?yàn)檫@非常的細(xì)節(jié)、非常瑣碎,程序員在讀寫文件時(shí)大概率不想關(guān)心要讀寫的數(shù)據(jù)到底保存在磁盤的哪個(gè)盤面、哪個(gè)柱面、哪個(gè)扇區(qū)上,也不想關(guān)心該使用什么樣的機(jī)器指令可以控制磁盤的讀寫、怎樣平衡好讀寫速率與磁盤壽命等等,你需要的是兩個(gè)read/write函數(shù)就能讀寫文件這種抽象概念(實(shí)際上從磁盤的角度來說根本不存在文件這種概念)。
這時(shí)操作系統(tǒng)的作用就非常明顯了,操作系統(tǒng)對(duì)上層應(yīng)用屏蔽了底層的這些細(xì)節(jié),讓程序員可以將注意力放在自己的領(lǐng)域上。
因此,從這個(gè)角度看操作系統(tǒng)更像是一個(gè)細(xì)節(jié)屏蔽者,它提供的一個(gè)重要的功能就是:抽象,Abstraction。
好啦,關(guān)于這個(gè)話題今天就聊到這里,希望對(duì)大家理解操作系統(tǒng)有所幫助。
歷史好文:
在 4G 內(nèi)存的機(jī)器上,申請(qǐng) 8G 內(nèi)存會(huì)怎么樣?
鍵盤敲入 A 字母時(shí),操作系統(tǒng)期間發(fā)生了什么...
真棒!20 張圖揭開內(nèi)存管理的迷霧,瞬間豁然開朗
進(jìn)程和線程基礎(chǔ)知識(shí)全家桶,30 張圖一套帶走
多個(gè)線程為了同個(gè)資源打起架來了,該如何讓他們安分?
審核編輯:湯梓紅
-
cpu
+關(guān)注
關(guān)注
68文章
10804瀏覽量
210829 -
計(jì)算機(jī)
+關(guān)注
關(guān)注
19文章
7360瀏覽量
87632 -
操作系統(tǒng)
+關(guān)注
關(guān)注
37文章
6684瀏覽量
123140 -
分配器
+關(guān)注
關(guān)注
0文章
193瀏覽量
25694 -
程序
+關(guān)注
關(guān)注
116文章
3756瀏覽量
80751
原文標(biāo)題:為什么計(jì)算機(jī)需要操作系統(tǒng)?
文章出處:【微信號(hào):小林coding,微信公眾號(hào):小林coding】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論