有考網(wǎng)有考網(wǎng)合作機(jī)構(gòu)>長(zhǎng)沙培訓(xùn)學(xué)校>長(zhǎng)沙岳麓區(qū)河西CBD達(dá)內(nèi)IT教育培訓(xùn)
長(zhǎng)沙岳麓區(qū)河西CBD達(dá)內(nèi)IT教育培訓(xùn)
全國(guó)統(tǒng)一學(xué)習(xí)專線 8:30-21:00
位置:有考網(wǎng) > 計(jì)算機(jī)類 > linux云計(jì)算 > > Linux內(nèi)存管理是什么?  正文

Linux內(nèi)存管理是什么?

發(fā)布時(shí)間:2021-09-23 15:26:36來(lái)源:轉(zhuǎn)載

很多人對(duì)Linux內(nèi)存管理存在疑問(wèn),小編發(fā)現(xiàn)這個(gè)內(nèi)存管理的知識(shí)點(diǎn)還真的需要專門的去理解一下,今天我們一起來(lái)學(xué)習(xí)學(xué)習(xí)。

1.不涉及l(fā)inux內(nèi)核的匯編知識(shí),僅C語(yǔ)言層面解析

1.回答:匯編主要處理的是寄存器地址(包括內(nèi)容)的計(jì)算,進(jìn)行一部分的地址轉(zhuǎn)換工作(當(dāng)然,它是重要的);C語(yǔ)言處理了極大部分的系統(tǒng)內(nèi)存管理工作。

2.虛擬地址、線性地址、物理地址三者映射關(guān)系

虛擬地址:程序員(在縮小范圍估計(jì)是:應(yīng)用程序員)直接看到的

線性地址:操作系統(tǒng)控制

物理地址:CPU內(nèi)存地址(或者外部?jī)?nèi)存)

總結(jié)一點(diǎn):虛擬地址通過(guò)段管理機(jī)制首先變換成一種中間地址形式--cpu32位的線性地址,然后使用分頁(yè)管理機(jī)制將此地址映射到物理地址。

例子解析:

一個(gè)變量定義在一個(gè)進(jìn)程里面,在程序中使用&操作符獲取的地址(估計(jì)是偏移地址),將怎么映射呢?(或者它是什么地址,在進(jìn)程中的位置如何)

1. 回答:因?yàn)椋绦蚴褂玫亩际翘摂M地址,所以程序員拿到的變量地址是虛擬地址(它是經(jīng)過(guò)編譯器處理過(guò)的,并由系統(tǒng)指映射線性地址,分配物理內(nèi)存的)。

2. 同時(shí),一個(gè)變量的地址(虛擬地址)是不會(huì)改變的(只要程序代碼不改變,或者不在編譯),但是,改變運(yùn)行(不同的時(shí)間,相隔一段時(shí)間在運(yùn)行的話),物理地址是會(huì)改變的。正是因?yàn)椴僮飨到y(tǒng)的內(nèi)存管理作用(線性地址映射到物理地址,是一個(gè)動(dòng)態(tài)的過(guò)程)。

malloc函數(shù)從調(diào)用、分配到返回的過(guò)程是?

1. 回答:函數(shù)調(diào)用系統(tǒng)函數(shù),系統(tǒng)函數(shù)進(jìn)入了內(nèi)核態(tài),引起中斷(或其他,異常處理等工作),操作系統(tǒng)得知需要額外的增長(zhǎng)空間以提供使用,所以使用分頁(yè)機(jī)制來(lái)映射到可以使用的物理地址(沒(méi)有有用數(shù)據(jù),或不被映射),從而使得虛擬地址有了真實(shí)的物理地址映射管理,可以正常使用了。

2. malloc實(shí)際上,并不是用戶調(diào)用malloc后馬上對(duì)物理地址與虛擬地址之間進(jìn)行映射,只有在用戶對(duì)申請(qǐng)的內(nèi)存空間進(jìn)行讀寫異常操作才會(huì)發(fā)生映射。總結(jié)一句:在實(shí)際需要時(shí)才加載執(zhí)行文件中頁(yè)面的方式。

相關(guān)內(nèi)容: Linux Linux云計(jì)算 Linux內(nèi)存管理

同類文章
相關(guān)熱詞