Linux 的进程和线程管理
linux 的内核进程, 用户进程, 内核线程,用户线程是怎么样进行管理,调度处理的。。
------解决方案--------------------问题太大了,建议自己先查查资料先。
------解决方案--------------------http://blog.csdn.net/fengyv/archive/2006/05/11/724048.aspx
------解决方案--------------------Linux Device Driver 3rd
Linux内核情景分析
------解决方案--------------------推荐LZ去看看<<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)
------解决方案--------------------注:linux-2.6.21.5-smp 双cpu