自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

CPU竟然才是管理內(nèi)存的大BOSS ?

商務(wù)辦公
誰(shuí)來(lái)負(fù)責(zé)構(gòu)造頁(yè)表呢?答案是操作系統(tǒng),操作系統(tǒng)負(fù)責(zé)創(chuàng)建頁(yè)表,頁(yè)表本質(zhì)上就是一個(gè)數(shù)組,處理器規(guī)定頁(yè)表的格式,操作系統(tǒng)按照這種格式構(gòu)建好頁(yè)表,創(chuàng)建好后即可告訴CPU。

?家好,我是小風(fēng)哥

對(duì)于C/C++程序員來(lái)說(shuō),內(nèi)存分配再正常不過(guò),C語(yǔ)言中的malloc:

int* a = (int*)malloc(sizeof(int));

C++中的new:

int* a = new int(10);

接下來(lái)的問(wèn)題是變量a占用的內(nèi)存是誰(shuí)給我們分配的呢?

答案是運(yùn)行在用戶(hù)態(tài)的內(nèi)存分配器,如果你愿意,也可以繞過(guò)內(nèi)存分配器自己來(lái)管理內(nèi)存。

接下來(lái)的問(wèn)題是a占用的內(nèi)存在哪里呢?

答案是進(jìn)程地址空間中的堆區(qū),堆區(qū)在這里:

圖片

內(nèi)存中真的有像圖中這樣的布局嗎?

答案是:沒(méi)有。這就是所謂的虛擬內(nèi)存。

既然是虛擬內(nèi)存那么這里的堆區(qū)又是從哪里來(lái)的呢?

答案是操作系統(tǒng)。當(dāng)我們?cè)贑/C++中分配內(nèi)存時(shí),內(nèi)存分配器從堆區(qū)中找到可用內(nèi)存,但如果沒(méi)有找到則向操作系統(tǒng)申請(qǐng)。那么操作系統(tǒng)又是從哪里找到的內(nèi)存呢?

答案是:操作系統(tǒng)從物理內(nèi)存中找到一塊可用內(nèi)存分配出去。

問(wèn)題來(lái)了,既然操作系統(tǒng)管理的是物理內(nèi)存,而操作系統(tǒng)分配給進(jìn)程的又是虛擬內(nèi)存,精神分裂啊有沒(méi)有,這是怎么一回事呢?

原來(lái)這并不沖突,操作系統(tǒng)會(huì)為每個(gè)進(jìn)程分配一張表,記錄了從虛擬內(nèi)存到物理內(nèi)存的映射,這張表就叫頁(yè)表。

圖片

因此,盡管操作系統(tǒng)管理的是物理內(nèi)存,但進(jìn)程或者說(shuō)程序員是看不到物理內(nèi)存的,我們只能看到虛擬內(nèi)存,程序運(yùn)行時(shí)在發(fā)送內(nèi)存讀寫(xiě)指令時(shí)MMU會(huì)將虛擬內(nèi)存轉(zhuǎn)換為物理內(nèi)存。

接下來(lái)的問(wèn)題是頁(yè)表在哪里?

答案是:在內(nèi)存中。

你可以將頁(yè)表放在內(nèi)存中的任何位置上,只要能告訴CPU在哪里即可。

誰(shuí)來(lái)負(fù)責(zé)構(gòu)造頁(yè)表呢?答案是操作系統(tǒng),操作系統(tǒng)負(fù)責(zé)創(chuàng)建頁(yè)表,頁(yè)表本質(zhì)上就是一個(gè)數(shù)組,處理器規(guī)定頁(yè)表的格式,操作系統(tǒng)按照這種格式構(gòu)建好頁(yè)表,創(chuàng)建好后即可告訴CPU。

該怎樣告訴CPU呢?

答案是:通過(guò)寫(xiě)特定的寄存器。

CPU中有特定的寄存器,以x86處理器為例,其中的控制寄存器cr3就用來(lái)保存頁(yè)表的地址,假設(shè)指針pagetable指向頁(yè)表,那么可以這樣設(shè)置:

mov   $(pagetable), %eax
mov %eax, %cr3

pagetable必須是物理地址,頁(yè)表本身就用來(lái)將虛擬地址轉(zhuǎn)為物理地址,因此向cr3中寫(xiě)入虛擬地址是沒(méi)有道理的。

接下來(lái)的問(wèn)題是什么時(shí)候?qū)㈨?yè)表寫(xiě)入cr3寄存器呢?

答案是:很多時(shí)候,操作系統(tǒng)初始化階段、進(jìn)程切換時(shí)等。

現(xiàn)在你應(yīng)該知道了吧,其實(shí)內(nèi)存管理(段式管理、頁(yè)式管理)是處理器提供的一種機(jī)制,操作系統(tǒng)只是這種機(jī)制的使用者,我們常說(shuō)的虛擬內(nèi)存是處理器本身的一種能力,如果處理器本身不提供這種能力,那么操作系統(tǒng)自己是很難高效實(shí)現(xiàn)虛擬內(nèi)存的。

CPU才是管理內(nèi)存真正的大boss。

實(shí)際上如果你去看類(lèi)似x86這樣的處理器編程手冊(cè)時(shí)就會(huì)發(fā)現(xiàn),我們?cè)诓僮飨到y(tǒng)課中熟悉的很多概念其實(shí)是處理器這種硬件提供的,操作系統(tǒng)僅僅是利用這些硬件的一層軟件。

因此,從這個(gè)角度看,操作系統(tǒng)僅僅是CPU的一個(gè)“驅(qū)動(dòng)程序”而已。

責(zé)任編輯:武曉燕 來(lái)源: 碼農(nóng)的荒島求生
相關(guān)推薦

2022-07-20 10:33:50

RustGo內(nèi)存管理

2023-05-22 06:53:43

CPU顯卡電腦

2011-05-23 09:24:09

程序員BOSS

2020-12-28 09:50:50

Python內(nèi)存管理語(yǔ)言

2020-08-03 09:57:52

網(wǎng)絡(luò)安全數(shù)據(jù)技術(shù)

2019-01-02 10:49:54

Tomcat內(nèi)存HotSpot VM

2021-06-11 07:26:16

操作系統(tǒng)內(nèi)存管理Cpu

2018-12-06 12:58:50

CPU內(nèi)存模塊

2019-07-10 05:08:05

CPU內(nèi)存分頁(yè)管理

2021-10-17 23:53:17

內(nèi)存管理方式

2019-03-05 14:37:55

程序員加薪老板

2017-06-02 10:57:29

Android內(nèi)存泄漏Dialog

2019-12-10 14:51:00

CPU緩存內(nèi)存

2021-03-22 11:51:22

Java內(nèi)存棧上

2017-11-02 15:44:11

內(nèi)存降價(jià)價(jià)格

2011-03-25 11:28:35

Cacti數(shù)據(jù)

2009-09-16 13:38:33

運(yùn)維管理

2017-07-19 15:54:30

內(nèi)存硬盤(pán)DDR3

2009-08-14 17:49:07

最好的企業(yè)Wi-Fi

2015-07-02 14:07:19

Boss直聘
點(diǎn)贊
收藏

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