作業系統系列 CPU和記憶體

2021-10-06 05:04:10 字數 3068 閱讀 6761

作業系統作為所有程式執行的載體,了解其基本組成和執行的邏輯也是十分重要的。雖然要弄明白它的方方面面需要花很長的時間,但作為底層碼弄,弄清楚與平常程式打交到的cpu、記憶體、磁碟等工作原理也十分重要。因此這裡我將學習的過程和知識點做乙個記錄,方便知識的記錄和查詢。

cpu(central processing unit)**儲存單元是一塊超大的積體電路。cpu主要由運算器,控制器,暫存器和內部匯流排等部件組成。

運算器

運算器主要由,算數邏輯單元(alu)、累加暫存器、資料緩衝暫存器、和狀態條件暫存器組成。它是資料加工的處理部件,完成各種算數和邏輯運算。它是執行部件,所有的操作都根據控制器傳送的指令進行,運算器主要有下列兩種功能:

(1)執行所有算數運算,加減乘除基本運算級附加運算

(2)執行所有邏輯運算,如與、或、非、零值測試或兩個值的比較等

運算器各部件功能:

(1)alu(arithmetic and logic unit)負責處理資料,實現對資料的算數運算和邏輯運算

(2)累加暫存器(ac)它是乙個通用暫存器為alu計算時提供乙個工作區

(3)資料緩衝暫存器(dr),通用暫存器快取從記憶體儲器讀取指令或資料字,並為不同時段讀取的資料進行隔離

(4)狀態條件暫存器(psw),儲存有運算器執行算數運算和邏輯運算或測試的結果建立各種條件嗎和內容,儲存當前指令執行結果的狀態。算數運算產生乙個結果,而邏輯運算產生乙個判決

控制器

控制整個cpu的工作,控制器一般包含指令控制邏輯,時序控制邏輯、匯流排控制邏輯和中斷控制邏輯幾個部分。

它的組成部分為:

(1)指令暫存器(ir),cpu讀取指令時先把它從記憶體儲器中讀取到緩衝暫存器,在放入指令暫存器中,指令解碼器解析指令,產生操作命令控制其他部件

(2)程式計數器(pc),也稱指令計數器。指令的執行分為兩種,一種是順序執行,一種是轉移執行。在程式開始執行的時候,將程式的初始位址送如pc中,如果是順序執行則只需要將位址+1,如果是轉移指令則是在當前位址上加上向前或向後的位移量,或者直接給出轉移位址

(3)位址暫存器(ar),ar用於儲存當前cpu所訪問記憶體單元的位址。由於記憶體和cpu在操作的速度上存在著差異,所以需要ar儲存位址,直到記憶體的讀寫完成。

(4)指令解碼器(id),指令分為操作碼和位址碼兩個部分,解碼器就是對操作碼部分進行進行分析,識別出指令規定的操作以向各部件傳送命令。

暫存器組

暫存器組分為通用暫存器和專用暫存器,運算器和控制器中的暫存器為專用暫存器。通用暫存器可有程式設計師規定器用途。

內部匯流排

內部匯流排將處理器的所有結構單元相連,它的寬度可以是8位,16,32,64等

目前比較流行的幾種內部匯流排技術:

i2c,spi,sci

多和cpu是指在一塊cpu晶元上整合多個cpu單元,每個單元都有控制單元,運算單元,中斷處理單元,一級快取和二級快取

記憶體也稱為記憶體儲器或主儲存器

記憶體是外存與cpu溝通的橋梁,所有的應用程式都是執行記憶體中。當作業系統執行時,會將需要計算的資料從記憶體方在cpu進行計算,完成之後在寫回記憶體。

大家都直到計算機其實是使用0和1的電路位來標示資料的,這裡我們只需要直到,向記憶體cpu等部件的物理裝置能儲存這種0和1的電訊號就可以,記憶體中一般包含乙個記憶體位址和具體的用二進位制儲存的記憶體資料。

前面有提到,cpu的控制器的ar中或儲存記憶體儲器的位址,通過位址與記憶體進行互動。

