慢慢欣赏linux 页框lru的作用

slab系统对象利用lru可以找到kmem_cache

void kfree(const void *objp)
	struct kmem_cache *c;
	c = virt_to_cache(objp);
		=>struct kmem_cache *virt_to_cache(const void *obj)
			struct page *page = virt_to_head_page(obj);
				=>struct page *virt_to_head_page(const void *x)
					struct page *page = virt_to_page(x);//对象在页框之中
					return compound_head(page);
			return page_get_cache(page);
				=>struct kmem_cache *page_get_cache(struct page *page)
					page = compound_head(page);
					return (struct kmem_cache *)page->lru.next;//可以参考slab数据结构图
	__cache_free(c, (void *)objp);

伙伴系统利用lru组织链表

struct page *buffered_rmqueue(struct zone *preferred_zone, struct zone *zone, int order, gfp_t gfp_flags, int migratetype)
	page = __rmqueue(zone, order, migratetype);
		=>struct page *__rmqueue(struct zone *zone, unsigned int order, int migratetype)
			page = __rmqueue_smallest(zone, order, migratetype);
				=>struct page *__rmqueue_smallest(struct zone *zone, unsigned int order, int migratetype)
					page = list_entry(area->free_list[migratetype].next, struct page, lru);//只有第一个页加入到伙伴系统里面,第一个页被摘掉了,整个order都脱离了
					list_del(&page->lru);

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值