目錄
1. 馮諾依曼體系結構
?2. 操作系統(OS)
2.1 概念
2.2 設計OS的目的
2.3 定位
?2.4 理解管理
?3. 系統調用和庫函數概念
?4. 補充
1. 馮諾依曼體系結構
我們常見的計算機,如筆記本。我們不常見的計算機,如服務器,大部分都遵守馮諾依曼體系。
?截至目前,我們所認識的計算機,都是有一個個的硬件組件組成,硬件的各種連接是根據馮諾依曼體系結構連接
輸入單元(設備):包括鍵盤, 鼠標,掃描儀, 寫板,攝像頭,網卡等
中央處理器(CPU):含有運算器和控制器等,運算速度非常快
輸出單元(設備):顯示器,打印機,聲卡,磁盤,網卡等
?數據是要在計算機的體系結構中進行流動的,流動的過程中進行數據的處理
從一個設備到另一個設備,本質是一種拷貝!!!
比如輸入設備的數據拷貝到存儲器,存儲器的數據拷貝到cpu等
數據設備間的拷貝效率決定了計算機整機的基本效率
?存儲:距離CPU越近,效率越高,成本造價越高(比如寄存器)
?關于馮諾依曼,必須強調幾點:
1. 這里的存儲器指的是內存
2. 不考慮緩存情況,這里的CPU能且只能對內存進行讀寫,不能訪問外設(輸入或輸出設備)
3. 外設(輸入或輸出設備)要輸入或者輸出數據,也只能寫入內存或者從內存中讀取。
4. 一句話,所有設備都只能直接和內存打交道。
?為什么要有內存的存在而不是讓輸入設備直接與CPPU進行交互?
輸入設備(如鍵盤、鼠標、磁盤等)與 CPU 的速度差異非常大。輸入設備的速度相對較慢,而 CPU 的處理速度非常快。如果讓輸入設備直接與 CPU 進行交互,CPU 在等待輸入設備的數據時會處于空閑狀態,從而造成資源浪費和系統效率低下。
內存作為介于輸入設備和 CPU 之間的緩沖區域,能夠存儲大量數據,并且可以被 CPU 快速訪問。通過在內存中加載數據,CPU 可以隨時從內存中讀取所需數據,而不必等待輸入設備傳輸數據。此外,多個設備可以共享內存中的數據,實現更高效的數據交換和處理。
內存提供了一個統一的數據存儲和處理區域,使得 CPU 可以方便地訪問和處理數據。輸入設備通常只負責數據輸入和輸出,而數據的處理和存儲更適合由 CPU 和內存來完成。
總的來說:因為輸入設備的效率非常低而CPU的效率非常高,一個處理完了一個還在加載數據,類似于木桶原理,有多個木片組成計算機,效率由輸入輸出設備決定。有了內存后,可以在內存中加載很多數據,cpu讀取數據不是從輸入設備讀取數據了而是從內存中讀取數據這樣整機效率由內存決定
而且有了內存等其他便宜的存儲單元可以使電腦的價格降低
?程序運行為什么要加載到內存中?
程序=代碼+數據? ? ? ? ? 程序“數據”都要被CPU訪問
程序沒有被加載到內存的時候在哪里?在磁盤里,就是一個普通的可執行的二進制文件
又因為磁盤是一個外設設備而CPU只能在內存中讀取代碼和數據所以注定了你的程序只能從外設加載到內存中然后才能被cpu執行(也就是跑起來)
這就是馮諾依曼體系結構的應用
?對馮諾依曼的理解,不能停留在概念上,要深入到對軟件數據流理解上,請解釋,從你登錄上qq開始和某位朋友聊天開始,數據的流動過程。從你打開窗口,開始給他發消息,到他的到消息之后的數據流動過程。
輸入階段: 當你打開 QQ 軟件并開始輸入消息時,鍵盤是輸入設備,它會將你輸入的字符轉換為數字編碼并發送給 CPU 進行處理。CPU 接收到鍵盤輸入的數據后,會將數據存儲到內存中的輸入緩沖區。
處理階段: CPU 接收到輸入數據后,會調用 QQ 軟件的相應功能模塊,比如消息發送模塊。軟件會將你輸入的消息數據從內存中讀取出來,并進行處理,包括對消息內容的格式化、加密等操作。處理完成后,消息數據會被放入內存中的發送緩沖區等待發送。
輸出階段: 處理完成的消息數據會被發送到網絡接口卡,經過網絡協議封裝后通過網絡連接發送給服務器。服務器接收到消息數據后,會將數據傳輸給你的朋友所在的設備。
接收階段: 朋友的設備接收到消息數據后,CPU 將數據存儲到內存中的接收緩沖區。QQ 軟件會從接收緩沖區讀取消息數據,并展示在聊天窗口中。
在整個過程中,數據的流動遵循了馮·諾依曼計算機體系結構的基本原理,即輸入、處理、輸出三個步驟。CPU 作為計算機的核心組件負責控制和協調數據在各個部件之間的流動,而內存作為數據存儲和傳輸的中介承擔著關鍵的角色。通過這樣的數據流動過程,你和朋友之間的聊天交流得以實現。
?2. 操作系統(OS)
電腦開機時需要幾十秒的時間本質是加載我們的操作系統,他是一個為我們進行軟硬件管理的軟件
比如u盤的插入與彈出是操作系統進行硬件的管理
比如對軟件的整個生命周期(下載安裝卸載)等是進行軟件的管理
2.1 概念
任何計算機系統都包含一個基本的程序集合,稱為操作系統(OS)。
籠統的理解(廣義),操作系統包括:
操作系統的內核(進程管理,內存管理,文件管理,驅動管理)
操作系統的外殼周邊程序(例如函數庫,shell程序,圖形化程序等等)-給用戶提供使用操作系統的方式狹義的認識:只是操作系統的內核
2.2 設計OS的目的
如果沒有操作系統就沒有東西管理這些硬件,那么這些硬件是好的還是壞的還是當前什么狀態等就無從得知。操作系統通過驅動程序來與硬件設備進行通信和管理,從而獲取硬件設備的狀態信息,并對其進行控制和監控。
與硬件交互,管理所有的軟硬件資源--手段(對下)
為用戶程序(應用程序)提供一個良好(穩定的,安全的,高效的)的執行環境--目的(對上)
?OS起到一個承上啟下的作用,大概結構圖如下:

