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

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

Chinaunix

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

請(qǐng)教大家一個(gè)mmap的問題 [復(fù)制鏈接]

論壇徽章:
0
跳轉(zhuǎn)到指定樓層
1 [收藏(0)] [報(bào)告]
發(fā)表于 2007-06-13 00:02 |只看該作者 |倒序?yàn)g覽
在LDD2中講到

remap_pfn_range的第二個(gè)參數(shù)phys_add是物理地址,在這個(gè)程序中

int simple_mmap( struct file *filp, struct vm_area_struct *vma )
{
    unsigned long offset = vma->vm_pgoff << PAGE_SHIFT;
   
     ...
     
     remap_pfn_range( vma, vma->start, offset, vma->vm_end - vma->vm_start, vma->vm_page_prot );

     ...
}

請(qǐng)教大家為什么 vma->vm_pgoff << PAGE_SHIFT 的值是物理地址。

--根據(jù)LDD3做了修改,方便大家討論^_^

[ 本帖最后由 albcamus 于 2007-6-13 12:01 編輯 ]

論壇徽章:
0
2 [報(bào)告]
發(fā)表于 2007-06-13 10:08 |只看該作者
vma->vm_pgoff是該vma在其所映射文件的偏移,以PAGE_SIZE為單位,即vm_pgoff是pfn, 左移PAGE_SHIFT即是物理地址。 不知對(duì)不?

論壇徽章:
0
3 [報(bào)告]
發(fā)表于 2007-06-13 10:47 |只看該作者

回復(fù) #2 albcamus 的帖子

如果偏移是0呢? 。。。。

論壇徽章:
0
4 [報(bào)告]
發(fā)表于 2007-06-13 10:51 |只看該作者

回復(fù) #3 rwen2012 的帖子

即是mmap時(shí)的offset是0,  vm->vm_pgoff不會(huì)是0吧? 大家討論下。

論壇徽章:
0
5 [報(bào)告]
發(fā)表于 2007-06-13 11:05 |只看該作者
原帖由 albcamus 于 2007-6-13 10:51 發(fā)表于 4樓  
即是mmap時(shí)的offset是0,  vm->vm_pgoff不會(huì)是0吧? 大家討論下。



好像vvm_pgoff傳入的就是文件偏移啊, 請(qǐng)確認(rèn)一下

論壇徽章:
0
6 [報(bào)告]
發(fā)表于 2007-06-13 11:08 |只看該作者
我覺得你首先得了解vm->vm_pgoff和PAGE_SHIFT是什么意思,vm_pgoff 代表的是這個(gè)VM被映射的物理頁(yè),而物理頁(yè)號(hào)左移PAGE_SHIFT后,得到的是物理地址,物理地址右移PAGE_SHIFT得到的是物理頁(yè)號(hào)。

論壇徽章:
0
7 [報(bào)告]
發(fā)表于 2007-06-13 11:28 |只看該作者
原帖由 rwen2012 于 2007-6-13 11:05 發(fā)表于 5樓  

好像vvm_pgoff傳入的就是文件偏移啊, 請(qǐng)確認(rèn)一下


確認(rèn), 是這樣的, 在do_map_pgoff()中是直接用pgoff賦給vm_pgoff的。

但是, 為什么LDD3用remap_pfn_range實(shí)現(xiàn)mmap, 卻是把vm_pgoff作為第3個(gè)參數(shù)傳遞給它呢?  有點(diǎn)暈。

論壇徽章:
0
8 [報(bào)告]
發(fā)表于 2007-06-13 11:30 |只看該作者
原帖由 snow_insky 于 2007-6-13 11:08 發(fā)表于 6樓  
我覺得你首先得了解vm->vm_pgoff和PAGE_SHIFT是什么意思,vm_pgoff 代表的是這個(gè)VM被映射的物理頁(yè),而物理頁(yè)號(hào)左移PAGE_SHIFT后,得到的是物理地址,物理地址右移PAGE_SHIFT得到的是物理頁(yè)號(hào)。


道理是這樣子的,我也一直覺得vm_pgoff是pfn, 但是它是在哪里被賦值的呢?

論壇徽章:
0
9 [報(bào)告]
發(fā)表于 2007-06-13 11:51 |只看該作者
filemap.c里的nopage很容易理解,這個(gè)vm_pgoff明顯就是文件偏移

struct page *filemap_nopage(struct vm_area_struct *area,
                                unsigned long address, int *type)
{
        int error;
        struct file *file = area->vm_file;
        struct address_space *mapping = file->f_mapping;
        struct file_ra_state *ra = &file->f_ra;
        struct inode *inode = mapping->host;
        struct page *page;
        unsigned long size, pgoff;
        int did_readaround = 0, majmin = VM_FAULT_MINOR;

        pgoff = ((address-area->vm_start) >> PAGE_CACHE_SHIFT) + area->vm_pgoff;

         ......

        /*
         * Do we have something in the page cache already?
         */
retry_find:
        page = find_get_page(mapping, pgoff);
        if (!page) {  
                 ......

論壇徽章:
0
10 [報(bào)告]
發(fā)表于 2007-06-13 12:09 |只看該作者
原帖由 rwen2012 于 2007-6-13 11:51 發(fā)表于 9樓  
filemap.c里的nopage很容易理解,這個(gè)vm_pgoff明顯就是文件偏移

struct page *filemap_nopage(struct vm_area_struct *area,
                                unsigned long address, int *type)
{
     ...



那如果看LDD3中 兩種mmap方法的實(shí)現(xiàn):

1,

static int simple_remap_mmap(struct file *filp, struct vm_area_struct *vma)
{
        if (remap_pfn_range(vma, vma->vm_start, vma->vm_pgoff,  //remap_pfn_mmap的第三個(gè)參數(shù)要求是pfn
                            vma->vm_end - vma->vm_start,
                            vma->vm_page_prot))
                return -EAGAIN;


2,

static int simple_nopage_mmap(struct file *filp, struct vm_area_struct *vma)
{
        unsigned long offset = vma->vm_pgoff << PAGE_SHIFT;

        if (offset >= __pa(high_memory) || (filp->f_flags & O_SYNC))
                vma->vm_flags |= VM_IO;
       


vm_pgoff就明顯是pfn了。  

差別在哪里?
您需要登錄后才可以回帖 登錄 | 注冊(cè)

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

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP