📜  操作系统中的多线程架构和系统介绍

📅  最后修改于: 2022-05-13 01:56:11.250000             🧑  作者: Mango

操作系统中的多线程架构和系统介绍

在我看来,多线程架构实际上是一种趋势,并且是即将到来的微处理器设计的可靠且易于适用的解决方案,因此我研究了四篇关于该主题的研究论文,只是为了熟悉该主题所涉及的技术。

当今世界,超大规模集成电路 (VLSI) 技术发展迅速,允许处理器设计人员在单个芯片上吸收更多功能,未来微处理器将很快能够在每个机器周期发出超过 12 条指令。

现有的超标量和超大指令字 (VLIW) 微处理器利用多个功能单元,以便从控制流的单个线程中利用指令级并行性。这些类型的微处理器依赖于系统的编译器或硬件,以便从程序中提取指令级并行性,然后在每个机器周期的多个功能单元上调度独立的指令。然而,当未来微处理器的发布率增加时,编译器或硬件将不得不通过分析更大的指令缓冲区(例如-Reservation Station Entry)从程序中提取更多指令级并行性。
即使对于少量功能单元,也很难通过单个控制线程提取足够的并行性。

单线程排序机制的局限性如下:

  1. 为了利用指令级并行性,需要一起检查和发布来自单个指令流中不同基本构建块的独立指令。
  2. 随着发布率的增加,需要更大的指令缓冲区(例如-Reservation Station Entry)来包含几个基本构建块,这些构建块将控制对不同分支条件的依赖,但必须将它们的检查放在一起。
  3. 并且还需要具有分支预测的指令级分析执行来跨基本块边界移动独立指令。当编译器尝试通过管道将具有许多条件分支的循环进行流水线处理时,此问题尤其严重。
  4. 在这里,系统的准确度非常低。
  5. 在这里,与多线程架构相比,系统的速度相当低。

多线程架构的特点如下:

  1. 在其常规形式中,多线程处理器由许多线程处理元素组成,这些元素通过单向环相互连接,这有助于以更好的方式执行系统。
  2. 所有的多线程处理元件都有自己私有的一级指令缓存,但它们将共享一级数据缓存和二级缓存。
  3. 在多线程系统中也存在一些共享寄存器文件,用于维护一些全局寄存器和锁定寄存器。
  4. 在运行时,多个线程处理元素,每个都有自己的程序计数器和指令执行路径,然后可以轻松地同时从多个程序位置获取和执行指令。
  5. 每个当前线程处理元素总是有一个私有内存缓冲区来缓存推测性存储,并且还用于支持运行时数据依赖性检查。
  6. 幸运的是,编译器静态地将程序的控制流图划分为与控制流图的一部分重合的线程。一个线程对与其他并发线程没有或只有少数依赖关系的一组数据执行一轮计算。编译器稍后将确定线程的粒度(它将直接影响性能),这几乎不是循环的一次或多次迭代。
  7. 程序的真正执行是从它的入口线程开始的。这个入口线程然后可以将系统的处理转移到某个另一个线程处理元素上的后继线程。后继线程可以进一步将系统的处理转移到它自己的后继线程。这个过程将一直持续到所有线程处理元素都忙于一些适当的任务。
  8. 当多个线程在多线程处理器上执行时,按顺序排列的原始线程称为头线程。然后从它派生的所有其他线程称为后继线程。一旦头线程完成其计算,它将进一步退出并释放线程处理元素,然后它的(只是)后继线程成为新的头线程。线程的完成和退出必须遵循原始顺序执行顺序。
  9. 在多线程系统(或模型)中,线程可以在有或没有控制推测的情况下转移系统的处理其后继线程之一。当系统的处理从 head 转移到它的后继线程而没有控制推测时,执行 fork 操作的线程必须确保新生成的后继线程的所有控制依赖都得到满足。
  10. 然而,如果系统的处理从头部转移到其带有控制推测的后继线程,则必须稍后验证所有推测的控制相关性。如果任何推测的控制依赖性不正确,则线程必须发出命令以终止后继线程及其所有后续线程。
  11. 通常,多线程架构将使用线程流水线执行模型来强制并发线程之间的数据依赖性。与超标量处理器中的指令流水线机制不同,指令排序、数据依赖性检查和转发由处理器硬件自动执行,多线程架构通过显式线程管理和通信指令执行线程启动和数据转发。