内核线程的创建(2)

                                                     

                                    

                      

        *  进程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
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值