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

  免費注冊 查看新帖 |

Chinaunix

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

[內(nèi)存管理] page_to_pfn小問題,謝謝 [復制鏈接]

論壇徽章:
0
跳轉(zhuǎn)到指定樓層
1 [收藏(0)] [報告]
發(fā)表于 2014-05-21 11:08 |只看該作者 |倒序瀏覽
#define __pfn_to_page(pfn)      (mem_map + (pfn))
#define __page_to_pfn(page)     ((unsigned long)((page) - mem_map))

第一個我宏我看明白了,就是mem_map + pfn*sizeof(mem_map) 得到數(shù)組中的PAGE地址,也就是 &mem_map[pfn]

第二個,怎么想不明白呢,不應該是  ((unsigned long)((page) - mem_map)) / sizeof(mem_map) 得到相應的PFN嗎,謝謝回復!

論壇徽章:
0
2 [報告]
發(fā)表于 2014-05-21 11:39 |只看該作者
#define __pfn_to_page(pfn)        (mem_map + ((pfn) - ARCH_PFN_OFFSET))
#define __page_to_pfn(page)        ((unsigned long)((page) - mem_map) + ARCH_PFN_OFFSET)

為什么沒人回復啊,這是原定義,我把ARCH_PFN_OFFSET寫成0了,

論壇徽章:
15
射手座
日期:2014-02-26 13:45:082015年迎新春徽章
日期:2015-03-04 09:54:452015年辭舊歲徽章
日期:2015-03-03 16:54:15羊年新春福章
日期:2015-02-26 08:47:552015年亞洲杯之卡塔爾
日期:2015-02-03 08:33:45射手座
日期:2014-12-31 08:36:51水瓶座
日期:2014-06-04 08:33:52天蝎座
日期:2014-05-14 14:30:41天秤座
日期:2014-04-21 08:37:08處女座
日期:2014-04-18 16:57:05戌狗
日期:2014-04-04 12:21:33技術圖書徽章
日期:2014-03-25 09:00:29
3 [報告]
發(fā)表于 2014-05-21 12:31 |只看該作者
寫個測試代碼試試就知道了~

論壇徽章:
0
4 [報告]
發(fā)表于 2014-05-21 13:30 |只看該作者
回復 1# wzw200
兩個指向struct page的指針相減。


   

論壇徽章:
0
5 [報告]
發(fā)表于 2014-05-21 13:34 |只看該作者
回復 4# xs3c


   在嗎,相減,不是 PFN啊,相減對嗎,想不通

論壇徽章:
15
射手座
日期:2014-02-26 13:45:082015年迎新春徽章
日期:2015-03-04 09:54:452015年辭舊歲徽章
日期:2015-03-03 16:54:15羊年新春福章
日期:2015-02-26 08:47:552015年亞洲杯之卡塔爾
日期:2015-02-03 08:33:45射手座
日期:2014-12-31 08:36:51水瓶座
日期:2014-06-04 08:33:52天蝎座
日期:2014-05-14 14:30:41天秤座
日期:2014-04-21 08:37:08處女座
日期:2014-04-18 16:57:05戌狗
日期:2014-04-04 12:21:33技術圖書徽章
日期:2014-03-25 09:00:29
6 [報告]
發(fā)表于 2014-05-21 13:54 |只看該作者
wzw200 發(fā)表于 2014-05-21 13:34
回復 4# xs3c

mem_map中放的是指針,不是結(jié)構(gòu)體

論壇徽章:
0
7 [報告]
發(fā)表于 2014-05-21 14:04 |只看該作者
由 page_to_pfn和pfn_to_page 的總結(jié)
2010-06-28 18:15
PFN => Page Frame Number 頁幀號

在內(nèi)核源代碼中 找出如下代碼。

#define PHYS_PFN_OFFSET (CONFIG_PHYS_OFFSET >> PAGE_SHIFT)
#define pfn_to_page(pfn) (mem_map + ((pfn) - PHYS_PFN_OFFSET))
#define page_to_pfn(page) ((unsigned long)((page) - mem_map) + PHYS_PFN_OFFSET)

這涉及到一個結(jié)構(gòu)體加減的問題。
不思考一會還真看不太清楚(基本功啊,汗)。

如下規(guī)則:
        1:兩同類型結(jié)構(gòu)體相減,得到的是兩結(jié)地址之間可以有多少個對象
一般情況是大地址減去一個小地址以得到兩同類型指針之間的對象個數(shù),但也可以小地址減大地址,只不過得出的一負數(shù)(這里小地址大地址是指同一數(shù)組中的前與后對象)。當然也可以不是一個數(shù)組中的兩人對象去相減,但這樣的結(jié)果我就是不知道是什么,我得出的結(jié)果始終是0。
        2:結(jié)構(gòu)體加上一個常數(shù),得到的是相當于在當前結(jié)構(gòu)體為基地址的數(shù)組的第常數(shù)個對象的地址。
        3:結(jié)構(gòu)體減去一個常數(shù),得到的是相當于在當前結(jié)構(gòu)體為參照數(shù)組中向前第常數(shù)個對象的地址。
        4:兩個結(jié)構(gòu)指針相加,會提示[ error: invalid operands to binary + (have ‘struct X *’ and ‘struct X *’) ]這是無意義的操作,標準C不支持的操作。

#define page_to_pfn(page) ((unsigned long)((page) - mem_map) + PHYS_PFN_OFFSET)
根據(jù)給出頁地址求出對應的頁幀號。兩個結(jié)構(gòu)相減,得出的是丙都之間的對象個數(shù),加上起始幀號偏移,即給出頁地址的相對絕對頁號。

#define pfn_to_page(pfn) (mem_map + ((pfn) - PHYS_PFN_OFFSET))
根據(jù)給出的頁幀號計算出對應的頁幀號。頁基地址加上頁幀號是相對偏移的頁地址,減去一個偏移頁幀號即頁對象對應的地址。

我試試吧,剛查到的,C的 基本功啊,很少用這個功能

論壇徽章:
0
8 [報告]
發(fā)表于 2014-05-21 14:09 |只看該作者
回復 6# humjb_1983
mem_map 應該是page的數(shù)組


   

論壇徽章:
0
9 [報告]
發(fā)表于 2014-05-21 14:10 |只看該作者
typedef struct abc
{
        int a;
}ABC;

int main()
{
         ABC tp[10];
        printf("qqqqqqqqq:%d\n",&tp[9]-&tp[0]);
        return 0;
}
哎,發(fā)現(xiàn)自己什么都不會

論壇徽章:
0
10 [報告]
發(fā)表于 2014-05-21 14:12 |只看該作者
回復 9# wzw200
慢慢看就好了。

   
您需要登錄后才可以回帖 登錄 | 注冊

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

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP