Linux页描述符

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

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

系统中的每个物理页面都有一个与之关联的结构页面,以跟踪我们目前使用该页面的内容。 请注意,我们无法跟踪哪些任务正在使用页面,但如果它是页面缓存页面,则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并且不满足低水印,这意味着系统处于某种压力下。
						
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值