Hi All,
This is my answer :
以下是我工研院同事問的問題 :
我目前想要進行的實驗是將記憶體(RAM)中的 page 完整 copy 到另一個 page.
就我所知除了 page content copy, 還要更新 memory management 中關於 source/destination pages 的相關資料, 包括:
1. reference 到 source page 的所有 page tables 要 update 成 destination page 的 pfn
2. 兩個 page 所在的 zone 管理 page 狀態的資料更新
3. 兩個 page 的 virtual address vs. physical address 的 mapping
我的問題是:
1. 除此上述資料需要更新之外還有別的嗎?
=> 我還要 check 看看
2. 有無現成函式即可使用或小改
=> 我還要 check 看看
3. 如何用 pfn 或 page 反推 page table or zone
=> 1. address = pfn_to_virt();
2. pgd = pgd_offset(mm, address);
3. pud = pud_alloc(mm, pgd, address);
4. pmd = pmd_alloc(mm, pud, address);
5. pte = pte_alloc_map(mm, pmd, address);
可參考 ./mm/memory.c 中的 handle_mm_fault()
4. kernel 在哪裡將 process or task 所用的 page 納入其 page table 中, 意即 process/task ID 如何和 page(pfn) 勾起來?
=> 1. Process 的 address space 是在 exec() 中先建立好 stack, heap, code, data and bss 的 VMA
2. 當 process 要讀寫一個 (VA) address 時會產生一個 page fault, 此時會呼叫 do_page_fault()
3. do_page_fault() 會在呼叫 handle_mm_fault() 去建立第一, 二層的 page table
4. 之後在呼叫 handle_pte_fault() 判斷是 do_linear_fault(), do_anonymous_page(), do_nonlinear_fault(),
do_swap_page(), or do_wp_page().
5. 如果是 do_anonymous_page(), 就會先 allocate page frame, 在把 pte 和 此 page frame link
在一起.
Best Regards,
River
---------- 轉寄的郵件 ----------
寄件者:
李順河 <downri...@gmail.com>日期: 2012年6月22日下午6:16
主旨: Fwd: Linux memory management
收件者:
jay...@itri.org.tw子傑,
這是我們 kernel group 的成員回答的內容.
我下星期一之前會在回答您的問題.
Best regards,
River
---------- 轉寄的郵件 ----------
寄件者:
Spark <spark....@gmail.com>
日期: 2012年6月21日下午4:23
主旨: Re: Linux memory management
收件者:
tw-linux-ke...@googlegroups.com印象中,KERNEL 有個 pfn_to_virt( ) / virt_to_pfn( ) API
利用 PAGE_SHIFT 定義的 bit 作 shift
EX:
bit 12~31 : PFN
bit 11~0 : offset
可以參考 kernel source
如果是arm 可以由 CP15 找出 Translation Table Base Addr
(可能會有兩級轉換表)
可以找出page對應情況
李順河
<downri...@gmail.com> 於 2012年6月21日下午2:46 寫道:
Dear All, 這是我工研院以前同事問我的問題.
大家可以幫忙想一下囉. :)
Thanks.
Best Regards,
River
---------- 轉寄的郵件 ----------
寄件者:
<jay...@itri.org.tw>
日期: 2012年6月21日下午2:34
主旨: Linux memory management
收件者:
downri...@gmail.com
順河,
我目前想要進行的實驗是將記憶體(RAM)中的 page 完整 copy 到另一個 page.
就我所知除了 page content copy, 還要更新 memory management 中關於
source/destination pages 的相關資料, 包括:
1. reference 到 source page 的所有 page tables 要 update 成 destination page 的 pfn
2. 兩個 page 所在的 zone 管理
page 狀態的資料更新
3. 兩個 page 的 virtual address vs. physical address 的 mapping
我的問題是:
1. 除此上述資料需要更新之外還有別的嗎?
2. 有無現成函式即可使用或小改
3. 如何用 pfn 或 page 反推 page table or zone
4. kernel 在哪裡將 process or task 所用的 page 納入其 page table 中, 意即 process/task ID 如何和 page(pfn)
勾起來?
煩請不吝指教, 謝謝
沈子傑
工研院資通所(ITRI/ICL)
處理器與應用組(Embedded Software Dept.)
嵌入式系統軟體部(Processor & Application Division)
TEL: 03-5914637
E-mail: jay...@itri.org.tw
-------------------------------------------------
本信件可能包含工研院機密資訊,非指定之收件者,請勿使用或揭露本信件內容,並請銷毀此信件。
This email may contain confidential information. Please do not use or disclose it in any way and delete it if you are not the intended recipient.