内核线程和用户线程之间有什么区别?内核线程是在内核模式下调度和执行的吗?用于创建内核线程的技术是什么?
是在用户模式下调度、执行用户线程吗?内核不参与执行/调度用户线程吗?当执行用户线程发生中断时,由谁来处理?
每当创建线程时,都会为每个线程创建一个TCB。现在,在用户级线程的情况下,这个TCB是在用户地址空间中创建的吗?
在处理上下文切换的两个用户级线程之间切换的情况下?
有一个多线程模型的概念:
这些模型是什么?这些模型是如何实际使用的?
几乎没有读过关于这个话题的文章,但仍然很困惑。
想要澄清这个概念..。
谢谢你,塔齐姆
发布于 2011-02-14 07:41:27
内核线程和用户线程之间有什么区别?
内核线程是有特权的,可以访问用户模式线程不可访问的东西.看看维基百科上的"环(计算机安全)“。在Windows上,用户模式对应于环路3,而内核模式对应于环0。
用于创建内核线程的技术是什么?
这非常依赖于操作系统。
现在,在用户级线程的情况下,这个TCB是在用户地址空间中创建的吗?
TCB记录关于内核在运行该线程时使用的线程的信息,对吗?因此,如果它是在用户空间中分配的,用户模式线程可能会修改或破坏它,这似乎不是一个好主意。那么,您不认为它是在内核空间中创建的吗?
这些模型是什么?这些模型是如何实际使用的?
维基百科似乎对此非常清楚。
发布于 2011-02-13 16:42:25
维基百科对大多数问题都有答案,如果不是全部的话。
科学)
纤维
发布于 2011-08-09 14:56:26
内核线程是指内核负责调度的线程。这意味着,除其他外,内核能够同时在不同的cpus/核心上调度每个线程。
如何使用它们与编程语言和线程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();
}如果每个人都做一些工作,则在完成该部分时返回。请注意,这些操作是在相同的“硬件线程”中依次完成的,这意味着您不会从并行处理中获得性能提高。另一方面,它们之间的交互是非常明确的,所以您没有种族条件。每个功能的实际工作可能会有所不同。它们也可以是来自某些向量/数组的“用户线程对象”。
https://stackoverflow.com/questions/4985182
复制相似问题