五月天青色头像情侣网名,国产亚洲av片在线观看18女人,黑人巨茎大战俄罗斯美女,扒下她的小内裤打屁股

歡迎光臨散文網(wǎng) 會(huì)員登陸 & 注冊(cè)

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

2022-10-18 20:41 作者:補(bǔ)給站Linux內(nèi)核  | 我要投稿

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



C++中的new:

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

答案是運(yùn)行在用戶態(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)存讀寫指令時(shí)MMU會(huì)將虛擬內(nèi)存轉(zhuǎn)換為物理內(nèi)存。


【文章福利】小編推薦自己的Linux內(nèi)核技術(shù)交流群:【891587639】整理了一些個(gè)人覺(jué)得比較好的學(xué)習(xí)書籍、視頻資料共享在群文件里面,有需要的可以自行添加哦?。。。ê曨l教程、電子書、實(shí)戰(zhàn)項(xiàng)目及代碼)??

接下來(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ò)寫特定的寄存器。

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



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

接下來(lái)的問(wèn)題是什么時(shí)候?qū)㈨?yè)表寫入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í)際上如果你去看類似x86這樣的處理器編程手冊(cè)時(shí)就會(huì)發(fā)現(xiàn),我們?cè)诓僮飨到y(tǒng)課中熟悉的很多概念其實(shí)是處理器這種硬件提供的,操作系統(tǒng)僅僅是利用這些硬件的一層軟件。

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






驚!CPU竟然才是管理內(nèi)存的大BOSS ?的評(píng)論 (共 條)

分享到微博請(qǐng)遵守國(guó)家法律
松江区| 开封市| 迁安市| 儋州市| 交口县| 宜兴市| 黎城县| 申扎县| 讷河市| 襄城县| 财经| 南安市| 三亚市| 板桥市| 柘城县| 石渠县| 安吉县| 理塘县| 曲阜市| 嘉善县| 青河县| 额济纳旗| 陆河县| 房产| 兴海县| 汉川市| 桑植县| 隆德县| 仙居县| 上栗县| 修文县| 日喀则市| 广丰县| 吉木萨尔县| 江达县| 巴塘县| 长海县| 和龙市| 婺源县| 广汉市| 龙南县|