日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > linux >内容正文

linux

Kernel Page Global Directory (PGD) of Page table of Process created in Linux Kernel

發布時間:2023/12/10 linux 34 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Kernel Page Global Directory (PGD) of Page table of Process created in Linux Kernel 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

Kernel Page Global Directory?(PGD)?of User process created

在早期版本:

在fork一個進程的時候,必須建立進程自己的內核頁目錄項(內核頁目錄項要與用戶空間
的頁目錄放在同一個物理地址連續的頁面上,所以不能共享,但所有進程的內核頁表與進
程0共享)
3G用戶,頁目錄中一項映射4M的空間(一項頁目錄1024項頁表,每項頁表對應1個頁面4K
),即:
#define?PGDIR_SHIFT?22
#define?PGDIR_SIZE?(1UL?<<?PGDIR_SHIFT)
>>>?sys_fork->do_fork->copy_mm->mm_init->pgd_alloc->get_pgd_slow
#if?CONFIG_X86_PAE
。。。。。。。。。。。。。
#else
extern?__inline__?pgd_t?*get_pgd_slow(void)
{
>>>?分配頁目錄表(包含1024項頁目錄),即為一個進程分配的頁目錄可以映射的空間為
1024*4M=4G
?pgd_t?*pgd?=?(pgd_t?*)__get_free_page(GFP_KERNEL);
?if?(pgd)?{
>>>?#define?USER_PTRS_PER_PGD?(TASK_SIZE/PGDIR_SIZE)
>>>?TASK_SIZE為3G大小,USER_PTRS_PER_PGD為用戶空間對應的頁目錄項數目(
3G/4M=768)
>>>?將用戶空間的頁目錄項清空
??memset(pgd,?0,?USER_PTRS_PER_PGD?*?sizeof(pgd_t));
>>>?將內核頁目錄表(swapper_pg_dir)的第768項到1023項拷貝到進程的頁目錄表的第
768項到1023項中
??memcpy(pgd?+?USER_PTRS_PER_PGD,?swapper_pg_dir?+?USER_PTRS_PER_PGD,?
(PTRS_PER_PGD?-?USER_PTRS_PER_PGD)?*?sizeof(pgd_t));
?}
?return?pgd;
}
#endif

比較後來的版本:

pgd_t *pgd_alloc(struct mm_struct *mm) ->
 pgd_ctor(mm, pgd); //關鍵代碼,將指向內核空間的頁目錄項拷貝到新分配的pgd對應的項目中。
->
    clone_pgd_range(pgd + KERNEL_PGD_BOUNDARY, //item points to the kernel space
             swapper_pg_dir + KERNEL_PGD_BOUNDARY, KERNEL_PGD_PTRS);

ref.?

[1]?http://biancheng.dnbcw.info/linux/321897.html

[2]?http://m.blog.csdn.net/blog/SunnyBeiKe/6898253

轉載于:https://www.cnblogs.com/bittorrent/p/3833610.html

總結

以上是生活随笔為你收集整理的Kernel Page Global Directory (PGD) of Page table of Process created in Linux Kernel的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。