亚洲av成人无遮挡网站在线观看,少妇性bbb搡bbb爽爽爽,亚洲av日韩精品久久久久久,兔费看少妇性l交大片免费,无码少妇一区二区三区

  免費(fèi)注冊 查看新帖 |

Chinaunix

  平臺(tái) 論壇 博客 文庫
12下一頁
最近訪問板塊 發(fā)新帖
查看: 7381 | 回復(fù): 16
打印 上一主題 下一主題

VMALLOC_RESERVE 和 896M [復(fù)制鏈接]

論壇徽章:
0
跳轉(zhuǎn)到指定樓層
1 [收藏(0)] [報(bào)告]
發(fā)表于 2006-01-16 13:57 |只看該作者 |倒序?yàn)g覽
VMALLOC_RESERVE和896M

LINUX 內(nèi)核虛擬地址空間到物理地址空間一般是固定連續(xù)影射的。

假定機(jī)器內(nèi)存為512M,
從3G開始,到3G + 512M 為連續(xù)固定影射區(qū)。zone_dma, zone_normal為這個(gè)區(qū)域的。固定影射的VADDR可以直接使用(get a free page, then use pfn_to_virt()等宏定義轉(zhuǎn)換得到vaddr)或用kmalloc等分配. 這樣的vaddr的物理頁是連續(xù)的。得到的地址也一定在固定影射區(qū)域內(nèi)。

如果內(nèi)存緊張,連續(xù)區(qū)域無法滿足,調(diào)用vmalloc分配是必須的,因?yàn)樗梢詫⑽锢聿贿B續(xù)的空間組合后分配,所以更能滿足分配要求。

但vmalloc分配的vaddr一定不能與固定影射區(qū)域的vaddr重合。因?yàn)関addr到物理頁的影射同時(shí)只能唯一。所以vmalloc得到的vaddr要在3G + 512m 以上才可以。也就是從VMALLOC_START開始分配。 VMALLOC_START比連續(xù)固定影射區(qū)大最大vaddr地址還多8-16M(2*VMALLOC_OFFSET)--有個(gè)鬼公式在

#define VMALLOC_OFFSET  8*1024
#define VMALLOC_START  (high_memory - 2*VMALLOC_OFFSET) & ~(VMALLOC_OFFSET-1)

high_memory 就是固定影射區(qū)域最高處。

空開8-16M做什么? 為了捕獲越界的mm_fault.
同樣,vmalloc每次得到的VADDR空間中間要留一個(gè)PAGE的空(空洞),目的和上面的空開一樣。你vmalloc(100)2次,得到的2個(gè)地址中間相距8K。
如果連續(xù)分配無空洞,那么比如
p1=vmalloc(4096);
p2=vmalloc(4096);
如果p1使用越界到p2中了,也不會(huì)mm_falut. 那不容易debug.

下面說明VMALLOC_RESERVE和896M的問題。

上面假設(shè)機(jī)器物理512M的case. 如果機(jī)器有1G物理內(nèi)存如何是好?那vmalloc()的vaddr是不是要在3G + 1G + 8M 空洞以上分配?超過尋址空間了嗎。
這時(shí),4G 下面保留的VMALLOC_RESERVER 128m 就派上用場了。
也就是說如果物理內(nèi)存超過896M, high_memory也只能在3G + 896地方。可尋址空間最高處要保留VMALLOC_RESREVER 128M給vmalloc用。

所以這128M的VADDR空間是為了vmalloc在物理超過了896M時(shí)候使用。如果物理僅僅有512M, 一般使用不到。因?yàn)閂MALLOC_START很低了。如果vmalloc太多了才會(huì)用到。

high_memory在arch/i386/kernel, mm的初始化中設(shè)置。根據(jù)物理內(nèi)存大小和VMALLOC_RESERVE得到數(shù)值.

所以說那128M僅僅是為了影射1G以上的物理內(nèi)存的不對的。如果物理內(nèi)存2G,1G以下的vmalloc也用那空間影射。

