我的问题:
1)在本书现代操作系统中,它表示线程和进程可以处于内核模式或用户模式,但它并没有明确说明它们之间的区别。
2)为什么内核模式线程和进程的切换成本高于用户模式线程和进程的切换?
3)现在,我正在学习Linux,我想知道如何在内核模式和用户模式下分别在IN LINUX SYSTEM中创建线程和进程?
4)在本书现代操作系统中,它表示进程可能处于用户模式,但是在用户模式进程中创建的线程可能处于内核模式。这怎么可能?
答案 0 :(得分:4)
有些术语问题更多是由于历史事故造成的,而不是其他任何事情。
“线程”通常是指进程内的控制线程,并且可能(在这种情况下)意味着“具有自己的堆栈的任务,但是它与其他线程共享访问不在该堆栈上的所有内容”相同的保护域“。
“过程”倾向于指一个独立的“保护域”,它可能(并且在这种情况下)具有在其中具有多个线程的能力。给定两个进程 P1 和 P2 , P1 影响 P2 (反之亦然)的唯一方法是通过某些特定的“通信通道”,例如文件,管道或套接字;通过Unix / Linux信号之类的“进程间”信号;等等。
由于线程之间没有这种屏障,一个线程很容易干扰(破坏另一个线程使用的数据)。
所有这些独立于用户vs内核,但有一个例外:在“内核”中 - 这里有一个隐含的假设,即只有一个内核 - 你可以访问整个机器状态始终,以及完全特权做任何事情。因此,您可以故意(或在某些情况下意外地)忽视或关闭硬件保护并混淆“属于”其他人的数据。
这主要涵盖了Q1中几个可能混淆的项目。至于Q2,问题的答案是“它没有”。一般来说,因为线程不涉及(同样多)保护,所以从一个线程切换到另一个线程更便宜:您不必告诉硬件(以任何方式)它不应再允许各种访问,因为线程 T1 和 T2 具有“相同”访问权限。然而,在进程之间切换,与 P1 和 P2 一样,你“跨越了一个保护屏障”,这有一定的损失(实际惩罚因硬件和一些人而异范围内OS作家的技能)。
同样值得注意的是,从用户到内核模式的交叉,反之亦然,也越过保护域,这又有一些成本。
在Linux中,有多种方法可以让用户进程创建线程数量,包括“POSIX线程”(pthreads)和clone
调用(clone
的详细信息,这是非常灵活,超出了这个答案的范围)。如果你想编写可移植的代码,你应该坚持使用pthreads。
在Linux内核中,线程完全不同,您需要Linux内核文档。
我无法正确回答Q4,因为我没有这本书,也不确定他们在这里指的是什么。我的猜测是,它们意味着每当任何用户进程或线程进行“系统调用”(从操作系统请求某些服务)时,这就会跨越该用户/内核保护屏障,然后由内核来验证用户代码具有该操作的适当权限,然后执行该操作。执行此操作的内核部分正在运行内核级保护,因此需要更加小心。
某些硬件(现在大部分已经过时)已经(或者有)不仅仅是两级硬件提供的保护。在这些系统上,“用户进程”具有最小的直接权限,但在那些上面你会找到“执行模式”,“系统模式”和(最有特权的)“内核”或“核心”模式。这些旨在降低跨越各种保护障碍的成本。在“执行”中运行的代码没有对机器中所有内容的完全访问权限,因此它可以假设用户提供的地址有效,并尝试使用它。如果该地址实际上无效,则该异常将上升到下一个更高级别。只有两个级别 - “用户”,没有特权;和“内核”,必须非常仔细地编写完全特权的内核代码。但是,现在可以以低成本提供“虚拟机”,这几乎淘汰了对多个硬件级别的保护的需求。一个人简单地编写一个真正的内核,然后让它在他们“思考”的“内核模式”中运行其他东西。这就是VMware和其他“管理程序”系统所做的事情。
答案 1 :(得分:2)
用户模式线程在用户模式下由进程中的某些东西调度,并且进程本身是内核调度程序处理的唯一内容。
这意味着您的进程从CPU获得了一定数量的咕噜声,您必须在所有用户模式线程中共享它。
简单的情况,你有两个进程,一个有一个线程,一个有一百个线程。
使用简单的内核调度策略,单线程进程中的线程获得50%的CPU,并且百线程进程中的每个线程各占0.5%。
使用内核模式线程,内核本身可以管理您的线程并独立调度它们。使用相同的简单调度程序,每个线程只需触摸1%的CPU grunt(101个线程共享100%的CPU)。
就内核模式切换更为昂贵的原因而言,它可能与您需要切换到内核模式的事实有关。用户模式线程在用户模式下执行所有操作(显然),因此在线程切换操作中不涉及内核。
在Linux下,您使用clone
调用创建线程(和进程),类似于fork
,但可以更好地控制事物。
你的最后一点有点迟钝。我无法确定,但它可能正在谈论用户和内核模式,因为一个人可能正在执行用户代码而另一个可能正在内核中进行一些系统调用(这需要切换到内核或管理员模式)。
这与讨论线程支持(用户或内核模式支持线程)时的区别不同。没有这本书的副本,我无法明确地说,但这是我最好的猜测。