1 POSIX pthread_create原理
1)fork()、pthread_create()、vfork()对应的系统调用分别是sys_fork()、sys_clone()、sys_vfork(),它们在内核中都是通过do_fork()实现的。
2)系统中所有的进程都组织在init_task.tasks链表下面,每个进程的线程组织在每个进程task_sturct->signal的链表下。参考函数for_each_process()和for_each_process_thread()。
3)根据上述分析,Linux用户态和内核线程都由task_struct结构体描述,是一个轻量级的进程,因此内核中current变量可以表示进程、用户态线程和内核线程。
2 RTLinux
2.1 prio和rt_priority的区别
- 实时进程的优先级(rt_priority)数字越大则优先级越高,99最高,0最低;而普通进程正好相反,优先级(static_prio)数字越大则优先级越低,100最高,139最低(对应nice值-20 ~ 19)
- 内核调度是按照task_struct中的prio来调度的,prio的值越小,优先级就越高。实时线程的rt_priority转换成prio:prio = MAX_RT_PRIO - 1 - p->rt_priority;普通线程的static_prio转换成prio:prio = static_prio = MAX_RT_PRIO + nice + 20
- 进程创建时的默认优先级是120,对应的nice值为0
2.2 priority inheritance
in kernel/locking/rtmutex.c
rt_mutex_adjust_prio() - 适用于优先级值小于100的实时任务
in kernel/sched/core.c
rt_mutex_setprio()
2.3 中断线程化
in kernel/irq/manage.c
setup_irq()
2.4 URLs
https://wiki.linuxfoun
LXC和udev知识点
最新推荐文章于 2025-09-12 09:47:51 发布

最低0.47元/天 解锁文章
9510

被折叠的 条评论
为什么被折叠?



