内核模式和用户模式下的线程(和进程)有什么区别?

我的问题:

1)在现代书籍操作系统 ,它表示线程和进程可以处于内核模式或用户模式,但并没有说清楚它们之间的区别。

2)为什么内核模式线程和进程的开关比用户模式线程和进程的开关花费更多?

3)现在,我正在学习Linux,我想知道如何在内核模式和用户模式下分别在IN LINUX SYSTEM中创build线程和进程?

4)在书现代操作系统中 ,它表示进程可能处于用户模式,但在用户模式进程中创build的线程可能处于内核模式。 这怎么可能?

Solutions Collecting From Web of "内核模式和用户模式下的线程(和进程)有什么区别?"

用户模式线程在进程中由用户模式调度,而进程本身是内核调度程序处理的唯一东西。

这意味着你的进程从CPU 获得了一定的咕噜声,你必须在你所有的用户模式线程中共享它。

简单的情况下,你有两个进程,一个有一个线程和一个有一百个线程。

使用简单的内核调度策略,单线程进程中的线程获得CPU的50%,百线程进程中的每个线程分别得到0.5%。

使用内核模式线程,内核自己管理你的线程并独立调度它们。 使用相同的简单调度程序,每个线程只会在CPU咕噜声的1%以下(101线程共享100%的CPU)触摸。

就内核模式切换为什么更昂贵的原因而言,它可能与您需要切换到内核模式来完成这一事实有关。 用户模式线程以用户模式(显然)完成所有工作,所以在线程切换操作中不涉及内核。

在Linux下,你用clone调用创建线程(和进程),类似于fork但是对事物有更好的控制。

你的最后一点是微不足道的。 我不能确定,但​​可能是在说用户和内核模式,因为可以执行用户代码,另一个可能在内核中进行一些系统调用(这需要切换到内核模式或超级用户模式)。

在讨论线程支持(用户或内核模式对线程的支持)时,这与区别不同。 没有这本书的副本,我不能说明确的,但这是我最好的猜测。

历史事故造成的一些术语问题比其他任何事情都要多。

“线程”通常是指进程内的控制线程,并且可能(在这种情况下)意味着“具有其自己的堆栈的任务,但是与同一保护域中的其他线程共享对不在该堆栈上的所有事物的访问”。

“过程”往往指的是一个独立的“保护领域”,可以(在这种情况下)有能力在其中有多个线程。 给定两个进程P1P2P1影响P2的唯一方式(反之亦然)是通过一些特定的“通信通道”,如文件,管道或套接字; 通过诸如Unix / Linux信号的“进程间”信号; 等等。

由于线程之间没有这种屏障,所以一个线程很容易干扰另一个线程所使用的数据。

所有这一切都与用户vs内核无关 ,只有一个例外:在“内核”中,有一个隐含的假设,即只有一个内核 – 您可以随时访问整个机器状态,并拥有完整的权限做任何事。 因此,您可以故意(或在某些情况下)无视或关闭硬件保护和混淆“属于”他人的数据。

这主要涵盖了第一季度几个可能混淆的项目。 至于第二季度,问题的答案是“它不”。 一般来说,因为线程不涉及(尽可能多的)保护,从一个线程切换到另一个线程便宜:不必告诉硬件(以任何方式)不应该允许各种访问,因为线程T1T2有“相同”的访问权限。 然而,在P1P2之间切换的过程,你“跨越了一个保护屏障”,这有一定的惩罚(实际的惩罚差异很大,硬件,在某种程度上,操作系统作家的技能)。

另外值得注意的是,从用户到内核模式的交叉,反过来也是跨越一个保护域,这也是一种成本。

在Linux中,用户进程创建多少线程的方式有很多,包括“POSIX线程”(pthreads)和clone调用( clone细节,这是非常灵活的,超出了这个答案的范围) 。 如果你想写可移植的代码,你应该坚持使用pthreads。

在Linux内核中,线程完全不同,你需要Linux内核文档。

我无法正确回答Q4,因为我没有这本书,也不确定这里提到的是什么。 我的猜测是,这意味着无论何时用户进程或线程进行“系统调用”(从操作系统请求某些服务),都会跨越该用户/内核的保护屏障,然后由内核来验证用户代码对该操作具有适当的权限,然后执行该操作。 这样做的内核部分运行内核级保护,因此需要更加小心。

一些硬件(现在大多已经过时)已经(或已经)不止两个硬件级别的保护。 在这些系统上,“用户进程”具有最少的直接权限,但是在这些系统之上你可以找到“执行模式”,“系统模式”和(最高权限)“内核”或“核心”模式。 这是为了降低跨越各种保护壁垒的成本。 在“执行”中运行的代码没有完全访问机器中的所有内容,因此可以假定用户提供的地址是有效的,并尝试使用它。 如果这个地址实际上是无效的,那么例外情况就会上升到更高的水平。 只有两个级别 – “用户”,非特权; 和“内核”,完全特权的内核代码必须写得非常仔细。 然而,现在有可能以低成本提供“虚拟机”,这几乎已经过时了对多个硬件保护级别的需求。 一个简单的写一个真正的内核,然后让它在他们“认为”是“内核模式”的地方运行其他的东西。 这是VMware和其他“管理程序”系统所做的。