系统中的每个物理页面都有一个与之关联的结构页面,以跟踪我们目前使用该页面的内容。 请注意,我们无法跟踪哪些任务正在使用页面,但如果它是页面缓存页面,则rmap结构可以告诉我们谁正在映射它。
struct页面中的对象以双字块组织,以便允许我们在struct page的部分上使用原子双字操作。 这目前仅供竹节使用,但这种安排允许在flags / mapping和lru list指针上使用原子双字操作。
struct page结构体内容如下,定义在include/linux/mm_types.h文件中
struct page {
/* First double word block 第一个双字块 */
unsigned long flags; /*原子标志,有些可能是异步更新的 */
struct address_space *mapping; /* 如果低位清除,则指向inode address_space或NULL。
如果页面映射为匿名内存,则设置低位,并指向anon_vma对象:请参阅下面的PAGE_MAPPING_ANON。*/
/* Second double word 第二个双字 */
struct {
union {
pgoff_t index; /* 在映射中的偏移 */
void *freelist; /* slub / slob第一个自由对象 */
bool pfmemalloc; /* If set by the page allocator, ALLOC_NO_WATERMARKS was set and the low watermark was not
* met implying that the system is under some pressure. The caller should try ensure this page is only used to
* free other pages.
* 如果由页面分配器设置,则设置ALLOC_NO_WATERMARKS并且不满足低水印,这意味着系统处于某种压力下。

Linux内核通过struct page结构体跟踪物理页面的使用情况,特别是其引用计数(_count)和状态标志(flags)字段。页描述符存储在mem_map数组中,用于记录每个页框的状态,如是否为空闲或已分配给进程。当_count为-1时,页框是空闲的;若大于等于0,则表示已被占用。flags字段则提供了更多关于页框状态的详细信息。
最低0.47元/天 解锁文章
823

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



