【问题标题】:Process in Linux Kernel spaceLinux内核空间中的进程
【发布时间】:2015-01-25 10:10:37
【问题描述】:

在用户空间我们可以通过执行程序或在程序内部调用fork来创建一个进程,内核将为每个用户空间进程创建进程描述符(task_struct)。

在内核空间中是否有任何称为进程的概念,如果有,它们将如何创建?

据我了解,内核线程将使用kernel_thread() 等在内核空间中创建,kernel_thread() 在内部调用do_fork(),所以内核线程也使用task_struct 表示?

如果用户空间进程和内核空间线程都使用task_struct 表示,那么调度程序将如何调度用户空间进程和内核空间线程?

【问题讨论】:

  • task_struct 控制单个线程(内核或用户空间),而不是进程。
  • task_thread 控制单线程意味着,用户空间和内核空间的一切都是线程?用户空间中的进程和线程有何不同?
  • 用户空间中的进程和线程共享的内容不同。线程共享 FD 和内存(以及其他一些东西),而进程不共享(除非明确共享)。 kernell内存空间只有一个,所以说内核进程没有意义,只说内核线程。

标签: linux linux-kernel linux-device-driver embedded-linux archlinux


【解决方案1】:

是的,都是通过task_struct处理的。

关键内核线程具有 RT(“实时”)调度程序类,其优先级高于通常用于用户空间线程的 CFS 调度程序。 .看看你的ps:

# ps ax --format uname,pid,ppid,tty,cmd,cls,pri,rtprio | egrep '(FF|RR)'

(内核线程显示在方括号中)

但是,正如您所见,许多内核线程都有 TS 调度程序。我认为没有理由让所有内核线程实时。例如,您可以将 VLC 播放器显示的情感场景推迟回写到磁盘。

【讨论】:

  • 您好,在 linux 内核中是否可以运行多个调度程序,例如 CFS 调度程序和 RT 调度程序?根据我的理解,会有不同的调度器策略,如 RR、FF,并且任何一种策略都可以在系统中或由调度器使用。但是在执行上面更新的 ps 命令后,我才知道系统或调度程序可以使用不同的策略,那么进程优先级和调度程序策略是如何相关的?
  • RT 和 CFS 是具有不同实现的调度程序类。当内核选择下一个任务时,它会遍历类列表:(stop -> deadline (SCHED_DEADLINE) -> rt (SCHED_{FIFO,RR}) -> fair (SCHED_{BATCH,OTHER}) -> idle (SCHED_IDLE)。见pick_next_task()的实现@
  • 调度程序类和调度程序策略的含义相同。
【解决方案2】:

此外,我认为即使是与另一个线程共享内存段(例如堆、全局变量)的 POSIX 线程也由 task_struct 处理。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-03-24
    • 2011-03-18
    • 1970-01-01
    • 1970-01-01
    • 2011-09-08
    • 1970-01-01
    相关资源
    最近更新 更多