毕业论文开发语言企业开发JAVA技术.NET技术WEB开发Linux/Unix数据库技术Windows平台移动平台嵌入式论文范文英语论文
您现在的位置: 毕业论文 >> linux >> 正文

进程只有TASK_RUNNING状态才能重新被调度么

更新时间:2013-8-23:  来源:毕业论文

进程只有TASK_RUNNING状态才能重新被调度么

/*globalfifo读函数*/
static ssize_t globalfifo_read(struct file *filp, char __user *buf, size_t count,
loff_t *ppos)
{
int ret;
struct globalfifo_dev *dev = filp->private_data;
DECLARE_WAITQUEUE(wait, current);

down(&dev->sem); /* 获得信号量 */
add_wait_queue(&dev->r_wait, &wait); /* 进入读等待队列头 */

/* 等待FIFO非空 */
if (dev->current_len == 0) {
if (filp->f_flags &O_NONBLOCK) {
ret =  - EAGAIN;
goto out;
}
__set_current_state(TASK_INTERRUPTIBLE); /* 改变进程状态为睡眠 */
up(&dev->sem);

schedule(); /* 调度其他进程执行 */

上面的代码通过调用schedule函数使当前进程进入休眠,其他进程里面通过wake_up函数可以唤醒,wake_up为什么能唤醒它呢?不是说进程只有TASK_RUNNING状态才能重新被调度么?这个进程前面通过__set_current_state(TASK_INTERRUPTIBLE)将本进程设置成了TASK_INTERRUPTIBLE,应该调度不了啊?

把本进程设置成TASK_INTERRUPTIBLE,就是不希望本进程被调度,等待wake_up, 在wake_up前都不会被调度。因为wake_up前等待的条件都不会成熟,所以不需要进程再次被调度了。所以要改变状态。wake_up的时候状态会改成running的,别担心

设为首页 | 联系站长 | 友情链接 | 网站地图 |

copyright©youerw.com 优尔论文网 严禁转载
如果本毕业论文网损害了您的利益或者侵犯了您的权利,请及时联系,我们一定会及时改正。