打印本文 打印本文 关闭窗口 关闭窗口
Linux 2.4进程调度分析 5
作者:武汉SEO闵涛  文章来源:敏韬网  点击数2144  更新时间:2009/4/22 20:45:51  文章录入:mintao  责任编辑:mintao

2. 调度器工作时机

调度器的启动通常有两种方式:

A. 主动式

在核心应用中直接调用schedule()。这通常发生在因等待核心事件而需要将进程置于挂起(休眠)状态的时候--这时应该主动请求调度以方便其他进程使用CPU。下面就是一个主动调度的例子:

/* 节选自[drivers/input/mousedev.c] mousedev_read() */

                    add_wait_queue(&list->mousedev->wait, &wait);

                    current->state = TASK_INTERRUPTIBLE;

                    while (!list->ready) {

                               if (file->f_flags & O_NONBLOCK) {

                                         retval = -EAGAIN;

                                         break;

                               }

                               if (signal_pending(current)) {

                                         retval = -ERESTARTSYS;

                                         break;

                               }

                               schedule();

                    }

                    current->state = TASK_RUNNING; /* 这一句实际上可以省略,因为进程的状态在唤醒过程中就已经恢复到TASK_RUNNING了 */

                    remove_wait_queue(&list->mousedev->wait, &wait);

 

                              

     

其过程通常可分为四步:

  • 将进程添加到事件等待队列中;
  • 置进程状态为TASK_INTERRUPTIBLE(或TASK_UNINTERRUPTIBLE);
  • [1] [2] [3]  下一页

打印本文 打印本文 关闭窗口 关闭窗口