所以我已经得到进一点大会最近和我是个初学者所以我想知道如果有人可澄清一些东西。我是否每个进程都有它自己的一套注册,并且每个螺纹可以修改这些寄存器的权利?。怎么那么多线使用同样的寄存器而不引起的冲突?或是否每个线程有它自己的一套寄存器?

有帮助吗?

解决方案

一个线程上下文切换包括保存当前执行上下文的寄存器,以及与来自执行上下文保存的值开始切换到装载寄存器。 (除其他事项外)。因此,每个线程有效地都有自己的寄存器组。此外它自己的堆栈,因为ESP是一个寄存器。

在思考的一个办法是,通过保存关闭当前寄存器的状态,并用新的状态装载寄存器获得线程。如果情况并非如此,那么它不是一个线程切换。如果还要在切换到不同组的虚拟地址表,那么你有什么是一个过程开关而不是线程切换。

你说:

  

我把它每个进程都有它自己的寄存器组,每个线程可以修改这些寄存器吧?

但是,这并不完全正确。每个CPU芯具有单个寄存器组。每当OS切换到一个不同的线程,这些寄存器被改变。但是,只有一个在任何一个时间在CPU核执行线程。过程并不真正拥有自己的寄存器,进程自己的线程(或至少一个线程)和线程有登记,或者更确切地说,一个地方,以保持值寄存器,而线程正在等待一个CPU核心可为运行。

其他提示

在硬件中,只有一组用于每个处理器核心的寄存器。正因为如此,只有一次一个线程可以使用的寄存器。多个线程在同一时间在单个核心由一个线程快速切换到另一个运行。该线程运行调度时是工作的操作系统。

当从一个线程切换到另一个时,寄存器的内容保存到存储器的特殊区域,并为下一个线程寄存器被复制回处理器。这包括指令指针,这样线程就知道到哪里继续当它得到控制返回执行。这个过程被称为上下文切换。

由于操作系统的调度器是在又另一个线程,它可以当它正在运行仅调度进程。这意味着,一个特殊的硬件的特征 - 一个中断 - 必要控制上下文切换。只有操作系统可以调度上下文切换中断。

螺纹是通过核心或一个操作系统,因此该方案不应该关心它。如果没有核心或操作系统是可用的,然后你需要实现它自己。你将需要:

  • 一个函数,它将拯救国家 所有注册在你的CPU(SP:栈 指针,内部登记册的价值, 电脑:程序柜台等等)中的一个 其他存储空间的切换到一个新的 螺纹。
  • 一种功能负载线环境为你的CPU环境,恢复以前保存的内部登记册的价值到你的中央处理器登记册。

根据在所述处理器上,则只有一组寄存器。每个线程不是一个组。

有方式来保存所有寄存器的状态,以使得线程可以占用它离开的地方。

一些处理器便于此

你必须

  • 一个 组进程 这是你的一个操作系统,
  • 过程 有一个存储空间,其中包含 动态分配的记忆, 静态数据代码会,
  • 过程 有一个列表中的 螺纹
  • 螺纹 有其自己的 设置寄存器, 程序计数

背景下开关 你的调度程序交换线数据以通过执行另一个。

通常一个 过程 重于一个 螺纹 和各种调度办法的存在:

  • 做上下文开关只是在内部(绿色线)给你的程序(你的操作系统将只考虑一个单一的进程以便:很难多核心)
  • 你可以分配数量的真正进程有一个混合的方法允许容易多核心的优化。

每个线程具有它自己的上下文,它包括一组寄存器,CPU标志,栈,的等

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top