当前位置: 首页 > 面试题库 >

Linux-线程和进程调度优先级

云锦
2023-03-14
问题内容

如果我们在Linux上使用默认调度策略创建pthreads(pthread_create)或进程(fork),那么调度程序在调度进程和线程时会优先处理优先级相同的进程和线程吗?

假设有一个进程P1有一个线程,有进程P2有2个线程T1 T2

可以说只有一个核心..调度将是P1 T1 P1 T2 P1 T1 P1 T2

要么

P1 T1 T2 P1 T1 T2


问题答案:

Linux不再计划任何进程。

在内核中, 线程 是经过调度的。现在,过程的概念是一种人工构造,主要由内核外部的事物看到。显然,内核必须知道如何将线程捆绑在一起,而 不是
出于调度目的。

基本上,内核维护着很多线程,并且每个线程都有一个线程组领导者,这在外部被视为进程。线程具有线程ID和线程组ID-
与PID和PPID(进程ID和父进程ID)之间的关系非常相似。

创建常规 线程时, 内核会为其提供一个全新的线程ID,但其线程组ID设置为与创建它的线程的组ID相同。这样,它看起来像是流程中通往外部世界的线程。

当你 叉, 内核赋予它一个全新的线程ID和设置它的线程组ID相同的值作为其线程ID。这样,对于外部世界来说,这似乎是一个过程。

大多数报告进程的非内核实用程序实际上只是在线程ID与线程组ID相同的线程上报告。

其他方法也有一些细微之处,可能太复杂了,无法在此处介绍。我上面写的是(希望)一篇不错的中级论文。

现在,对于您的特定问题,因为P1只有一个线程(没有P1T2),所以不会出现这种情况。

Withing内核,线程P1T1P2T1P2T2和,假设他们有相同的调度属性和行为相同的(一),这是他们将怎样安排。

(a):显然,如果线程开始在I / O上阻塞(内核在I /
O可用之前不会调度它们)或提早释放其时间量(内核可能会优先考虑优先发挥其性能),则会发生变化。但是他们却表现不一样。



 类似资料:
  • Linux 是一个多用户、多任务的操作系统,系统中通常运行着非常多的进程。但是 CPU 在一个时钟周期内只能运算一条指令(现在的 CPU 采用了多线程、多核心技术,所以在一个时钟周期内可以运算多条指令。 但是同时运算的指令数也远远小于系统中的进程总数),那问题来了:谁应该先运算,谁应该后运算呢?这就需要由进程的优先级来决定了。 另外,CPU 在运算数据时,不是把一个集成算完成,再进行下一个进程的运

  • 问题内容: 我试图了解Linux如何处理进程调度和线程调度。我读过Linux可以安排进程和线程。 Linux是否具有线程调度程序和进程调度程序?如果是,他们如何合作? 问题答案: 的Linux内核调度器被实际调度的任务,并且这些要么螺纹或(单线程)工艺。 因此,在调度程序的上下文中, 任务 (内核内部)是正在调度的事物,可以是某些 内核线程( 例如或),多线程进程的某些 用户线程 (例如)或单线程

  • 主要内容:nice命令,renice 命令当 Linux 内核尝试决定哪些运行中的进程可以访问 CPU 时,其中一个需要考虑的因素就是进程优先级的值(也称为 nice 值)。每个进程都有一个介于 -20 到 19 之间的 nice 值。默认情况下,进程的 nice 值为 0。 进程的 nice 值,可以通过 nice 命令和 renice 命令修改,进而调整进程的运行顺序。 nice命令 nice 命令可以给要启动的进程赋予 NI 值,但

  • 问题内容: 在阅读了这样的问题之后,我有了一些疑问。请帮助理解。 调度涉及确定何时运行流程以及运行时间的多少。 linux内核是否调度线程或进程?由于内核中的进程和线程没有区别,调度程序如何对待它们? 如何确定每个线程的数量?一个。如果为一个进程确定了一个时间量(例如100us),是在该进程的所有线程之间共享该时间吗?或b。每个线程的数量由调度程序决定吗? 注意:问题1和问题2是相关的,可能看起来

  • 我有一系列的生产者和消费者线程。在消费者线程中,我有锁。wait()函数,如果队列中没有数据,则停止执行。在生产者线程中生成数据时,锁定。调用notify(),使用者线程脱离等待状态并移动到线程调度程序以获取锁。当notifier生产者线程释放锁时,线程调度程序会选择一个随机线程进行处理(它也可以是另一个生产者线程,但我希望它给这个等待的线程加锁)。我的问题是,是否有一种方法可以让这些等待和通知的

  • 我熟悉最短进程下一个调度算法(SJF),它是一种非抢先算法。但是,该算法一次只能处理一个突发时间最小的进程。是否可以一次修改为“下一个最短流程2”? 所以对于这里提到的例子: 第一行表示进程总数。随后的行表示进程ID、到达时间、突发时间。 一次有两个流程的SJF计划将按如下方式工作: 这里 Idle表示当前有多少处理器空闲。在这种情况下,有2个处理器。可以观察到,在时间< code>t=4,有2个