内核内存管理详解
1. 页面分配限制
在 4KB 大小的系统中,一次最多可分配的页面数为 1024 个,即最多可分配 1024 * 4KB = 4MB 的内存, kmalloc 也是如此。
2. 转换函数
-
page_to_virt():用于将struct page(例如由alloc_pages()返回的)转换为内核地址。 -
virt_to_page():接受一个内核虚拟地址,并返回其关联的struct page实例。
这两个函数都在<asm/page.h>中定义:
struct page *virt_to_page(void *kaddr);
void *page_to_virt(struct page *pg)
宏 page_address() 可用于返回对应于 struct page 实例起始地址(逻辑地址)的虚拟地址:
void *page_address(const struct page *page)
在 get_zeroed_page() 函数中可以看到其使用方式
超级会员免费看
订阅专栏 解锁全文
1630

被折叠的 条评论
为什么被折叠?