接著來了解一下,平時我們程式所互動的記憶體到底是個什麼樣的結構?

我們先來了解大致了解一下作業系統的記憶體結構:

計算機的主存可以看做是n個連續位元組大小的單元組成的陣列,每個位元組單元有自己的實體地址成為pa

這種cpu直接直接訪問主存的方式有中弊端:

首先所有程序共享記憶體,如果直接使用主存則空間很快會被用光

如果程序間的主存可以互相訪問,則很容易導致物料位址空間被破壞導致程式異常

所以現在作業系統會在cpu和主存總加上一層,虛擬記憶體virtual memory

由mmu將虛擬位址轉換為實際的實體地址。

在32位系統上虛擬位址的空間為2^32bit=4g, 在64位系統上只使用到低48位為2^48bit=256t。使用虛擬位址可以提供更大的位址空間、位址空間連續使程式認為它的記憶體位址空間都是連續的、可以對不同程序間的記憶體進行隔離,同時可以將同一塊物理記憶體對映到兩個虛擬記憶體實現記憶體空間的共享。

這裡我們稍微**一下虛擬位址是如何對映到實體地址的?

(這裡有涉及到記憶體分段和分頁的概念,因為分段存在著許多的壞處,比如記憶體碎片等,因此現在作業系統大部分都是採用分頁模式)

由cpu生成的每個邏輯位址包含兩個部分,p表示頁表中的索引號,d表示偏移量

頁表中存的是每個記憶體的基位址,真是的記憶體位址是通過基位址+偏移量。

頁的大小和幀的大小一致都為2的冪,設定成2的冪次,可以方便cpu將邏輯位址轉為計算頁號和偏移量,如果邏輯位址空間為2^m 次方,頁的大小為2^n次方,那麼邏輯位址的高m-n位則為頁號,低n位表示頁偏移量。按照這種計算方式:

則虛擬位址8轉為二進位制表示為1000, 高2位為2,偏移量為0,2對應頁碼中的基位址為1,則實際記憶體位址為4*1+0=4,所以放在記憶體為4的位置

當乙個程序啟動時,計算機將檢查該程序的大小,並為期查詢空間的記憶體幀。將幀碼一頁一頁放入頁碼列表中。

由於作業系統管理記憶體,因此它必須知道記憶體每一幀的具體狀況。是在用還是空閒。因此作業系統中有乙個幀表的資料結構用以記錄這些內容。

作業系統會為每個程序保留乙個也表的副本,當需要進行虛擬記憶體與物理記憶體轉換的時可以用到。

看下硬體支援

作業系統有自己保持頁表的方法,一般計算機會採用cpu暫存器的方式來儲存也表,但隨著頁表的增大,暫存器容量明顯不足,這時就會使用轉換表緩衝區(tlb)來加速訪問

其機構如下:

作業系統 CPU排程

控制 協調多個程序對cpu的競爭 即按一定的排程演算法從就緒佇列中選擇乙個程序,把cpu的使用權交給被選中的程序 n個程序就緒,等待上m m 1 個cpu執行,需要決策哪個程序分配給哪個cpu執行 排程時機 核心對中斷 異常 系統呼叫處理後返回使用者態時 就緒佇列的改變引發重新排程 如程序正常終止 ...

Linux檢視CPU 記憶體 網絡卡 作業系統資訊

linux檢視cpu 記憶體 網絡卡 作業系統資訊 測試機器的硬體資訊 檢視cpu資訊 型號 cat proc cpuinfo grep name cut f2 d uniq c 8 intel r xeon r cpu e5410 2.33ghz 看到有8個邏輯cpu,也知道了cpu型號 cat ...

記憶體瘋狂換頁!CPU怒批作業系統

我是cpu一號車間的阿q,前一陣子我們廠裡發生了一件大喜事,老闆拉到了一筆投資,準備擴大生產規模。不過老闆挺摳門的,拉到了投資也不給我們漲點工資,就知道讓我們拼命幹活,壓榨我們的勞動力。老闆說了,投資的錢要用來添置裝置,招聘新員工,咱們原來就有八個車間了,這一下直接double,變成了十六個!我們的...