OS不是對底層yin?
2.3 定位
在整個計算機軟硬件架構中,操作系統的定位是:一款純正的“搞管理”的軟件
?2.4 理解管理
管理者具有決策權!就比如學校里校長是管理者,學生是被管理者
但是校長和學生之間并沒有經常接觸但是就能管理好,說明管理者和被管理者不需要經常接觸
管理的本質是對被管理者的數據進行管理,拿到你的數據才是目的!
計算機管理硬件:.1. 描述起來,用struct結構體? 2.?組織起來,用鏈表或其他高效的數據結構(用鏈表等管理數據)? ? ? ? ? ?也就是說每個設備我都可以用結構體描述然后用數據結構組織進行增刪查改,當計算機管理硬件時,可以使用結構體(struct)來描述每個硬件設備的屬性,并使用鏈表或其他高效的數據結構來組織這些硬件設備。
任何管理都是先把被管理對象描述起來后組織
這就是我們為什么學數據結構,因為數據結構他討論的是如何對一個一個對象如何管理的學科,不同的數據結構決定了管理的側重點和效率。就比如我們的容器本質就是數據結構,以及C++所謂的封裝本質是描述對象而STL就是組織對象的方式!(STL就是容器)
凡是要對特定的對象進行管理都是先描述(比如c++的類就是描述)后組織
?3. 系統調用和庫函數概念
在開發角度,操作系統對外會表現為一個整體,但是會暴露自己的部分接口,供上層開發使用,這部分由操作系統提供的接口,叫做系統調用。
系統調用在使用上,功能比較基礎,對用戶的要求相對也比較高,所以,有心的開發者可以對部分系統 調用進行適度封裝,從而形成庫,有了庫,就很有利于更上層用戶或者開發者進行二次開發。
具體的操作系統圖:
有接口是為了操作系統的安全,防止我們用戶對操作系統進行破壞,就比如銀行一樣我們進不去銀行的柜臺它只提供窗口也是為了安全,為什么只提供窗口因為銀行不相信任何人也就是群眾中有壞人。
接口的設計確實是為了操作系統的安全性考慮。接口提供了一種受控的方式,讓應用程序或用戶與操作系統進行交互,同時限制了對操作系統內部的直接訪問,從而降低了潛在的破壞風險
?4. 補充
?指針的大小(即地址本身的大小)通常由操作系統的位數決定,而指針運算時的步長則取決于指針所指向的數據類型的大小。
#include <stdio.h> int main() {int arr[] = {1,2,3,4,5};short *p = (short*)arr;int i = 0;for(i=0; i<4; i++){*(p+i) = 0;}for(i=0; i<5; i++){printf("%d ", arr[i]);}return 0; }
結果為0 0 3 4 5
在32位系統上,指針 p 的大小仍然是4個字節,而每次對 p 進行指針運算時,會按照指向的數據類型大小來進行偏移,即每次偏移2個字節。而一個數據是四個字節,所以移動四次是改變兩個數據