我正在阅读线程,据我了解,它们是执行上下文的一组值。据我了解,线程由允许CPU继续运行一组指令的值(寄存器,PC,堆栈等)组成。
但是,我的问题是:这些线程是如何制成的?我听说我的一些教授把“线程”一词作为一种将进程分解为多个(大部分)独立代码部分(即多线程)的方法。这是如何运作的?内存的另一部分专门存储线程可以运行的内容以及状态吗?
答案 0 :(得分:0)
首先,您必须了解操作系统的一般工作方式以及看似相同的功能的实现都有很大不同。 因此,不要以为如果一个操作系统以某种方式执行某项操作,而其他操作系统会以类似方式执行此操作,就不会出现此类问题。
现在您的问题
这些线程是怎么制成的?
我将以Linux为例进行回答。在创建新进程时,Linux允许您指定新进程将与其父进程共享哪些数据结构(文件描述符,IO上下文等)。您可以使用clone系统调用来执行此操作。 您可以在clone的文档中看到,它带有一些指定共享属性的参数。
现在,如果task_struct线程与其父级共享所有可共享的数据结构,则可以调用该线程(因为此属性与线程的常规定义一致)。如果没有共享,则将其称为一个过程。
但是就Linux而言,没有线程或进程的概念,您所拥有的只是一个task_struct,它可以与其父级共享某些资源。