博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
页面锁
阅读量:4215 次
发布时间:2019-05-26

本文共 906 字,大约阅读时间需要 3 分钟。

lock_page 可以占用这个页面,这样其他进程要使用这个页时只能在睡眠中等待static inline void lock_page(struct page *page){	#这里提示在使用lock_page这个函数时会等待	might_sleep();	#检查是否可以锁定这个page.如果没有其他进程用这个page,则直接设置flag来锁定这个page,否则调用__lock_page	#来等待这个页面被释放	if (!trylock_page(page))		__lock_page(page);}这两个函数分别分析如下:static inline int trylock_page(struct page *page){	#检查是否是复合页,如果是复合页则返回第一个页面,如果是正常也,则还是返回page	page = compound_head(page);	#设置PG_locked 来锁定这个页面,如果原来flag中PG_locked 已经被置位,则返回1,取反后返回0	return (likely(!test_and_set_bit_lock(PG_locked, &page->flags)));}回到lock_page 中,如果trylock_page 返回零说明这个页面已经被其他进程占用,则调用__lock_page 等待void __lock_page(struct page *__page){	#检查是否是复合页,如果是复合页则返回第一个页面,如果是正常也,则还是返回page	struct page *page = compound_head(__page);	#看来每个page对应一个wait_queue_head_t	wait_queue_head_t *q = page_waitqueue(page);	#在这个bit PG_locked上sleep 等待,并将当前进程设置为TASK_UNINTERRUPTIBLE	wait_on_page_bit_common(q, page, PG_locked, TASK_UNINTERRUPTIBLE, true);}

转载地址:http://rjnmi.baihongyu.com/

你可能感兴趣的文章
POJ 3087 解题报告
查看>>
POJ 2536 解题报告
查看>>
POJ 1154 解题报告
查看>>
POJ 1661 解题报告
查看>>
POJ 1101 解题报告
查看>>
ACM POJ catalogues[转载]
查看>>
ACM经历总结[转载]
查看>>
C/C++文件操作[转载]
查看>>
常见的排序算法
查看>>
hdu 3460 Ancient Printer(trie tree)
查看>>
KMP求前缀函数(next数组)
查看>>
KMP
查看>>
poj 3863Business Center
查看>>
Android编译系统简要介绍和学习计划
查看>>
Android编译系统环境初始化过程分析
查看>>
user2eng 笔记
查看>>
DRM in Android
查看>>
ARC MRC 变换
查看>>
Swift cell的自适应高度
查看>>
【linux】.fuse_hiddenXXXX 文件是如何生成的?
查看>>