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