看vmalloc分配的東西可以用


  1. show_vmalloc()
  2. {
  3. struct vm_struct **p, *tmp;

  4.     for(p = &vmlist; (tmp = *p); p = &tmp->next) {
  5.        printk("%p %p %d\n", tmp, tmp->addr, tmp->size

  6.    }
  7. }
復(fù)制代碼


看到。

不全面的地方我還有補(bǔ)充,歡迎討論

[ 本帖最后由 albcamus 于 2006-1-17 09:17 編輯 ]

論壇徽章:
84
每日論壇發(fā)貼之星
日期:2015-12-29 06:20:00每日論壇發(fā)貼之星
日期:2016-01-16 06:20:00每周論壇發(fā)貼之星
日期:2016-01-17 22:22:00程序設(shè)計(jì)版塊每日發(fā)帖之星
日期:2016-01-20 06:20:00每日論壇發(fā)貼之星
日期:2016-01-20 06:20:00程序設(shè)計(jì)版塊每日發(fā)帖之星
日期:2016-01-21 06:20:00每日論壇發(fā)貼之星
日期:2016-01-21 06:20:00程序設(shè)計(jì)版塊每日發(fā)帖之星
日期:2016-01-23 06:20:00程序設(shè)計(jì)版塊每日發(fā)帖之星
日期:2016-01-31 06:20:00數(shù)據(jù)庫技術(shù)版塊每日發(fā)帖之星
日期:2016-01-16 06:20:00程序設(shè)計(jì)版塊每日發(fā)帖之星
日期:2016-01-16 06:20:00程序設(shè)計(jì)版塊每日發(fā)帖之星
日期:2016-01-14 06:20:00
2 [報(bào)告]
發(fā)表于 2006-01-16 16:52 |只看該作者
糾正一下:
2.4.21內(nèi)核 i386 平臺(tái)上的定義:
#define VMALLOC_OFFSET  (8*1024*1024)
#define VMALLOC_START   (((unsigned long) high_memory + 2*VMALLOC_OFFSET-1) & \
                                                ~(VMALLOC_OFFSET-1))
#define VMALLOC_VMADDR(x) ((unsigned long)(x))
#if CONFIG_HIGHMEM
# define VMALLOC_END    (PKMAP_BASE-2*PAGE_SIZE)
#else
# define VMALLOC_END    (FIXADDR_START-2*PAGE_SIZE)
#endif


2.6.9內(nèi)核 i386 平臺(tái)上的定義:
#define VMALLOC_OFFSET        (8*1024*1024)
#define VMALLOC_START        (((unsigned long) high_memory + vmalloc_earlyreserve + \
                        2*VMALLOC_OFFSET-1) & ~(VMALLOC_OFFSET-1))
#ifdef CONFIG_HIGHMEM
# define VMALLOC_END        (PKMAP_BASE-2*PAGE_SIZE)
#else
# define VMALLOC_END        (FIXADDR_START-2*PAGE_SIZE)
#endif

可以看一下ULK 2nd(中文版) 的圖7-7。 英文版就是 Figure 7-7 了
2.6內(nèi)核的對應(yīng) ULK 3rd 的Figure 8-7

[ 本帖最后由 yjh777 于 2006-1-16 17:42 編輯 ]

論壇徽章:
0
3 [報(bào)告]
發(fā)表于 2006-01-16 16:55 |只看該作者
to yjh777.

謝謝。我沒仔細(xì)打字,所以。。。
KMALLOC_RESERVER 應(yīng)該是VMALLOC_RESERVE

本帖子就是針對你的帖子和幾個(gè)人的疑問寫的。對你的理解是否有幫助?

論壇徽章:
0
4 [報(bào)告]
發(fā)表于 2006-01-16 17:00 |只看該作者
to albcamus,

請幫助將題目改了,KMALLOC_RESERVE 應(yīng)該為VMALLOC_RESERVE

謝謝

論壇徽章:
84
每日論壇發(fā)貼之星
日期:2015-12-29 06:20:00每日論壇發(fā)貼之星
日期:2016-01-16 06:20:00每周論壇發(fā)貼之星
日期:2016-01-17 22:22:00程序設(shè)計(jì)版塊每日發(fā)帖之星
日期:2016-01-20 06:20:00每日論壇發(fā)貼之星
日期:2016-01-20 06:20:00程序設(shè)計(jì)版塊每日發(fā)帖之星
日期:2016-01-21 06:20:00每日論壇發(fā)貼之星
日期:2016-01-21 06:20:00程序設(shè)計(jì)版塊每日發(fā)帖之星
日期:2016-01-23 06:20:00程序設(shè)計(jì)版塊每日發(fā)帖之星
日期:2016-01-31 06:20:00數(shù)據(jù)庫技術(shù)版塊每日發(fā)帖之星
日期:2016-01-16 06:20:00程序設(shè)計(jì)版塊每日發(fā)帖之星
日期:2016-01-16 06:20:00程序設(shè)計(jì)版塊每日發(fā)帖之星
日期:2016-01-14 06:20:00
5 [報(bào)告]
發(fā)表于 2006-01-16 17:02 |只看該作者
原帖由 思一克 于 2006-1-16 16:55 發(fā)表
to yjh777.

