【问题标题】:How are threads made?螺纹是如何制成的?
【发布时间】:2019-08-28 13:45:44
【问题描述】:

我正在阅读线程,据我了解,它们是执行上下文的一组值。据我了解,线程由允许 CPU 继续运行一组指令的值(寄存器、PC、堆栈等)组成。

但是,我的问题是:这些线程是如何制作的?我听说我的一些教授把线程这个词作为将一个进程分解为多个(大部分)独立的代码部分(即多线程)的方法。这是如何运作的?是否有另一段内存专门存储线程可以运行的内容及其状态?

【问题讨论】:

  • 基本上,通过分配线程控制块和堆栈空间,使用模拟就绪线程的值初始化和设置它们 - 一个之前正在运行但被中断的线程。 “推入”堆栈的 IP 是线程的第一条指令。将 TCB 地址推送到就绪列表中,运行调度程序/调度程序,然后......关闭它:)

标签: multithreading operating-system


【解决方案1】:

首先,您必须了解操作系统在其一般工作以及看似相同功能的实现方面存在很大差异。 所以不要进入这类问题,认为如果一个操作系统以某种方式做某事,那么其他操作系统也会以类似的方式做。

现在回答你的问题

这些线是如何制作的?

我将以 Linux 为例进行回答。在创建新进程时,Linux 允许您指定新进程将与其父进程共享哪些数据结构(文件描述符、IO 上下文等)。您可以使用clone 系统调用来执行此操作。 您可以在 clone 的文档中看到它需要一些参数来指定共享属性。

如果task_struct线程与其父线程共享所有可共享的数据结构,现在您可以调用它(因为该属性与线程的常规定义一致)。如果它不共享,那么您将其称为进程。

但就 Linux 而言,没有线程或进程的概念,您所拥有的只是一个 task_struct,它可以与其父级共享某些资源。

【讨论】:

    猜你喜欢
    • 2023-04-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-06-28
    • 2011-04-01
    • 2011-05-01
    相关资源
    最近更新 更多