偷偷摘套内射激情视频,久久精品99国产国产精,中文字幕无线乱码人妻,中文在线中文a,性爽19p

CPU是如何訪問(wèn)內(nèi)存的?

運(yùn)維 系統(tǒng)運(yùn)維
內(nèi)存管理是一個(gè)復(fù)雜的模塊,它涉及到硬件的交互和復(fù)雜的軟件算法。本片文章我們就來(lái)講解下硬件原理和分頁(yè)管理。

在之前的《Linux內(nèi)存管理》文章中,我們大致講解了Linux內(nèi)存管理的體系架構(gòu)和映射過(guò)程。當(dāng)然內(nèi)存管理是一個(gè)復(fù)雜的模塊。它涉及到硬件的交互和復(fù)雜的軟件算法。本片文章我們就來(lái)講解下硬件原理和分頁(yè)管理。

CPU如果訪問(wèn)內(nèi)存?

答案很簡(jiǎn)單,通過(guò)內(nèi)存管理單元(MMU),我們先看一張很簡(jiǎn)單的CPU訪問(wèn)內(nèi)存的流程圖:

CPU是如何訪問(wèn)內(nèi)存的?

TLB:轉(zhuǎn)換lookaside 緩存,有了它可以讓虛擬地址到物理地址轉(zhuǎn)換速度大增。

從上圖中我們可以清楚的知道了,CPU,DDR,MMU它們?nèi)咧g的關(guān)系。CPU在MMU開(kāi)啟的情況下,訪問(wèn)的都是虛擬地址。首先通過(guò)MMU將虛擬地址轉(zhuǎn)換為物理地址,然后再通過(guò)總線(xiàn)上去訪問(wèn)內(nèi)存(我們都知道內(nèi)存是掛在總線(xiàn)上的)。

那MMU是怎么將虛擬地址轉(zhuǎn)換為物理地址呢?當(dāng)然之前的文章也講過(guò)了,是通過(guò)頁(yè)表的方式。MMU從頁(yè)表中查出虛擬地址對(duì)應(yīng)的物理地址是什么,然后就去訪問(wèn)物理內(nèi)存了。

所以搞懂了上面的問(wèn)題,也就解決了標(biāo)題的問(wèn)題:《CPU如何訪問(wèn)內(nèi)存的?》

頁(yè)表是什么?頁(yè)表就是一種特殊的數(shù)據(jù)結(jié)構(gòu),它保存的是邏輯頁(yè)和物理頁(yè)幀的映射關(guān)系,而且每一個(gè)進(jìn)程都各自擁有自己的頁(yè)表。

虛擬地址在我們看來(lái)是一個(gè)整體,其實(shí)不然,它是可以拆分的??梢苑譃椋?/p>

  • p(頁(yè)號(hào)),它可以存儲(chǔ)頁(yè)表的索引;
  • d(偏移),可以在頁(yè)內(nèi)進(jìn)行地址偏移

我們假設(shè)頁(yè)大小為4KB,而且頁(yè)表只有一級(jí),也就是一級(jí)頁(yè)表。那虛擬地址的拆分后的樣子是這樣的:

下面我們來(lái)看下CPU,虛擬地址,頁(yè)表和物理地址之間的關(guān)系??聪聢D:

很簡(jiǎn)單的吧,應(yīng)該看懂了吧。我們可以發(fā)現(xiàn)如果采用一級(jí)頁(yè)表的話(huà),每個(gè)進(jìn)程需要維護(hù)一個(gè)4MB大小的頁(yè)表(我們可以算下,如果是32位平臺(tái),地址空間大小為4GB,頁(yè)面大小為4KB,每個(gè)頁(yè)表項(xiàng)占用4字節(jié),所以4GB/4KB*4=4MB)。

因?yàn)槊總€(gè)進(jìn)程都有自己的頁(yè)表,所以在多進(jìn)程的情況下,內(nèi)存消耗簡(jiǎn)直驚人。所以一級(jí)頁(yè)表是不合理的。那有沒(méi)有優(yōu)化的辦法呢?答案是有的,就是利用多級(jí)頁(yè)表,可以節(jié)省內(nèi)存。

二級(jí)頁(yè)表就是將頁(yè)表再次分頁(yè)。再次舉例,將邏輯地址分為10位頁(yè)碼p1+10位頁(yè)碼p2+12位頁(yè)偏移。我們直接看圖吧。

訪問(wèn)過(guò)程如下圖:

責(zé)任編輯:趙寧寧 來(lái)源: 今日頭條
相關(guān)推薦

2018-12-06 12:58:50

CPU內(nèi)存模塊

2021-05-10 08:20:32

CPU 符號(hào)整數(shù)

2020-07-28 08:10:33

Linux內(nèi)存虛擬

2024-09-09 09:41:03

內(nèi)存溢出golang開(kāi)發(fā)者

2021-07-28 07:53:20

CPU 線(xiàn)程切換

2019-10-16 00:06:08

CPU內(nèi)存存儲(chǔ)

2021-04-08 09:32:17

鴻蒙HarmonyOS應(yīng)用

2019-02-28 14:04:28

內(nèi)存固定分配存儲(chǔ)

2023-03-05 22:30:25

JavaCPU

2018-08-16 11:30:12

JavaCPU緩存

2019-08-16 14:18:38

CPU故障

2020-11-10 08:41:51

CPU執(zhí)行任務(wù)內(nèi)存

2021-11-10 09:15:00

CPU01 二進(jìn)制Linux

2009-02-16 18:08:01

linux硬件信息cpu

2023-10-17 00:01:34

Linux操作系統(tǒng)

2019-08-19 08:01:50

Flink數(shù)據(jù)管理內(nèi)存

2020-08-11 09:41:27

CPU硬盤(pán)操作系統(tǒng)

2021-09-14 10:21:13

CPU高性能服務(wù)器

2021-08-13 07:56:13

CPU寄存器數(shù)據(jù)

2017-05-08 14:29:11

vCSA6.5CPU內(nèi)存
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)