【发布时间】:2022-10-07 02:13:20
【问题描述】:
我知道操作系统中有三个线程映射模型。
- 一对一
- 多对一
- 多对多
在这个问题中,我假设我们使用一对一模型.
假设,现在我重新启动计算机,并且有10内核级线程已经在运行。
过了一会儿,我决定运行一个 python 程序,它将启动一个具有四个线程的进程。其中三个线程必须运行一个执行系统调用的函数。
这是一个问题,当我运行 python 程序时,正确的场景是什么。
a) 当一个python程序启动时,内核会立即在内核空间启动另外4个线程(所以现在内核空间有14个线程)。当用户级的这 3 个线程发起系统调用时,内核会将这些用户级线程映射到内核在 python 程序启动时创建的 4 个内核级线程中的 3 个,这也意味着我们将浪费 1 个内核级线程。
b) 当一个 python 程序启动时,内核将不会立即在内核空间中启动另外 4 个线程。相反,只要这 3 个用户级线程启动系统调用并准备与内核对话,内核就会创建新的内核级线程。在这种情况下,内核只会创建 3 个线程,这也意味着我们不会浪费任何内核级线程。
c) 与第二种情况非常相似,但是在这种情况下,当这 3 个用户级线程准备好运行系统调用并与内核对话时,内核将做的是让 3 个已经创建的内核级线程停止执行当前的工作,然后让他们做 python 程序要求内核做的工作。
这意味着调度程序将选择 3 个随机内核级线程来停止他们正在做的事情,然后将这些任务信息存储到某个地方。之后,调度程序将要求这 3 个内核级线程首先完成 python 程序作业。在这种情况下,我们在内核级别总是只有 10 个线程。
感谢任何回复和建议的学习材料!
标签: linux multithreading linux-kernel operating-system