一、概述
内核线程是一种在内核空间实现后台任务的方式,该任务可以进行繁忙的异步事务处理,也可以睡眠等待某事件的发生。
二、调度策略
1. SCHED_NORMAL
非实时调度策略,由nice值决定什么时候被调用,默认nice值为100~139。
2. SCHED_FIFO
实时调度策略,先到先调度。一旦占用CPU则一直运行,直到有更高优先级任务,或者自己任务执行完成。
3. SCHED_RR
实时调度策略,时间片轮转。当时间片使用完了,系统将重新分配时间片,并将线程重新排队在队尾。同样可以被高优先级抢占。
三、数据结构
struct task_struct;
四、创建并启动内核线程
1. 创建内核线程
/* fnc:内核线程的回调函数;
* data:传给内核线程的私有数据;
* name:内核线程的名字
* 返回值不为空时为有效内核线程结构
*/
struct task_struct *kthread_create(int (*fnc)(void *data), void *data, const char *name, …);
2. 启动内核线程
void wake_up_process(struct task_struct