内核线程和用户线程优先级

时间:2016-12-19 16:02:47

标签: linux multithreading kernel

我们尝试评估在用户或内核中创建一些与hw相关的任务是否更好。 任务必须响应中断并执行一些将数据复制到物理(映射)存储空间的任务。

根据我的理解,在用户空间或内核中都要完成相同的任务。

唯一的问题是内核线程优先级高于用户线程优先级。

我们将pthread用于用户空间,或kthread用于内核线程。

所以,我的问题是:

当两个线程准备就绪时,内核线程的优先级是否高于用户线程?

修改 如果使用SCHED_FIFO创建kthread_create并给定优先级x, 和pthread_create是用SCHED_FIFO创建的,优先级为y, 并且pthread的优先级高于kthread,还是kthread会在用户线程之前进入调度程序吗?

谢谢!

2 个答案:

答案 0 :(得分:2)

内核模式线程必须始终可以抢占用户线程,因为内核模式线程需要响应硬件事件。这是因为操作系统设计而发生的。

内核线程的优先级高于用户线程,因为内核线程用于为应用程序提供特权服务。

除此之外,内核还使用它们来跟踪系统上正在运行的内容,将多少资源分配给哪个进程以及安排它们。

如您所知,对于用户空间中存在的每个线程都有相应的内核线程,因此如果系统范围(内核)中进程的线程具有足够高的优先级,则它们将同时在多个CPU上进行调度。意味着其他内核线程将被代表用户空间运行的内核线程抢占。

答案 1 :(得分:0)

Linux系统中的进程由struct task_struct结构表示。 现在对于内核线程p-> mm来说就是进程'地址空间为NULL,其活动地址空间由p-> active_mm表示。因此,当调度内核线程时,其next->active_mm将被设置为已调度的任务的prev->active_mm。这有助于最小化切换地址空间时的TLB刷新。

特定于arch的常量PROC_CHANGE_PENALTY定义了对同一cpu中的进程有利的cpu亲和性,它还优先于用户线程上的内核线程(它们的 - > mm!= NULL并需要开销)