第六章:高级字符驱动程序操作(续1)
以下是第2部分:掌握如何使进程休眠(并唤醒)
分为4个小的部分(都是通过分析源码的形式,必要时加以总结):
1、进程休眠的细节
2、进程唤醒的细节
3、scullpipe中read的实现
4、scullpipe中write的实现
1、 进程休眠的细节
Linux内核中最简单的休眠方式就是称为wait_event的宏(以及它的几个变种),形式如下:
进程调用上面某一个宏进入休眠,最常用的是wait_event_interruptible,这个宏的具体细节如下:
看一看__wait_event_interruptible这个宏
总之,调用了wait_event或其变种,则进程进入休眠。
2. 进程唤醒的细节
与休眠细节相似,唤醒是通过调用wake_up宏来实现的,最常用的变种是wake_up_interruptible。这个宏的具体细节如下:
================分析wait_queue_func_t的源码================
在wait.h中可以看到:
其中default_wake_function定义在sched.c中, 如下
看看try_to_wake_up函数,这是唤醒进程的核心函数:
3、scullpipe中read的实现(简单休眠方法)
4、scullpipe中write的实现(高级休眠方法)