Linux0.11内核中的wait_on_buffer和wait_on_inode函数是非常有代表性的延迟性函数处理过程,网上关于这两个函数的讨论
也很多,最主要的一个问题是为什么要在判断b_lock之前关中断,这个问题也困扰了我很长时间,查了不少帖子,学到不少东西,但总是
觉得有些细节没有弄清楚,因此借着自己实践开发一个小OS的过程,研究了一下wait_on_buffer,还是学到不少东西的。贴出来,分享
给大家,欢迎讨论~
Linux0.11版函数定义:
static inline void wait_on_buffer(struct buffer_head * bh)
{
cli();
while (bh->b_lock)
sleep_on(&bh->b_wait);
sti();
}
分析如下:
1. 首先可以明确,wait_on_buffer是工作在内核态的函数。更进一步应当理解为两种可能性:
或者是当前某个用户态的进程请求数据进而引发的,那么可以认为是当前进程进入了内核态;又或者是内核本身的某个任务
引发的操作。不管怎样wait_on_buffer背后是代表这某个进程或者任务的。
2. wait_on_buffer中通过cli和sti起到一个保

本文深入探讨Linux0.11内核中的wait_on_buffer函数,解析其在关闭和开启中断之间的目的,以及如何保护临界区,避免并发修改。通过分析,揭示了该函数如何在内核态下保证进程或任务的连续性,并讨论了中断禁止对系统的影响。
最低0.47元/天 解锁文章
3826

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



