From d9b4941c3b9c4f62a6adc34bc68c71336a97ba4a Mon Sep 17 00:00:00 2001 From: gatieme Date: Sun, 5 Jun 2016 13:55:22 +0800 Subject: [PATCH] ... --- .../02-create/07-kernel_thead/README.md | 61 +++++++++++++++++- .../07-kernel_thead/images/ps-eo.jpg | Bin 0 -> 46156 bytes 2 files changed, 58 insertions(+), 3 deletions(-) create mode 100644 study/kernel/01-process/02-create/07-kernel_thead/images/ps-eo.jpg diff --git a/study/kernel/01-process/02-create/07-kernel_thead/README.md b/study/kernel/01-process/02-create/07-kernel_thead/README.md index 9c06549..0877be4 100644 --- a/study/kernel/01-process/02-create/07-kernel_thead/README.md +++ b/study/kernel/01-process/02-create/07-kernel_thead/README.md @@ -109,8 +109,6 @@ struct task_struct 使用kthread_run,与kthread_create不同的是,其创建新线程后立即唤醒它,其本质就是先用kthread_create创建一个内核线程,然后通过wake_up_process唤醒它 -内核线程会出现在系统进程列表中, 但是在ps的输出中进程名command由方括号包围, 以便与普通进程区分。 - ##2号进程kthreadd的诞生 ------- @@ -145,6 +143,17 @@ Linux中的workqueue机制就是为了简化内核线程的创建。通过kthrea + +内核线程会出现在系统进程列表中, 但是在ps的输出中进程名command由方括号包围, 以便与普通进程区分。 + +如下图所示, 我们可以看到系统中, 所有内核线程都用[]标识, 而且这些进程父进程id均是2, 而2号进程kthreadd的父进程是0号进程 + +>使用ps -eo pid,ppid,command + +![ps查看内核线程](./images/ps-eo.jpg) + + + ##kernel_thread ------- @@ -208,12 +217,22 @@ extern void daemonize(void); 延后内核的创建工作, 将内核线程的创建工作交给一个内核线程来做, 即kthreadd 2号进程 -但是在kthreadd还没创建之前, 我们只能通过kernel_thread这种方式去创建, +但是在kthreadd还没创建之前, 我们只能通过kernel_thread这种方式去创建 +同时kernel_thread的实现也改为由_do_fork(早期内核中是do_fork)来实现, 参见[kernel/fork.c](http://lxr.free-electrons.com/source/kernel/fork.c?v=4.5#L1779) +` +``c +pid_t kernel_thread(int (*fn)(void *), void *arg, unsigned long flags) +{ + return _do_fork(flags|CLONE_VM|CLONE_UNTRACED, (unsigned long)fn, + (unsigned long)arg, NULL, NULL, 0); +} +``` ##kthread_create ------- + ```c struct task_struct *kthread_create_on_node(int (*threadfn)(void *data), void *data, @@ -253,3 +272,39 @@ struct task_struct *kthread_create_on_node(int (*threadfn)(void *data), 使用kthread_run,与kthread_create不同的是,其创建新线程后立即唤醒它,其本质就是先用kthread_create创建一个内核线程,然后通过wake_up_process唤醒它 + +#内核线程的退出 +------- + +线程一旦启动起来后,会一直运行,除非该线程主动调用do_exit函数,或者其他的进程调用kthread_stop函数,结束线程的运行。 + +```c + int kthread_stop(struct task_struct *thread); +``` + +kthread_stop() 通过发送信号给线程。 + +如果线程函数正在处理一个非常重要的任务,它不会被中断的。当然如果线程函数永远不返回并且不检查信号,它将永远都不会停止。 + +在执行kthread_stop的时候,目标线程必须没有退出,否则会Oops。原因很容易理解,当目标线程退出的时候,其对应的task结构也变得无效,kthread_stop引用该无效task结构就会出错。 + +为了避免这种情况,需要确保线程没有退出,其方法如代码中所示: +```c +thread_func() +{ + // do your work here + // wait to exit + while(!thread_could_stop()) + { + wait(); + } +} + +exit_code() +{ + kthread_stop(_task); //发信号给task,通知其可以退出了 +} +``` + +这种退出机制很温和,一切尽在thread_func()的掌控之中,线程在退出时可以从容地释放资源,而不是莫名其妙地被人“暗杀”。 + diff --git a/study/kernel/01-process/02-create/07-kernel_thead/images/ps-eo.jpg b/study/kernel/01-process/02-create/07-kernel_thead/images/ps-eo.jpg new file mode 100644 index 0000000000000000000000000000000000000000..7524ef6c1a5f7e2ad0a038bbb9ef85a20af76e98 GIT binary patch literal 46156 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 O)tAuaf4yS=nD{4NjHO@z literal 0 HcmV?d00001