文章目錄
- 前言
- 一、馮諾依曼體系
- 馮?諾依曼體系結構推導
- 內存提高馮?諾依曼體系結構效率的方法
- 你用QQ和朋友聊天時數據的流動過程
- 與馮?諾依曼體系結構相關的一些知識
- 二、計算機層次結構分析
- 操作系統(Operator System)
- 驅動層的作用與意義
- 系統調用接口(system call)
- 用戶操作接口
- 三、操作系統管理
- 管理者決策被管理者
- 如何得到被管理者數據
- 庫函數與系統調用的關系
- 總結
前言
??馮諾依曼體系是現代計算機設計的基石,其統一存儲和順序執行理念推動了計算機的發展。結合操作系統、驅動層和系統調用的優化設計,計算機實現了高效的軟硬件協作。
??其實我這個Linux專欄,表面上只是講了操作系統,其實未來我還會穿插 計算機網絡、數據結構與算法、數據庫原理等“四大件內容”
??計算機的一切都是如此脈絡交織,美妙無比,事實上,在我學習Linux的途中,很多知識點會有一種豁然開朗的感覺,有時候也很幸運自己選了一個對我來說這么完美的專業,我愛她,傾注了我巨大的熱情,也希望她能不辜負我,hhhhh
一、馮諾依曼體系
??我們今天所有的計算機都離不開 馮諾依曼 體系,這位偉大的計算機科學家早在二十世紀四十年代就提出了這種結構,即計算機應由五部分組成:輸入設備、存儲器、運算器、控制器、輸出設備
馮?諾依曼體系結構推導
??計算機的作用就是為了解決人的問題,而要解決問題,首先需要將數據或是問題輸入到計算機當中,所以計算機必須要有輸入設備。計算機解決完問題后還需要將計算結果輸出顯示出來,所以計算機必須要有輸出設備。計算機通過輸入設備得到數據,數據在計算機當中進行一系列的算術運算和邏輯運算后,通過輸出設備進行輸出,于是就得到了以下流程圖。
??但是計算機當中只有算術運算功能和邏輯運算功能是不夠的,還需要有控制功能,控制何時從輸入設備獲取數據,何時輸出數據到輸出設備等。對應到C語言當中,算術運算就完成一系列的加減乘除,而邏輯運算就對應于一系列的邏輯與邏輯或等,控制功能就對應于C語言當中的判斷、循環以及各個函數之間的跳轉等等。
??而我們后人就將這個具有算術運算功能、邏輯運算功能以及控制功能的這個模塊稱為中央處理器,簡稱CPU
??但是輸入設備和輸出設備相對于中央處理器來說是非常慢的,于是在當前這個體系整體呈現出來的就是,輸入設備和輸出設備很慢,而CPU很快,根據木桶原理,那么最終整個體系所呈現出來的速度將會是很慢的
??木桶效應:一個水桶所能承接水量的上限并不取決于桶壁上最長的那塊木板,恰恰是取決于最短的那塊
??所以當前這個體系結構顯然是不合適的,于是我們就不讓輸入設備和輸出設備直接與CPU進行交互,而在這中間加入了內存。
??內存有個特點就是,比輸入設備和輸出設備要快很多,但是比CPU又要慢。現在內存就處于慢設備和快設備之間,是一個不快也不慢的設備,能夠在該體系結構當中就起到一個緩沖的作用。
??現在該體系的運行流程就是:用戶輸入的數據先放到內存當中,CPU讀取數據的時候就直接從內存當中讀取,CPU處理完數據后又寫回內存當中,然后內存再將數據輸出到輸出設備當中,最后由輸出設備進行輸出顯示。
??于是就形成了最終的馮諾依曼體系結構
注意: 這里存儲器只是內存,不包括外存。
內存提高馮?諾依曼體系結構效率的方法
??在這里在這里在這里大多數人有一個疑惑就是,先將輸入設備的數據交給內存,再由內存將數據交給CPU,這個過程真的比CPU直接從輸入設備獲取數據更快嗎?
??說明這個問題之前,我們首先需要知道:內存具有數據存儲的能力。雖然內存的大小只有4G/8G,但是既然內存有大小,那么它就有預裝數據的能力,而這就是提高該體系結構效率的秘訣。
??這里不得不說到的就是局部性原理:根據統計學原理,當一個數據正在被訪問時,那么下一次有很大可能會訪問其周圍的數據。所以當CPU需要獲取某一行數據時,內存可以將該行數據之后的數據一同加載進來,而CPU處理數據和內存加載數據是可以同時進行的,這樣下次CPU就可以直接從內存當中獲取數據。
??輸出數據的時候也一樣,CPU處理完數據后直接將數據放到內存當中,當輸出設備需要時再在內存當中獲取即可,這也就有了我們平常所說的緩沖區的概念。例如,緩沖區滿了才將數據打印到屏幕上,使用fflush函數將緩沖區當中的數據直接輸出之類的,都是將內存當中的數據直接拿到輸出設備當中進行顯示輸出。
也就是說,內存的核心作用在于:
- 【利用內存作為緩沖】:通過預先將大量數據加載到內存中,減少CPU直接等待輸入輸出設備的時間。內存的讀取和寫入速度遠高于外設,能夠更快地向CPU提供所需數據。加快數據傳遞速度,為CPU提供高效支持。
- 【分離操作,提升并行性】:CPU從內存中讀取數據與外部設備向內存導入數據這兩個過程可以同時進行。這種并行處理方式避免了串行執行所帶來的效率低下。實現數據流動的并行化,大幅提升整體效率。
你用QQ和朋友聊天時數據的流動過程
??要使用QQ,首先需要聯網,而你和你的朋友的電腦都是馮諾依曼體系結構,在你向朋友發送消息這個過程中,你的電腦當中的鍵盤充當輸入設備、顯示器和網卡充當輸出設備,你朋友的電腦當中的網卡充當輸入設備、顯示器充當輸出設備。
??剛開始你在鍵盤當中輸入消息,鍵盤將消息加載到內存,此時你的顯示器就可以從內存獲取消息進而顯示在你自己的顯示器上,此時你就能在你自己的電腦上看到你所發的消息了。
??在鍵盤將消息加載到內存后,CPU從內存獲取到消息后對消息進行各種封裝,然后再將其寫回內存,此時你的網卡就可以從內存獲取已經封裝好的消息,然后在網絡當中經過一系列處理(這里忽略網絡處理細節),之后你朋友的網卡從網絡當中獲取到你所發的消息后,將該消息加載到內存當中,你朋友的CPU再從內存當中獲取消息并對消息進行解包操作,然后將解包好的消息寫回內存,最后你朋友的顯示器從內存當中獲取消息并顯示在他的電腦上。
與馮?諾依曼體系結構相關的一些知識
??根據馮諾依曼體系結構圖,我們可以知道,站在硬件角度或是數據層面上,CPU只和內存打交道,外設也只和內存打交道。到這里我們也可以說明一個問題:為什么程序運行之前必須先加載到內存?
??因為可執行程序(文件)是在硬盤(外設)上的,而CPU只能從內存當中獲取數據,所以必須先將硬盤上的數據加載到內存,也就是必須先將程序加載到內存。
常見的輸入設備和輸出設備(拓展):
- 輸入設備:鍵盤、鼠標、網卡、硬盤、話筒、攝像頭、掃描儀等。
- 輸出設備:顯示器、音響、網卡、硬盤、打印機等。
??注意: 同種設備在不同場景下可能屬于輸入設備,也可能屬于輸入設備。
??在物理層面上,各個硬件單元之間是通過總線連接的,外設與內存之間的總線叫做IO總線,內存與CPU之間的總線叫做系統總線。
總結一下:
- 計算機只能識別二進制,用戶和計算機不能直接打交道,必須需要通過輸入輸出設備進行交流。關于設備,有純的輸入或輸出,也有兼容輸入輸出設備。
- 中央處理器(CPU):含有運算器和控制器等。
- 不考慮緩存情況,這里的CPU能且只能對內存進行讀寫,不能訪問外設(輸入或輸出設備)外設(輸入或輸出設備)要輸入或者輸出數據,也只能寫入內存或者從內存中讀取簡單來說,所有設備都只能直接和內存打交道。
二、計算機層次結構分析
操作系統(Operator System)
??操作系統是一款管理計算機軟硬件資源的軟件,它向上為應用程序提供穩定的服務接口,向下為硬件提供統一的管理和調度,創造穩定可靠的運行環境。
??每個硬件設備都有其特定的功能,并能夠在馮諾依曼體系下高效運行。然而,僅具備硬件功能還遠遠不夠,因為硬件的操作需要明確的調控和協調。也就是說,何時執行何種功能,必須通過一個統一的管理者來安排,這正是操作系統和程序設計的重要作用。
驅動層的作用與意義
??上層的任何操作最終都會反饋到底層硬件,操作系統接收上層請求后,會調用相關的底層硬件。然而,由于硬件特性不同,可能會導致需要修改硬件或操作系統以適配新設備。為了解決這種問題,在軟件和硬件之間引入了一層驅動層。
??驅動層是一種專門的軟件,每種硬件都有對應的驅動層。它的主要作用不是直接管理軟硬件資源,而是為操作系統提供統一的通信接口,讓操作系統能夠通過標準化的方法訪問和控制硬件設備。例如,操作系統可以通過驅動層讀取硬件信息或發送控制指令,而不需要關心硬件的具體實現細節。
??不論硬件如何變化,只要硬件廠商提供了合適的驅動程序,操作系統就能夠正常管理和使用該硬件。
系統調用接口(system call)
??底層硬件的管理者是操作系統,任何涉及到訪問硬盤的行為,必須通過操作系統進行訪問。操作系統里面本身是對軟硬件資源進行操作,所以操作系統內部會包含所有的軟硬件資源。
所以有一個問題,如果出現用戶想要訪問某種軟硬件資源數據,可不可以直接訪問操作系統特定的數據呢?
??答案是不行,操作系統內部資源是十分重要的,不允許其他用戶直接進行訪問,避免用戶造成內部資源的損壞。然而,用戶仍然需要通過操作系統向底層硬件提出請求并執行操作。
??為此,操作系統設計者使用 C語言 編寫了一系列內部函數接口,這些接口為用戶程序提供了訪問系統資源的標準服務。這些接口被稱為 系統調用(System Call)。
用戶操作接口
??由于系統調用本身的使用難度較高,普通用戶直接使用系統調用可能面臨復雜的操作流程和較高的技術門檻。因此,程序員通常會基于系統調用設計上層的軟件或接口,通過封裝特定的功能和邏輯,提供更簡單、易用的服務。
三、操作系統管理
管理者決策被管理者
??我們可以舉個例子方便理解:評選獎學金:
??將評選獎學金的工作人員看成管理者,而參與評選的學生看成被管理者。
??如果管理者需要對于被管理者需要進行決策,決定獎學金分配。根據我們日常流程可以知道,管理者和被管理者間是不需要見面,管理者會根據被管理者數據進行相關決策。
這也說明管理的本質是通過對于數據進行管理,從而達到對于人的管理。
如何得到被管理者數據
??管理者是負責對被管理者數據進行決策,而被管理者數據是需要通過執行者去執行收集數據。由于人數過多,精力有限,不可能一一去問,所以我們可以使用EXCEL表格進行管理,但是龐大的數據量也是十分的棘手。
??管理者是老練的程序員,想到可以將自己手上的活交給編譯器去做,那么將學生信息封裝到結構體中,在每個結構體內部添加結構體指針用于連接其他包含學生信息的結構體,形成鏈表。
??管理者只需要對鏈表進行管理,對于學生信息數據進行增刪查改轉變為了對鏈表的增刪查改。相對于Excel表可以根據鏈表的特點添加一些方便的接口,比如找到這一堆學生中數學成績最好的學生。
??在計算機體系結構里,我們的OS就相當于管理者,我們的軟硬件資源就相當于被管理者,而我們的驅動程序就相當于是執行者。
庫函數與系統調用的關系
??【場景】:假如有A和B兩個校長,A校長有一個學生數學特別厲害,但是B校長沒有,于是B校長就想跟A校長商量借這個同學來打比賽,但是B校長肯定不能直接去找這個學生,因為這個學生是A校長的人,他得負責,所以他必須要通過A校長的同意才行。
??庫函數必須通過系統調用接口才能與操作系統進行交互,從而訪問底層資源。因此,庫函數與系統調用呈現出上下層關系,可以理解為:
-
系統調用是基礎層
??系統調用是操作系統提供的接口,直接與操作系統內核交互,用于訪問硬件資源或執行關鍵的系統操作(如文件管理、進程控制等)。 -
庫函數是封裝層
??庫函數建立在系統調用之上,進行二次開發,通過封裝復雜的系統調用邏輯,為開發者提供更加簡單、統一的操作接口。例如:printf() 是C標準庫函數,但它最終調用了系統調用 write() 來實現數據輸出。
??總結一下: 管理者管理被管理者,實際上是先將被管理者的各種信息進行描述,然后再將多個被管理者的描述信息根據某種數據結構組織起來,最后管理者管理被管理者實際上就是對數據結構的管理。
先描述,再組織,這是一個很重要的思想,往后我會在教學中不斷提起的!!!
總結
??往下只會越來越難哦,哎,這Linux!!!