計算機硬體的五大核心元件
- 控制器:計算機的指揮系統,負責控制所有硬體的執行
- 運算器:負責數學運算和邏輯運算
- 儲存器:
記憶體:比如記憶體條,基於電存取資料,斷點資料全部丟失;用於臨時儲存資料,存取速度快;
外存:用於永久儲存資料,斷電資料仍然存在;
1.機械硬碟:存取資料慢,基於磁存取資料
2.固態硬碟(SSD):依賴電子存取資料,相對機械硬碟速度較快 - 輸入裝置:鍵盤、滑鼠、麥克風等等
- 輸出裝置:顯示器、耳機、印表機等等
程式最先是存放於硬碟中的;
程式的執行需要先經歷載入的過程:程式的程式碼/資料從硬碟讀入記憶體;
然後cpu再從記憶體中讀取指令來執行;
CPU
控制器 + 運算器 + 暫存器 = cpu(中央處理器)
- 運算器 負責算術運算(+ - * / 基本運算和附加運算)和邏輯運算(包括 移位、邏輯測試或比較兩個值等)。
- 控制器 負責應對所有的資訊情況,排程運算器把計算做好。
- 暫存器 它們可用來暫存指令、資料和地址。既要對接控制器的命令,傳達命令給運算器;還要幫運算器記錄處理完或者將要處理的資料。
記憶體儲存器
它用於暫時存放CPU中的運算資料,記憶體儲器與硬碟等外部儲存器交換的資料。
- 主儲存器(RAM):RAM作為主記憶體,臨時儲存計算機正在執行的資料和程式,它具有快速的讀寫速度和較大的容量,能夠提高計算機的執行速度和多工處理能力。
- 只讀儲存器(ROM):而ROM作為只讀儲存器,包含了固定的資料,如啟動程式、韌體等。它在計算機啟動時被讀取和執行,為計算機提供必要的初始化和啟動操作。
Linux系統會把記憶體分為兩種區域:
- buffer(緩衝區):儲存一大波cpu處理好的資料放入硬碟
- cache(快取):把硬碟的資料在記憶體中快取好,cpu取的時候可以直接從記憶體取
快取機制
快取(Cache)是一種將資料副本臨時儲存在可快速訪問的儲存記憶體中的技術。快取將最近使用的資料儲存在小記憶體中,以提高訪問資料的速度。它充當 RAM 和 CPU 之間的緩衝區,從而提高處理器可用資料的速度。
引入快取機制主要彌補CPU和記憶體之間速度的差異。
在CPU中快取分為很多級別,一級快取、二級快取、三級快取,級別越低,速度越接近CPU。CPU和一級快取互動,一級快取沒有資料,需要從二級快取置換資料到一級快取,逐級置換。
NUMA的設計,提高了CPU訪問記憶體和外設的速率,奈何CPU處理速率遠遠超過了記憶體的吞吐速率,就給CPU帶來了不必要的開銷。一般地,CPU從DDR中取指令,大概需要花費幾百個時鐘週期,在這幾百個時鐘週期中,處理器除了等待什麼也不能做。於是有了Cache(Cache主要有3級)。
- 通寫(寫通):write_through 是CPU寫入快取記憶體的資料同時也到寫到主存中。
- 回寫(寫回):write_back 是CPU寫入快取記憶體的資料並不同步到主存中,當這些資料要被丟棄的時候才寫回主存。
- 寫時申請:write_allocate 是在CPU寫cache未命中時,它會將資料寫入主存,並將寫入主存地址處的記憶體塊放到快取記憶體中,供CPU下次訪問時使用。
匯流排
在計算機中,如果不同的裝置想要交換資料,它們必須透過某個通道(即匯流排)進行交換。匯流排是用於在計算機的各個功能部件之間傳輸資訊的通用通訊幹線。它是一種由電線組成的傳輸線束。PCI 和 PCIe 都是匯流排。
- PCI、PCI-X:匯流排體系結構是多點(multi-drop)並行互連匯流排,其中多臺裝置共享一條匯流排,在一條PCI匯流排上可以掛接多個PCI裝置,這些PCI裝置透過一系列訊號線與PCI匯流排相連,這些訊號由地址/資料訊號、控制訊號、仲裁訊號、中斷訊號等組成,是透過匯流排週期來實現的;
- PCIe:能後實現兩臺裝置之間的通訊的序列、點對點型別的互連,多個PCIe裝置使用交換器(Switch)實現互連;採用基於交換器的技術來互連大量裝置,在序列互連上進行通訊是利用基於資料包的通訊協議來實現的。
定址
CPU最大能查詢多大範圍的地址叫做定址能力 ,CPU的定址能力以位元組為單位 ,如32位定址的CPU可以定址2的32次方大小的地址也就是4G,這也是32位的CPU最大能搭配4G記憶體的原因 ,再多的話CPU就找不到了。
-
地址匯流排的位數
概念:地址匯流排的位數表示地址匯流排中包含的獨立地址訊號線數量,每根線代表一個位(0或1)。地址匯流排的位數決定了能夠表示的不同地址的數量。 地址匯流排的位數是指地址匯流排上包含的二進位制位數,它決定了地址匯流排能夠傳輸的不同地址數。例如,一個32位地址匯流排可以傳輸32位的地址資訊。
例如,一個32位地址匯流排可以表示2^32個不同的地址 2^32B=4G 也就相當於最大儲存空間按,因為每一位可以有兩種狀態(0或1),所以232等於大約42億。16G=234B 8G=2^33B -
地址匯流排的寬度
概念:地址匯流排的寬度是指地址匯流排的位數,它表示了可以訪問的記憶體地址範圍。地址匯流排的寬度是指地址匯流排中包含的物理連線線數量,每根線對應地址的一個位。例如,一個32位地址匯流排有32根連線線。
例如,一個32位地址匯流排有32根訊號線,每根線對應一個二進位制位,它可以表示2^32個不同的地址。 -
CPU訪問空間的大小
概念:CPU訪問空間的大小表示CPU能夠訪問的記憶體地址範圍。它是由地址匯流排的寬度決定的。
例如,如果CPU的地址匯流排是32位寬度,那麼它可以訪問2^32個不同的記憶體地址,這就是CPU的訪問空間大小。CPU訪問空間的大小是指CPU可以定址的記憶體範圍,它受限於地址匯流排的位數和寬度。CPU訪問空間的大小通常以位元組為單位。
CPU主頻
CPU頻率,就是CPU的時脈頻率,簡單說是CPU運算時的工作的頻率(1秒內發生的同步脈衝數)的簡稱。單位是Hz。它決定計算機的執行速度。
作業系統
作業系統是控制管理計算機系統的硬軟體,分配排程資源的系統軟體。將底層硬體抽象成虛擬機器。
- 功能
- 統一管理計算機資源:處理器資源,IO裝置資源,儲存器資源,檔案資源;
- 實現了對計算機資源的抽象:IO裝置管理軟體提供讀寫介面,檔案管理軟體提供操作檔案接;
- 對上提供了使用者與計算機之間的介面:GUI(圖形使用者介面),命令形式,系統呼叫形式。
- 特徵
最基本的特徵,互為存在條件:併發,共享;
- 並行:指兩個或多個事件可以在同一個時刻發生,多核CPU可以實現並行,一個cpu同一時刻只有一個程式在執行;
- 併發:指兩個或多個事件可以在同一個時間間隔發生,使用者看起來是每個程式都在執行,實際上是每個程式都交替執行。
- 共享性:作業系統的中資源可供多個併發的程式共同使用,這種形式稱之為資源共享。
- 虛擬性:表現為把一個物理實體轉變為若干個邏輯實體。
- 非同步性:在多道程式環境下,允許多個程序併發執行,但由於資源等因素的限制,使程序的執行以“停停走走”的方式執行,而且每個程序執行的情況(執行、暫停、速度、完成)也是未知的。
頁表、頁目錄
在x86系統中,為了能夠更加充分、靈活的使用實體記憶體,把實體記憶體按照4KB的單位進行分頁。然後透過中間的對映表,把連續的虛擬記憶體空間,對映到離散的實體記憶體空間。
對映表中的每一個表項,都指向一個物理頁的開始地址。但是這樣的對映表有一個明顯的缺點,對映表自身也是需儲存在實體記憶體中的。
在 32 位系統中,它使用了多達4MB的實體記憶體空間(每個表項4個位元組,一共有4G/4K個表項)。為了解決這個問題,x86處理器使用了兩級轉換:頁目錄和頁表。
- 線性地址空間:每個程序得到的記憶體是由核心把記憶體不連續的記憶體頁組成的一個記憶體空間,此空間是邏輯的空間,虛擬的記憶體,
- 線性地址空間:真實的記憶體空間叫做實體地址空間
- 頁(page):頁指一系列的線性地址和包含於其中的資料
- 頁框(pageframe):分頁單元認為所有的RAM被分成了固定長度的頁框每個頁框可以包含一頁,也就是說一個頁框的長度和一個頁的長度是一樣的頁框是記憶體的一部分,是一個實際的儲存區域。頁只是一組資料塊,可以存放在任何頁框中也就是說頁對應的是線性地址的東西 而頁框對應的是實體地址 是實際的儲存區域。
- 頁目錄:在頁目錄中,每一個表項指向一個頁表的開始地址(實體地址)。作業系統在載入使用者程式的時候,不僅僅需要分配實體記憶體,來存放程式的內容;而且還需要分配實體記憶體,用來儲存程式的頁目錄和頁表。
核心
核心指的是一個提供硬體抽象層、磁碟及檔案系統控制、多工等功能的系統軟體。
核心是作業系統最基本的部分。它是為眾多應用程式提供對計算機硬體的安全訪問的一部分軟體,這種訪問是有限的,並且核心決定一個程式在什麼時候對某部分硬體操作多長時間。直接對硬體操作是非常複雜的,所以核心通常提供一種硬體抽象的方法來完成這些操作。硬體抽象隱藏了複雜性,為應用軟體和硬體提供了一套簡潔,統一的介面,使程式設計更為簡單。
核心是作業系統非常重要的組成部分,同時也是作業系統的核心。核心管理著系統資源,核心向上連線著應用程式,向下連線著硬體,它是應用程式和硬體的橋樑。
簡單來說,核心就是為操作繫系統提供驅動、記憶體管理、網路、IO等功能的軟體程式碼。
CPU的工作模式
- 核心態:核心態的CPU,可以執行指令集中的所有指令,並使用硬體的所有功能。
- 使用者態:使用者態的CPU,只允許執行指令集中的部分指令。一般而言,IO相關和把記憶體保護相關的所有執行在使用者態下都是被禁止的,此外其它一些特權指令也是被禁止的,比如使用者態下不能將PSW的模式設定控制位設定成核心態。
使用者態CPU想要執行特權操作,需要發起系統呼叫來請求核心幫忙完成對應的操作。其實是在發起系統呼叫後,CPU會執行trap指令陷入(trap)到核心。當特權操作完成後,需要執行一個指令讓CPU返回到使用者態。了系統呼叫會陷入核心,更多的是硬體會引起trap行為陷入核心,使得CPU控制權可以回到作業系統,以便作業系統去決定如何處理硬體異常。
使用者程序需要訪問硬體資源需要切換成核心模式,這個過程需要發起系統呼叫。
程序
- 狹義定義:程序就是一段程式的執行過程。
- 廣義定義:程序是一個具有一定獨立功能的程式關於某個資料集合的一次執行活動。它是作業系統動態執行的基本單元,在傳統的作業系統中,程序既是基本的分配單元,也是基本的執行單元。
- Linux程序結構
可由三部分組成:程式碼段、資料段、堆疊段。也就是程式、資料、程序控制塊PCB(Process Control Block)組成。程序控制塊是程序存在的惟一標識,系統透過PCB的存在而感知程序的存在。
系統透過PCB對程序進行管理和排程。PCB包括建立程序、執行程式、退出程序以及改變程序的優先順序等。而程序中的PCB用一個名為task_struct的結構體來表示,定義在include/linux/sched.h中,每當建立一新程序時,便在記憶體中申請一個空的task_struct結構,填入所需資訊,同時,指向該結構的指標也被加入到task陣列中,所有程序控制塊都儲存在task[]陣列中。
- 程序的狀態
- 就緒狀態:程序已獲得除處理器外的所需資源,等待分配處理器資源;只要分配了處理器程序就可執行。就緒程序可以按多個優先順序來劃分佇列。例如,當一個程序由於時間片用完而進入就緒狀態時,排入低優先順序佇列;當程序由I/O操作完成而進入就緒狀態時,排入高優先順序佇列。
- 執行狀態:程序佔用處理器資源;處於此狀態的程序的數目小於等於處理器的數目。在沒有其他程序可以 執行時(如所有程序都在阻塞狀態),通常會自動執行系統的空閒程序。
- 阻塞狀態:由於程序等待某種條件(如I/O操作或程序同步),在條件滿足之前無法繼續執行。該事件發生 前即使把處理機分配給該程序,也無法執行。
- 程序的型別
- 互動程序:由一個shell啟動的程序。互動程序既可以在前臺執行,也可以在後臺執行。
- 批處理程序:這種程序和終端沒有聯絡,是一個程序序列。
- 監控程序(也稱守護程序):Linux系統啟動時啟動的程序,並在後臺執行。
檔案描述符
在Linux系統中一切皆可以看成是檔案,檔案又可分為:普通檔案、目錄檔案、連結檔案和裝置檔案。
檔案描述符(file descriptor)是核心為了高效管理已被開啟的檔案所建立的索引(fd),其是一個非負整數(通常是小整數),檔案描述符fd和檔案file指標是檔案描述符表的重要內容,用於指代被開啟的檔案,所有執行I/O操作的系統呼叫都透過檔案描述符。
每個程序剛剛啟動的時候,0是標準輸入,1是標準輸出,2是標準錯誤。如果此時去開啟一個新的檔案,它的檔案描述符會是3,再去開啟一個檔案(可以是再次開啟同一個檔案),檔案描述符fd就會遞增。POSIX標準要求每次開啟檔案時(含socket)必須使用當前程序中最小可用的檔案描述符號碼,因此,在網路通訊過程中稍不注意就有可能造成串話。
- 一個Linux程序啟動後,會在核心空間建立一個PCB程序控制塊,PCB是一個程序的私有財產。
- 這個PCB中有一個已開啟檔案描述符表,記錄著所有該程序開啟的檔案描述符以及對應的file結構體地址。
- 預設情況下,啟動一個Linux程序後,會開啟三個檔案,分別是標準輸入、標準輸出、標準錯誤分別使用了0、1 、2號檔案描述符。
- 當該程序使用函式open開啟一個新的檔案時,一般會在核心空間申請一個file結構體,並且把3號檔案描述符對應的file指標指向file結構體,file結構體包含指向v-node節點的指標。再去開啟一個檔案(可以是再次開啟同一個檔案),檔案描述符fd就會遞增,並且file指標會指向新建立的file結構體。
- Linux(在 x86 上)中的程序描述符儲存在核心資料段中
參考和轉載
https://blog.csdn.net/S_o_l_o_n/article/details/102518959
https://blog.csdn.net/Royalic/article/details/119999404
https://zhuanlan.zhihu.com/p/421006318
https://blog.csdn.net/weixin_47187147/article/details/124860553