内核线程的创建(2)

来源:互联网 发布:电视盒子看电影软件 编辑:程序博客网 时间:2024/05/29 16:52

                                                     

                                    

                      

        *  进程A执行执行kthread_create()函数中的wait_for_completion(create->done)后进入睡眠, 一直持续到创建的内核线程的第一次执行才被唤醒。

        *  补充: 或者是create_kernel()执行kernel_thread()创建进程描述符时失败,也一样会complete(create->done).触发进程A的唤醒(内核线程创建失败).

                                                                                                        


          现在新的内核线程已经创建好了,唯一要等待的是新内核线程获得cpu开始执行.前面提到他第一个要执行的函数便是ip寄存器中的kthread_thread_helper()函数.这个函数最终会[CALL %si], 也就是调用了kthread(). 

                                                                                                    

                                                       

                                      

                           内核线程kt获得人生第一次的cpu执行权的实际任务就是执行complete(create->done)来通知创建它的进程A, “他已经创建好了”,然后就进入了睡眠。 所以创建内核线程的进程A必须要唤醒kt,才能开始内核线程的工作。

                           kt = kthread_create(...,...,...);

                           wake_up_process(kt);  //唤醒kt内核线程.

                 至此内核线程kt和进程A便各走各的人生路. 

0 0
原创粉丝点击