码迷,mamicode.com
首页 > 系统相关 > 详细

Linux-0.12内核sleep_on函数分析

时间:2014-05-26 04:28:02      阅读:439      评论:0      收藏:0      [点我收藏+]

标签:style   blog   c   ext   http   a   

sleep_on用于进程休眠,原型如下:

void sleep_on(struct task_struct **p)

当进程访问某个互斥资源时,如果资源被另外进程占用,当前进程就需要休眠。

假设资源的结构如下:

struct res

{

....

struct task_struct *wait;
}

其实我们参考下文件系统的i节点就会发现,i节点也是一种资源,它的结构体中就有一个变量i_wait。那么我们就用i节点举例。如果进程访问某个i节点,发现i节点被锁住,当前进程就需要睡眠:sleep_on(&i_wait),这样当前进程就在i节点的i_wait队列上睡眠,那么重点是i_wait睡眠队列是如何形成的呢?用下面的图片叙述。

注意点:p和current是全局变量,tmp是进程私有,在进程栈中。i_wait=NULL,并且i_lock=1,代表inode被锁住没法访问。

bubuko.com,布布扣

Linux-0.12内核sleep_on函数分析,布布扣,bubuko.com

Linux-0.12内核sleep_on函数分析

标签:style   blog   c   ext   http   a   

原文地址:http://blog.csdn.net/getnextwindow/article/details/26672945

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!