当前位置: 技术问答>linux和unix
Linux 的进程和线程管理
来源: 互联网 发布时间:2016-02-06
本文导语: linux 的内核进程, 用户进程, 内核线程,用户线程是怎么样进行管理,调度处理的。。 | 严重同意楼上的,此书鄙人看了足一年才明白 函数: start_kernel() -> rest_init() -> cpu_idle() 进程: swapper0 ...
linux 的内核进程, 用户进程, 内核线程,用户线程是怎么样进行管理,调度处理的。。
|
严重同意楼上的,此书鄙人看了足一年才明白
函数: start_kernel() -> rest_init() -> cpu_idle()
进程: swapper0 | swapper0 swapper0 (即idle进程)
函数: |->init() ->A
进程: swapper1
A:
函数: do_pre_smp_initcalls()->smp_init()...->ret=nb->notifier_call()..->__cneate_workqueue()
进程: | swapper1 | swapper1 |->khelper
函数: |->migration_init() |
进程: | migration/0 | migration/1
函数: |->spawn_ksoftirqd() |
进程: | ksoftirqd/0 | ksoftirqd/1
函数: |->spawn_softlockup_task() |
进程: | watchdog/0 | watchdog/1
->...do_initcalls() ->... /sbin/init3 进程 (init 用户进程取得代swapper1内核进程)
|->调用initcall_start-initcall_end之间的函数生成的内核线程守护线程
所有的线程调度内核都作进程处理,即进程调度
进程调度:2.6-2.2.6.23前采用O(1)算法
2.6.23及以后将采用CFS算法(Completely Fair Scheduler)
函数: start_kernel() -> rest_init() -> cpu_idle()
进程: swapper0 | swapper0 swapper0 (即idle进程)
函数: |->init() ->A
进程: swapper1
A:
函数: do_pre_smp_initcalls()->smp_init()...->ret=nb->notifier_call()..->__cneate_workqueue()
进程: | swapper1 | swapper1 |->khelper
函数: |->migration_init() |
进程: | migration/0 | migration/1
函数: |->spawn_ksoftirqd() |
进程: | ksoftirqd/0 | ksoftirqd/1
函数: |->spawn_softlockup_task() |
进程: | watchdog/0 | watchdog/1
->...do_initcalls() ->... /sbin/init3 进程 (init 用户进程取得代swapper1内核进程)
|->调用initcall_start-initcall_end之间的函数生成的内核线程守护线程
所有的线程调度内核都作进程处理,即进程调度
进程调度:2.6-2.2.6.23前采用O(1)算法
2.6.23及以后将采用CFS算法(Completely Fair Scheduler)
|
推荐LZ去看看<<LINUX内核设计与实现>>,里面详细讲解了进程,线程,内核线程的生成与调度方法。不要想走捷径,仔细看一看,会有所收获的
|
注:linux-2.6.21.5-smp 双cpu
|
问题太大了,建议自己先查查资料先。
|
http://blog.csdn.net/fengyv/archive/2006/05/11/724048.aspx
|
Linux Device Driver 3rd
Linux内核情景分析
Linux内核情景分析