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

  免費注冊 查看新帖 |

Chinaunix

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

[內(nèi)存管理] linear的非共享頁面寫入操作為什么是創(chuàng)建anon類型的頁面? [復(fù)制鏈接]

論壇徽章:
0
跳轉(zhuǎn)到指定樓層
1 [收藏(0)] [報告]
發(fā)表于 2014-06-17 08:45 |只看該作者 |倒序瀏覽
在handle_pte_fault()中,將會根據(jù)pte和vma的狀態(tài)來判斷創(chuàng)建對應(yīng)的FILE_MAPPING和ANON 頁面,
handle_pte_fault
                if (pte_none(entry)) {
                        if (vma->vm_ops) {
                                if (likely(vma->vm_ops->fault))
                                        return do_linear_fault(mm, vma, address,pte, pmd, flags, entry);
                        }
                        return do_anonymous_page(mm, vma, address,pte, pmd, flags);
本人理解,包括網(wǎng)上帖子描述do_linear_fault主要是用來創(chuàng)建FILE_MAPPING頁面的,
do_linear_fault
->__do_fault
                /*Should we do an early C-O-W break?  */
        page = vmf.page;
        if (flags & FAULT_FLAG_WRITE) {
                if (!(vma->vm_flags & VM_SHARED)) {
                        page = cow_page;
                        anon = 1;
                        copy_user_highpage(page, vmf.page, address, vma);
                        __SetPageUptodate(page);

在這里,為啥COW的寫入是非VM_SHARED類型,就是ANON類型頁面,如果是VM_SHARED類型,就是FILE_MAPPING頁面呢?

謝謝!

論壇徽章:
0
2 [報告]
發(fā)表于 2014-06-17 09:55 |只看該作者
你想錯了。這里只是判斷對非VM_SHARE頁進(jìn)行的寫缺頁異常,不光是要fault進(jìn)存放磁盤數(shù)據(jù)的頁(要插入pagecache的頁),還要另外分配一個新的頁用來COW,用于此進(jìn)程寫數(shù)據(jù)——因為這是一個私有映射(!VM_SHARED),它所做的修改不能反映到文件中去,也就是說不能修改pagecache。

論壇徽章:
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技術(shù)圖書徽章
日期:2014-03-25 09:00:29
3 [報告]
發(fā)表于 2014-06-17 12:16 |只看該作者
!VM_SHARED表示"私有映射",即該區(qū)域為本進(jìn)程私有的,不與其它進(jìn)程共享,此時需要復(fù)制一個新的副本給"私有映射"專用,這里并非 通常理解的COW,COW是在do_wp_fault流程中處理

論壇徽章:
0
4 [報告]
發(fā)表于 2014-06-17 12:58 |只看該作者
謝謝njuzhyf和humjb_1983。

在創(chuàng)建file map映射時,如果不設(shè)置MAP_SHARE,是不是就是不帶vm_share的flag? 這個私有映射的場景是哪種情況?

對于filemapping,也可能存在寫的情況,寫一個file的page cache不反應(yīng)到文件中去,難道還反應(yīng)到anon頁面上去?

如果要是private page寫,為啥就不是到COW那里一起處理創(chuàng)建新anon頁面操作呢?

這里我肯定是有個地方?jīng)]轉(zhuǎn)過彎來,不知道哪個地方概念搞糊涂了。

論壇徽章:
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技術(shù)圖書徽章
日期:2014-03-25 09:00:29
5 [報告]
發(fā)表于 2014-06-17 14:40 |只看該作者
kerryxi 發(fā)表于 2014-06-17 12:58
謝謝njuzhyf和humjb_1983。

在創(chuàng)建file map映射時,如果不設(shè)置MAP_SHARE,是不是就是不帶vm_share的flag ...

“如果不設(shè)置MAP_SHARE,是不是就是不帶vm_share的flag”---對的,私有映射場景很多吧,如果不想mmap的區(qū)域跟其它進(jìn)程共享,就可以用私有映射~
個人理解這里的COW,和fork之后的COW是不同的,這里涉及文件的map,應(yīng)該也不能跟anon混在一起處理,這是不一樣的分支。

論壇徽章:
0
6 [報告]
發(fā)表于 2014-06-17 14:57 |只看該作者
humjb_1983 發(fā)表于 2014-06-17 14:40
“如果不設(shè)置MAP_SHARE,是不是就是不帶vm_share的flag”---對的,私有映射場景很多吧,如果不想mmap的區(qū) ...


如果說不帶VM_SAHRE的是私有映射,走的就是anon的映射分支。但那么帶MAP_SHARE也是mmap常用的參數(shù),這里面也可能是share的anon頁面。  所以為什么!VM_SHARE就是anon私有映射頁面,而VM_SHARE就變成是文件映射 page呢?兩者為啥就不是同一種類型的anon映射頁面呢?

論壇徽章:
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技術(shù)圖書徽章
日期:2014-03-25 09:00:29
7 [報告]
發(fā)表于 2014-06-17 15:05 |只看該作者
如果說不帶VM_SAHRE的是私有映射,走的就是anon的映射分支。--- 這個為什么?anon映射跟VM_SHARE標(biāo)志沒多大關(guān)系吧~~

論壇徽章:
0
8 [報告]
發(fā)表于 2014-06-17 17:48 |只看該作者
回復(fù) 4# kerryxi


"在創(chuàng)建file map映射時,如果不設(shè)置MAP_SHARE,是不是就是不帶vm_share的flag? 這個私有映射的場景是哪種情況?"

舉個簡單的例子~~ELF可執(zhí)行文件有.text, .data, .bss..... 在程序執(zhí)行的時候,.data應(yīng)該就是私有映射的file mmap。不然你覺得你程序執(zhí)行時
修改一些全局變量的值會反映到你的可執(zhí)行文件中去?~~就是你列出代碼的那個邏輯,你讀的時候,內(nèi)核是不會管的,直接讀pagecache中的頁,但
你想寫的時候,內(nèi)核會COW出來一個匿名頁面出來了。


“對于filemapping,也可能存在寫的情況,寫一個file的page cache不反應(yīng)到文件中去,難道還反應(yīng)到anon頁面上去?”


你說對了,比如你程序修改全局變量,這個修改后的值在程序運行期間確實是存放在COW出來的那個匿名頁面中。


“如果要是private page寫,為啥就不是到COW那里一起處理創(chuàng)建新anon頁面操作呢?

這里我肯定是有個地方?jīng)]轉(zhuǎn)過彎來,不知道哪個地方概念搞糊涂了。   “


呵呵呵。。。映射有兩種:私有和共享;頁面來源有兩種:文件和匿名;有私有文件映射,共享文件映射,私有匿名映射,共享匿名映射。。。
仔細(xì)看看do_mmap_pgoff和handle_pte_fault。

論壇徽章:
0
9 [報告]
發(fā)表于 2014-06-17 18:18 |只看該作者
回復(fù) 8# njuzhyf


    那對于一個file映射,如果此時進(jìn)程要寫入這個頁面,那么創(chuàng)建新的page頁面是什么類型? 因為file mapping的頁面也可能要寫入到磁盤的。

論壇徽章:
0
10 [報告]
發(fā)表于 2014-06-17 22:50 |只看該作者
回復(fù) 9# kerryxi

私有映射,就COW出一個匿名頁面讓進(jìn)程寫;共享映射就會直接寫pagecache中的頁,并標(biāo)記那頁為臟
   
您需要登錄后才可以回帖 登錄 | 注冊

本版積分規(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