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

  免費注冊 查看新帖 |

Chinaunix

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

分配線性地址區(qū)間問題 [復(fù)制鏈接]

論壇徽章:
16
2015亞冠之吉達(dá)阿赫利
日期:2015-08-17 11:21:462015年迎新春徽章
日期:2015-03-04 09:58:11酉雞
日期:2014-12-07 09:06:19水瓶座
日期:2014-11-04 14:23:29天秤座
日期:2014-03-02 08:57:52雙魚座
日期:2014-02-22 13:07:56午馬
日期:2014-02-14 11:08:18雙魚座
日期:2014-02-13 11:09:37卯兔
日期:2014-02-06 15:10:34子鼠
日期:2014-01-20 14:48:19戌狗
日期:2013-12-19 09:37:46射手座
日期:2013-12-19 09:33:47
跳轉(zhuǎn)到指定樓層
1 [收藏(0)] [報告]
發(fā)表于 2011-09-04 17:15 |只看該作者 |倒序瀏覽
本帖最后由 embeddedlwp 于 2011-09-04 17:16 編輯

linux 2.6.11的內(nèi)存管理部分,do_mmap_pgoff中有這么一段
  1. munmap_back:
  2.         vma = find_vma_prepare(mm, addr, &prev, &rb_link, &rb_parent);
  3.         if (vma && vma->vm_start < addr + len) {
  4.                 if (do_munmap(mm, addr, len))
  5.                         return -ENOMEM;
  6.                 goto munmap_back;
  7.         }
復(fù)制代碼
在ULK3 P371上的解釋是find_vma_prepare()函數(shù)也檢查是否還存在與新區(qū)間重疊的線性區(qū)。這種情況發(fā)生在函數(shù)返回一個非空的地址,這個地址指向一個線性區(qū),而該區(qū)的起始地址位置位于新區(qū)間結(jié)束地址之前的時候。在這種情況下,do_mmap_pgoff()調(diào)用do_munmap()刪除新的區(qū)間,然后重復(fù)整個步驟。

這里如果重復(fù)整個步驟,也就是重新執(zhí)行find_vma_prepare,之前調(diào)用do_munmap釋放了那個由get_unmmaped_area找到的空閑的地址空間,那個find_vma_prepare也沒有分配地址空間的功能,那么程序怎么往下執(zhí)行了?我感覺get_unmmaped_area找到的空閑地址空間一定是不與別的區(qū)間重疊的(否則返回NULL),這樣這段code就不會執(zhí)行了。

論壇徽章:
22
丑牛
日期:2014-08-15 14:32:0015-16賽季CBA聯(lián)賽之同曦
日期:2017-12-14 15:28:14黑曼巴
日期:2017-08-10 08:14:342017金雞報曉
日期:2017-02-08 10:39:42黑曼巴
日期:2016-11-15 15:48:38CU十四周年紀(jì)念徽章
日期:2016-11-09 13:19:1015-16賽季CBA聯(lián)賽之同曦
日期:2016-04-08 18:00:03平安夜徽章
日期:2015-12-26 00:06:30程序設(shè)計版塊每日發(fā)帖之星
日期:2015-12-03 06:20:002015七夕節(jié)徽章
日期:2015-08-21 11:06:17IT運維版塊每日發(fā)帖之星
日期:2015-08-09 06:20:002015亞冠之吉達(dá)阿赫利
日期:2015-07-03 08:39:42
2 [報告]
發(fā)表于 2011-09-05 08:15 |只看該作者
沒看懂你說什麼。。
線性區(qū)不會有重複的

vma && vma->vm_start < addr + len
這個條件是檢測是不是傳入的地址與已存在的線性區(qū)重疊
如果是的話,先取消之前的映射再繼續(xù)

論壇徽章:
16
2015亞冠之吉達(dá)阿赫利
日期:2015-08-17 11:21:462015年迎新春徽章
日期:2015-03-04 09:58:11酉雞
日期:2014-12-07 09:06:19水瓶座
日期:2014-11-04 14:23:29天秤座
日期:2014-03-02 08:57:52雙魚座
日期:2014-02-22 13:07:56午馬
日期:2014-02-14 11:08:18雙魚座
日期:2014-02-13 11:09:37卯兔
日期:2014-02-06 15:10:34子鼠
日期:2014-01-20 14:48:19戌狗
日期:2013-12-19 09:37:46射手座
日期:2013-12-19 09:33:47
3 [報告]
發(fā)表于 2011-09-05 09:33 |只看該作者
回復(fù) 2# amarant


    呵呵,關(guān)鍵是如何繼續(xù),這里調(diào)用的do_munmap()已經(jīng)把get_unmmaped_area()獲得的線性地址區(qū)間取消掉了。沒了線性區(qū)間怎么往下執(zhí)行呢,求解惑!

論壇徽章:
22
丑牛
日期:2014-08-15 14:32:0015-16賽季CBA聯(lián)賽之同曦
日期:2017-12-14 15:28:14黑曼巴
日期:2017-08-10 08:14:342017金雞報曉
日期:2017-02-08 10:39:42黑曼巴
日期:2016-11-15 15:48:38CU十四周年紀(jì)念徽章
日期:2016-11-09 13:19:1015-16賽季CBA聯(lián)賽之同曦
日期:2016-04-08 18:00:03平安夜徽章
日期:2015-12-26 00:06:30程序設(shè)計版塊每日發(fā)帖之星
日期:2015-12-03 06:20:002015七夕節(jié)徽章
日期:2015-08-21 11:06:17IT運維版塊每日發(fā)帖之星
日期:2015-08-09 06:20:002015亞冠之吉達(dá)阿赫利
日期:2015-07-03 08:39:42
4 [報告]
發(fā)表于 2011-09-05 10:03 |只看該作者
回復(fù) 3# embeddedlwp


    這個函數(shù)的作用就是為了分配線性區(qū),如果所請求的線性區(qū)已經(jīng)被映射了就先unmap,這樣才能實現(xiàn)函數(shù)的功能。。

論壇徽章:
16
2015亞冠之吉達(dá)阿赫利
日期:2015-08-17 11:21:462015年迎新春徽章
日期:2015-03-04 09:58:11酉雞
日期:2014-12-07 09:06:19水瓶座
日期:2014-11-04 14:23:29天秤座
日期:2014-03-02 08:57:52雙魚座
日期:2014-02-22 13:07:56午馬
日期:2014-02-14 11:08:18雙魚座
日期:2014-02-13 11:09:37卯兔
日期:2014-02-06 15:10:34子鼠
日期:2014-01-20 14:48:19戌狗
日期:2013-12-19 09:37:46射手座
日期:2013-12-19 09:33:47
5 [報告]
發(fā)表于 2011-09-05 10:16 |只看該作者
回復(fù) 4# amarant


    如果調(diào)用do_munmap()了,goto munmap_back;但是之后do_mmap()的操作中沒有調(diào)用get_unmapped_area(),也就是這次釋放這個線性區(qū)就不存在了,他也沒有去獲得新的線性區(qū),函數(shù)也不會實現(xiàn)他的功能。

論壇徽章:
22
丑牛
日期:2014-08-15 14:32:0015-16賽季CBA聯(lián)賽之同曦
日期:2017-12-14 15:28:14黑曼巴
日期:2017-08-10 08:14:342017金雞報曉
日期:2017-02-08 10:39:42黑曼巴
日期:2016-11-15 15:48:38CU十四周年紀(jì)念徽章
日期:2016-11-09 13:19:1015-16賽季CBA聯(lián)賽之同曦
日期:2016-04-08 18:00:03平安夜徽章
日期:2015-12-26 00:06:30程序設(shè)計版塊每日發(fā)帖之星
日期:2015-12-03 06:20:002015七夕節(jié)徽章
日期:2015-08-21 11:06:17IT運維版塊每日發(fā)帖之星
日期:2015-08-09 06:20:002015亞冠之吉達(dá)阿赫利
日期:2015-07-03 08:39:42
6 [報告]
發(fā)表于 2011-09-05 10:41 |只看該作者
記不清楚了,你自己好好看看吧

論壇徽章:
16
2015亞冠之吉達(dá)阿赫利
日期:2015-08-17 11:21:462015年迎新春徽章
日期:2015-03-04 09:58:11酉雞
日期:2014-12-07 09:06:19水瓶座
日期:2014-11-04 14:23:29天秤座
日期:2014-03-02 08:57:52雙魚座
日期:2014-02-22 13:07:56午馬
日期:2014-02-14 11:08:18雙魚座
日期:2014-02-13 11:09:37卯兔
日期:2014-02-06 15:10:34子鼠
日期:2014-01-20 14:48:19戌狗
日期:2013-12-19 09:37:46射手座
日期:2013-12-19 09:33:47
7 [報告]
發(fā)表于 2011-09-05 10:43 |只看該作者
回復(fù) 6# amarant


    奧呵呵,多謝了,剛才在linuxform看到04年有人提過這個問題,也是最后沒人解決。

論壇徽章:
0
8 [報告]
發(fā)表于 2011-09-05 17:16 |只看該作者
感覺樓主有幾個認(rèn)識上的誤區(qū):
1. get_unmmaped_area()是不會創(chuàng)建一個線性區(qū)間的。
它只返回一個地址addr,確保從addr開始,長度為len的區(qū)間是沒有被映射的(多數(shù)情況下)。真正分配線性區(qū)間的操作是后面的kmem_cache_zalloc分配一個vma結(jié)構(gòu),然后設(shè)置vma的start和end及其他字段,并加入到vma鏈表和紅黑樹中。這樣一個線性區(qū)間才創(chuàng)建完畢。

2. 所貼這段代碼的作用。
這段代碼的目的是檢查以確保addr開始,長度為len的區(qū)間內(nèi)沒有其他的映射區(qū)間,如果有,就要把那些區(qū)間釋放,直到通過find_vma_prepare找不到vma或者找到的vma不在addr開始,長度為len的范圍內(nèi)。
find_vma_prepare肯定沒有分配地址空間的功能,它只是找到第一個結(jié)束地址大于addr的vma。
所以只要確認(rèn)了上面說的問題,就可以跳過這段代碼往下執(zhí)行了(往下去分配線性區(qū)間了)。

3. get_unmmaped_area()返回的addr并不一定是ok的。
也就是說該函數(shù)返回的addr,并不一定從它開始,長度為len的區(qū)間內(nèi)一定沒有其他的映射,arch_get_unmapped_area()函數(shù)中的開始就有個判斷,如果flags中標(biāo)記了MAP_FIXED,就直接返回傳入的addr,根本不去找別的了。
所以只要用戶指定了MAP_FIXED標(biāo)記,除了對該地址做頁對齊,就直接在對齊后的地址的基礎(chǔ)上做映射了,這就是樓主所貼代碼存在的目的,在這種情況下,把該區(qū)間內(nèi)其他的映射區(qū)間都刪除(這個是有風(fēng)險的,所以除非你很確信自己在做什么,否則不要隨便用MAP_FIXED標(biāo)記),來給一會要映射的區(qū)間讓路。

論壇徽章:
16
2015亞冠之吉達(dá)阿赫利
日期:2015-08-17 11:21:462015年迎新春徽章
日期:2015-03-04 09:58:11酉雞
日期:2014-12-07 09:06:19水瓶座
日期:2014-11-04 14:23:29天秤座
日期:2014-03-02 08:57:52雙魚座
日期:2014-02-22 13:07:56午馬
日期:2014-02-14 11:08:18雙魚座
日期:2014-02-13 11:09:37卯兔
日期:2014-02-06 15:10:34子鼠
日期:2014-01-20 14:48:19戌狗
日期:2013-12-19 09:37:46射手座
日期:2013-12-19 09:33:47
9 [報告]
發(fā)表于 2011-09-07 17:40 |只看該作者
本帖最后由 embeddedlwp 于 2011-09-07 17:59 編輯

回復(fù) 8# allen303allen


    高手!醍醐灌頂!

論壇徽章:
0
10 [報告]
發(fā)表于 2011-12-05 11:02 |只看該作者

找到這個貼不容易啊,
這個問題也困惑我一天了
我開始也是這么覺得
get_unmmaped_area找到的空閑地址空間一定是不與別的區(qū)間重疊的
接下來的步驟卻又說要刪除重疊區(qū)間
把我可搞暈了
您需要登錄后才可以回帖 登錄 | 注冊

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

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP