最美情侣中文字幕电影,在线麻豆精品传媒,在线网站高清黄,久久黄色视频

歡迎光臨散文網(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ó)家法律
正定县| 彭泽县| 尼玛县| 阿拉善右旗| 佛冈县| 莱西市| 武平县| 嘉定区| 突泉县| 浪卡子县| 杂多县| 神木县| 和平区| 嘉义县| 福贡县| 吴川市| 浮梁县| 五原县| 浏阳市| 太仓市| 临城县| 德格县| 神农架林区| 玉屏| 乌鲁木齐市| 临沧市| 崇仁县| 邓州市| 抚顺县| 天水市| 上蔡县| 康保县| 北宁市| 施秉县| 高碑店市| 德格县| 习水县| 寻甸| 阜新| 修水县| 板桥市|