Linux内核虚拟内存中的直接映射

时间:2017-04-13 11:23:55

标签: linux linux-kernel virtual-memory mmu

如LDD中所述,内核虚拟内存(IA-32地å€ç©ºé—´ä¸­çš„å‰1GB)被分区为内核逻辑地å€å’Œå†…核虚拟地å€ã€‚内核逻辑地å€ç›´æŽ¥æ˜ å°„,这æ„味ç€æ‚¨å¯ä»¥é€šè¿‡å‡åŽ»æŸä¸ªï¼ˆ0xC0000000)值将虚拟地å€æ˜ å°„到物ç†åœ°å€ã€‚对于移动btwn映射,定义了一对å®ï¼š__pa()å’Œ__va()。

我的问题是:"这些å®çš„用例是什么?" 并且:"直接映射有什么好处?"

我å¬è¯´ç›´æŽ¥æ˜ å°„å…许使用更大的页é¢ï¼ˆä¾‹å¦‚,4MB),从而导致更高效的翻译。是å¦ä½¿ç”¨é¡µè¡¨æ‰§è¡Œç›´æŽ¥æ˜ å°„区域的翻译?

1 个答案:

答案 0 :(得分:0)

众所周知,在 32 ä½æ—§æ—¶ä»£ï¼Œ0 ~ 3 GB 的虚拟内存地å€ç©ºé—´å±žäºŽç”¨æˆ·ç©ºé—´ï¼›3 GB ~ 4 GB 的虚拟内存地å€ç©ºé—´å±žäºŽå†…核空间;

在内核中,它通常从 Normal Zone 分é…物ç†å†…存,通常在 1 GB 以下;

例如我们通过kmalloc(100, GFP_KERNEL)

分é…内存

GFP_KERNEL 表示从 Zone Normal 分é…物ç†å†…存;

这样,Kernel å°±å¯ä»¥è½»æ¾åœ°å°† 0xC000000(åˆå,3 GB å移)添加到物ç†å†…存地å€ï¼ˆ0 ~ 1 GB),然åŽå°†ç‰©ç†å†…存地å€ç›´æŽ¥æ˜ å°„到内核虚拟内存地å€ï¼ˆ3 ~ 4 GB);< /p>

通过这ç§æ–¹å¼ï¼Œå†…æ ¸å¯ä»¥æ›´å¿«åœ°è®¿é—®ç‰©ç†å†…存,åªéœ€å‡åŽ»0xC0000000ï¼› (内存访问是通过虚拟地å€ï¼Œéœ€è¦å°†è™šæ‹Ÿåœ°å€æ˜ å°„到物ç†åœ°å€ï¼‰