假设要调用__get_free_page
以便在ZONE_NORMAL
区域中请求内核一个空闲页面,所以使用GFP_KERNEL
标志。我们知道返回的地址是一个内核逻辑地址,因此页表中存在一个“永久”映射,用于该逻辑地址,物理地址用宏__pa
计算。我的问题是:如果存在该页面的永久映射,是否可能为该页面交换磁盘?如果是的话,我认为当它再次在内存中交换时,它会每次都放在同一个页面框架中......这是正确的吗?
答案 0 :(得分:4)
如果在内核中使用__get_free_page
在内核中分配页面,则不可交换。在Linux中,struct page
跟踪物理页面,该页面不可交换。交换工作在用户空间映射及其内容的层面上;因此,如果换出用户空间内存,则可以将内容交换回不同的物理页面。但该物理页面将映射到相同的用户空间虚拟地址。
内核在Linux中无法交换。