??樊梓慕:個人主頁
???個人專欄:《C語言》《數(shù)據(jù)結(jié)構(gòu)》《藍(lán)橋杯試題》《LeetCode刷題筆記》《實(shí)訓(xùn)項(xiàng)目》《C++》《Linux》
??每一個不曾起舞的日子,都是對生命的辜負(fù)
目錄
前言
1.馮諾依曼體系結(jié)構(gòu)
2.操作系統(tǒng)(OS)
(1)用戶到操作系統(tǒng)再到底層是如何組織的?
(2)計(jì)算機(jī)是如何管理軟硬件資源的?
前言
本篇文章主要與大家說明硬件層面與軟件層面上計(jì)算機(jī)運(yùn)行的一些機(jī)制。
- 硬件上主要帶大家認(rèn)識馮諾依曼體系結(jié)構(gòu)
- 軟件層面對應(yīng)操作系統(tǒng)的相關(guān)概念
本篇文章也是為后面學(xué)習(xí)系統(tǒng)其他知識打基礎(chǔ),有關(guān)系統(tǒng)的學(xué)習(xí)大家需要翻越三座大山:進(jìn)程周邊、文件周邊以及線程周邊。
歡迎大家??收藏??以便未來做題時可以快速找到思路,巧妙的方法可以事半功倍。
=========================================================================文章來源地址http://www.zghlxwxcb.cn/news/detail-751877.html
GITEE相關(guān)代碼:??fanfei_c的倉庫??
=========================================================================
1.馮諾依曼體系結(jié)構(gòu)
我們知道計(jì)算機(jī)的產(chǎn)生是為了解決人的問題,也就意味著計(jì)算機(jī)要有人機(jī)交互的功能,即輸入與輸出,人類發(fā)明計(jì)算機(jī)其實(shí)就如上面圖片所表達(dá)的意思一樣:人輸入一個數(shù)據(jù),經(jīng)過計(jì)算機(jī)的處理,讓我們得到一個結(jié)果數(shù)據(jù),即輸出。?
計(jì)算機(jī)通過輸入設(shè)備得到數(shù)據(jù),數(shù)據(jù)在計(jì)算機(jī)當(dāng)中進(jìn)行一系列的算術(shù)運(yùn)算和邏輯運(yùn)算后,并且經(jīng)過控制(何時從輸入設(shè)備獲取數(shù)據(jù),何時輸出數(shù)據(jù)到輸出設(shè)備等),最終通過輸出設(shè)備進(jìn)行輸出。
算邏運(yùn)算和控制的過程是由中央處理器完成的,也就是我們俗稱的CPU。
計(jì)算機(jī)的誕生是為了計(jì)算龐大的數(shù)據(jù),但是對于數(shù)據(jù)的傳輸不同的存儲器又具備不同的效率,數(shù)據(jù)的傳輸過程,即拷貝的整體速度,是決定計(jì)算機(jī)效率的重要指標(biāo),在未提出馮諾依曼體系結(jié)構(gòu)之前,我們往往需要造價高昂的寄存器來組成整個計(jì)算機(jī),來達(dá)到高速運(yùn)算的目的。
但是,現(xiàn)在的計(jì)算機(jī)我們發(fā)現(xiàn)早已進(jìn)入千家萬戶,已然不是曾經(jīng)的“奢侈品”,這一切就要?dú)w功于馮諾依曼體系結(jié)構(gòu),如今的計(jì)算機(jī)大部分都遵守馮諾依曼體系結(jié)構(gòu)。
馮諾依曼體系結(jié)構(gòu)是如何降低成本的呢?
中央處理器顯然是需要高速計(jì)算的,所以中央處理器內(nèi)部就是由各種寄存器構(gòu)成,所以CPU的價格一般很高。
當(dāng)然寄存器不僅存在于CPU中,其他設(shè)備中也可能存在寄存器。
來看下物理存儲金字塔:
可以總結(jié)為:
- 靠近CPU的存儲單元(寄存器),效率高,造價貴,單體容量?。?/li>
- 遠(yuǎn)離CPU的存儲單元(服務(wù)器),效率低,造價低,單體容量大;?
輸入設(shè)備與輸出設(shè)備對于數(shù)據(jù)的處理很慢,如果直接與CPU相連,根據(jù)木桶效應(yīng),整個計(jì)算機(jī)的運(yùn)行速度會被輸入輸出設(shè)備所拖累,那就不讓輸入輸出設(shè)備與CPU直接交互,馮諾依曼引入了內(nèi)存的概念,在CPU與輸入輸出設(shè)備之間設(shè)計(jì)了一個存儲器,即內(nèi)存。
內(nèi)存有個特點(diǎn)就是,比輸入設(shè)備和輸出設(shè)備要快很多,但是比CPU又要慢?,F(xiàn)在內(nèi)存就處于慢設(shè)備和快設(shè)備之間,是一個不快也不慢的設(shè)備,能夠在該體系結(jié)構(gòu)當(dāng)中就起到一個緩沖的作用。
從此以后,CPU只能對內(nèi)存進(jìn)行讀寫,不能直接訪問外設(shè)。
外設(shè)要輸入或輸出數(shù)據(jù)時,也只能寫入內(nèi)存或者從內(nèi)存中讀取。
總結(jié)一下現(xiàn)在整個數(shù)據(jù)流動的過程
用戶輸入的數(shù)據(jù)先放到內(nèi)存當(dāng)中,CPU讀取數(shù)據(jù)的時候就直接從內(nèi)存當(dāng)中讀取,CPU處理完數(shù)據(jù)后又寫回內(nèi)存當(dāng)中,然后內(nèi)存再將數(shù)據(jù)輸出到輸出設(shè)備當(dāng)中,最后由輸出設(shè)備進(jìn)行輸出顯示。
疑問:數(shù)據(jù)的流動過程中多了一個內(nèi)存,不應(yīng)該更慢了么?
局部性原理:根據(jù)統(tǒng)計(jì)學(xué)原理,當(dāng)一個數(shù)據(jù)正在被訪問時,那么下一次有很大可能會訪問其周圍的數(shù)據(jù)。所以當(dāng)CPU需要獲取某一行數(shù)據(jù)時,內(nèi)存可以將該行數(shù)據(jù)之后的數(shù)據(jù)一同加載進(jìn)來,而CPU處理數(shù)據(jù)和內(nèi)存加載數(shù)據(jù)是可以同時進(jìn)行的,這樣下次CPU就可以直接從內(nèi)存當(dāng)中獲取數(shù)據(jù)。
輸出數(shù)據(jù)的時候也一樣,CPU處理完數(shù)據(jù)后直接將數(shù)據(jù)放到內(nèi)存當(dāng)中,當(dāng)輸出設(shè)備需要時再在內(nèi)存當(dāng)中獲取即可,這也就有了我們平常所說的緩沖區(qū)的概念。
例如,緩沖區(qū)滿了才將數(shù)據(jù)打印到屏幕上,使用fflush函數(shù)將緩沖區(qū)當(dāng)中的數(shù)據(jù)直接輸出,都是將內(nèi)存當(dāng)中的數(shù)據(jù)直接拿到輸出設(shè)備當(dāng)中進(jìn)行顯示輸出。
2.操作系統(tǒng)(OS)
操作系統(tǒng)是進(jìn)行軟硬件資源管理的軟件。
當(dāng)我們開機(jī)時,計(jì)算機(jī)第一個加載的軟件就是操作系統(tǒng)。
我們可以將操作系統(tǒng)抽象理解為管理者。
那在現(xiàn)實(shí)生活中一個好的管理者必須具有如下素質(zhì):管理好下屬,服務(wù)好客戶。
映射到操作系統(tǒng):
- 對下管理好軟硬件資源
- 對上提供良好(穩(wěn)定、高效、安全)的運(yùn)行環(huán)境
(1)用戶到操作系統(tǒng)再到底層是如何組織的?
首先我們從操作系統(tǒng)層向下研究:?
如圖,很顯然校長不會直接對你進(jìn)行管理,一般在你和校長之間還有一層甚至幾層的次級管理者,比如輔導(dǎo)員。
那映射到計(jì)算機(jī)也是同樣的:
在操作系統(tǒng)與底層硬件之間存在著驅(qū)動程序,由驅(qū)動程序來控制硬件的一些操作,并且驅(qū)動程序一般都是由硬件的生產(chǎn)商提供,這樣在硬件的操作方式改變時,我們只需要對驅(qū)動程序進(jìn)行相應(yīng)的更改,而無需對操作系統(tǒng)進(jìn)行重新設(shè)計(jì)。
然后我們向上研究:
在用戶與操作系統(tǒng)之間又存在怎樣的設(shè)計(jì)呢?
首先用戶一定是好人么,操作系統(tǒng)我們可以抽象為金庫,當(dāng)用戶需要取錢時,我們可以讓用戶自己到金庫中取么,當(dāng)然不能,群眾中有壞人怎么辦?
所以操作系統(tǒng)為了保護(hù)自己,隔絕用戶的危險操作,設(shè)計(jì)出了系統(tǒng)調(diào)用接口。
但普通用戶怎么知道如何使用這些接口呢,因?yàn)橐褂孟到y(tǒng)調(diào)用前提條件是你得對系統(tǒng)有一定了解。
所以在系統(tǒng)調(diào)用接口之上又構(gòu)建出了一批庫,例如libc和libc++,我們可以稱之為用戶操作接口。
實(shí)際上在語言級別上使用的各種庫,就是封裝了系統(tǒng)調(diào)用接口的,我們就是通過調(diào)用這些庫當(dāng)中的各種函數(shù)(例如printf和scanf)進(jìn)行各種程序的編寫。
(2)計(jì)算機(jī)是如何管理軟硬件資源的?
首先什么是管理?
校長管理你需要和你見面么?
答案當(dāng)然是不需要,因?yàn)?span style="color:#1c7331;">管理的本質(zhì)不是對人進(jìn)行管理,而是對信息的管理。
描述
那你的信息如何用計(jì)算機(jī)語言來描述呢?
在C語言中,我們一般使用結(jié)構(gòu)體。
在C++、JAVA這種面向?qū)ο蟮母呒壵Z言中,我們使用類和對象。
組織
那當(dāng)學(xué)生數(shù)量很多的時候,校長就需要將這些學(xué)生用某種數(shù)據(jù)結(jié)構(gòu)(STL容器)組織起來。
- 所以管理我們可以總結(jié)為:先描述,再組織。?
所有的計(jì)算機(jī)語言都遵循這一規(guī)則。
那計(jì)算機(jī)是如何管理軟硬件資源的呢?
我相信大家肯定已經(jīng)猜到了,一樣的道理,我們可以把軟硬件資源也描述為一個結(jié)構(gòu)體或者類和對象,然后利用某種數(shù)據(jù)結(jié)構(gòu)將他們組織起來,就在計(jì)算機(jī)層面上實(shí)現(xiàn)了對軟硬件資源的管理。
=========================================================================
如果你對該系列文章有興趣的話,歡迎持續(xù)關(guān)注博主動態(tài),博主會持續(xù)輸出優(yōu)質(zhì)內(nèi)容
??博主很需要大家的支持,你的支持是我創(chuàng)作的不竭動力??
??~ 點(diǎn)贊收藏+關(guān)注 ~??文章來源:http://www.zghlxwxcb.cn/news/detail-751877.html
=========================================================================
到了這里,關(guān)于【Linux】系統(tǒng)初識之馮諾依曼體系結(jié)構(gòu)與操作系統(tǒng)的文章就介紹完了。如果您還想了解更多內(nèi)容,請?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!