内核线程和用户线程有什么区别?是内核线程是在内核模式下调度和执行的吗?用于创建内核线程的技术是什么?
用户线程是否已在用户模式下调度,执行?是内核不参与执行/调度用户线程吗?在执行用户线程时发生中断然后谁处理它?
每当创建线程时,就会为每个线程创建一个TCB。现在是用户级线程的情况 这个TCB是在用户的地址空间中创建的吗?
如果在处理上下文切换的两个用户级线程之间切换?
有一个多线程模型的概念:
这些型号是什么?这些模型实际上是如何使用的?
已经阅读了很多关于这个主题的文章,但仍然感到困惑 想要清除这个概念..
提前致谢, 塔齐姆
答案 0 :(得分:6)
维基百科对大多数(如果不是全部)问题都有答案。
答案 1 :(得分:5)
内核线程和用户线程之间有什么区别?
内核线程具有特权,可以访问禁止用户模式线程的内容。在维基百科上查看“Ring (Computer Security)”。在Windows上,用户模式对应于Ring 3,而内核模式对应于Ring 0。
用于创建内核线程的技术是什么?
这在很大程度上取决于操作系统。
现在在用户级线程的情况下是否在用户的地址空间中创建了这个TCB?
TCB记录有关内核在运行该线程时使用的线程的信息,对吧?因此,如果它是在用户空间中分配的,则用户模式线程可能会修改或损坏它,这似乎不是一个好主意。那么,你不觉得它是在内核空间中创建的吗?
这些型号是什么?这些模型实际上是如何使用的?
Wikipedia似乎非常清楚。
答案 2 :(得分:1)
内核线程是指内核负责调度的线程。这意味着内核能够同时在不同的cpus / core上调度每个线程。
如何使用它们与编程语言和线程API有很大不同,但作为一个简单的说明,
void task_a();
void task_b();
int main() {
new_thread(task_a);
new_thread(task_b);
// possibly do something else in the main thread
// wait for the threads to complete their work
}
在我熟悉的每个实现中,内核可能随时暂停它们。 (“先发制人”)
用户线程或“用户调度线程”使程序本身负责在它们之间进行切换。有很多方法可以做到这一点,相应地,它们有各种各样的名称。
一方面你有“绿线”;基本上尝试与内核线程做同样的事情。因此,您可以使用真实的线程保留编程的所有复杂性。
在另一端,你有“纤维”,它需要在任何其他纤维运行之前屈服。这意味着
作为我能想到的最简单的纤维例子:
while(tasks_not_done) {
do_part_of_a();
do_part_of_b();
}
每个人都做了一些工作,然后在完成该部分时返回。请注意,这些是在相同的“硬件线程”中按顺序完成的,这意味着您不会从并行性中获得性能提升。另一方面,它们之间的相互作用非常明确,因此您没有竞争条件。每个功能的实际工作情况可能有所不同。它们也可以是某些矢量/数组的“用户线程对象”。
答案 3 :(得分:0)
本质上,用户线程在具有适当权限级别的用户的上下文中运行,例如用户线程肯定无法访问内核级内存/数据结构/例程等。而内核线程在OS内核的上下文中运行,从而赋予它们执行可访问低级内核例程/内存/的代码的权限数据结构。