謝謝。我沒仔細(xì)打字,所以。。。
KMALLOC_RESERVER 應(yīng)該是VMALLOC_RESERVE

本帖子就是針對你的帖子和幾個(gè)人的疑問寫的。對你的理解是否有幫助?


8錯(cuò), 解釋的很透徹。 謝謝

還有一個(gè)問題:就是用戶空間程序,可不可以使用高端內(nèi)存,有幾種方法。

論壇徽章:
0
6 [報(bào)告]
發(fā)表于 2006-01-16 17:10 |只看該作者
我在看。因?yàn)槲覚C(jī)器僅僅512M,所以無法實(shí)驗(yàn)



還有一個(gè)問題:就是用戶空間程序,可不可以使用高端內(nèi)存,有幾種方法!

論壇徽章:
0
7 [報(bào)告]
發(fā)表于 2006-01-16 17:37 |只看該作者
我印象里用戶空間是可以使用高端內(nèi)存的, 只不過不可能超過4G的空間范圍 per 進(jìn)程。
至于如何為用戶進(jìn)程分配高端內(nèi)存則不懂, 這兩天補(bǔ)一下VM。
to 思兄:那個(gè)公式也有筆誤嗎? 我不確定,還是您自個(gè)兒編輯一下吧, 我怕編輯錯(cuò)了

論壇徽章:
0
8 [報(bào)告]
發(fā)表于 2006-01-16 17:54 |只看該作者
用戶空間當(dāng)然可以使用了,而且是正常的使用,內(nèi)核在分配那些不經(jīng)常使用的內(nèi)存時(shí),都用高端內(nèi)存空間(如果有),所謂不經(jīng)常使用是相對來說的,比如內(nèi)核的一些數(shù)據(jù)結(jié)構(gòu)就屬于經(jīng)常使用的,而用戶的一些數(shù)據(jù)就屬于不經(jīng)常使用的。

用戶在啟動(dòng)一個(gè)應(yīng)用程序時(shí),是需要內(nèi)存的,而每個(gè)應(yīng)用程序都有3G的線性地址,給這些地址映射頁表時(shí)就可以直接使用高端內(nèi)存。

而且還要糾正一點(diǎn)的是:那128M內(nèi)存的功能不僅僅是用在這些地方的,如果你要加載一個(gè)設(shè)備,而這個(gè)設(shè)備需要映射內(nèi)存到內(nèi)核中,它也需要使用這段線性地址空間來完成,否則內(nèi)核就不能訪問設(shè)備上的內(nèi)存空間了。

論壇徽章:
0
9 [報(bào)告]
發(fā)表于 2006-01-16 18:40 |只看該作者
>> 那128M內(nèi)存的功能不僅僅是用在這些地方的,如果你要加載一個(gè)設(shè)備,而這個(gè)設(shè)備需要映射內(nèi)存到內(nèi)核中,它也需要使用這段線性地址空間來完成,否則內(nèi)核就不能訪問設(shè)備上的內(nèi)存空間了。

這個(gè)曾經(jīng)在某個(gè)版本的內(nèi)核代碼的__VMALLOC_RESERVE宏的注釋中見過,呵呵,可是現(xiàn)在在2.6.14找不到了

論壇徽章:
0
10 [報(bào)告]
發(fā)表于 2006-01-16 19:21 |只看該作者
那 能告訴我現(xiàn)在的那些內(nèi)存是怎么映射的嗎?它不會(huì)不需要線性地址就可以被使用了吧!
您需要登錄后才可以回帖 登錄 | 注冊

本版積分規(guī)則 發(fā)表回復(fù)

  

北京盛拓優(yōu)訊信息技術(shù)有限公司. 版權(quán)所有 京ICP備16024965號-6 北京市公安局海淀分局網(wǎng)監(jiān)中心備案編號:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年舉報(bào)專區(qū)
中國互聯(lián)網(wǎng)協(xié)會(huì)會(huì)員  聯(lián)系我們:huangweiwei@itpub.net
感謝所有關(guān)心和支持過ChinaUnix的朋友們 轉(zhuǎn)載本站內(nèi)容請注明原作者名及出處

清除 Cookies - ChinaUnix - Archiver - WAP - TOP