在运行时禁用多线程

时间:2010-01-19 18:33:19

标签: multithreading

我想知道英特尔的处理器是否在其指令集中提供了指令 打开和关闭多线程或超线程功能?基本上,我想 知道操作系统是否可以通过指令以某种方式控制这些功能?

非常感谢你 Mareike

4 个答案:

答案 0 :(得分:3)

大多数操作系统都具有更改进程的CPU关联性的功能,从而将其限制为单个物理或虚拟核心。但多线程是一种程序架构,而不是CPU工具。

答案 1 :(得分:1)

我认为您要问的是,“有没有办法阻止操作系统使用超线程和/或多核?”

肯定是答案。这不受单个指令的约束,实际上并不是说你可以编写一个自动禁用所有硬件的设备驱动程序。其中大部分取决于内核在引导时如何配置中断控制器。

首次启动计算机时,会有一个指定的处理器用于自举。操作系统负责相应地配置多处理器硬件。在PC平台上,这将涉及从引导固件提供的内存表中读取有关多处理器配置的信息。此数据可能符合ACPI或Intel多处理器规范。然后内核使用该日期相应地配置APIC硬件。

答案 2 :(得分:0)

多线程和多任务处理不是CPU中的特殊指令或模式。编写操作系统的人使用中断只是一种奇特的方式。有一个硬件定时器,基本上一个计数器由一个时钟信号递增,当它溢出时触发一个中断。确切的中断是特定于平台的。在过去,这个定时器实际上是主板上的一个单独的芯片/电路,它简单地连接到CPU的一个中断引脚上。现代CPU内置了这个定时器。因此,要关闭多线程和多任务,操作系统可以简单地禁用中断信号。

或者,由于实际安排进程/线程是操作系统的工作,操作系统可以简单地决定忽略所有线程而不运行它们。

超线程是另一回事。它允许操作系统查看可以执行代码的第二个虚拟CPU。从来没有必要直接处理这个问题,所以我不确定如何关闭它(或者即使它是可能的)。

答案 3 :(得分:0)

没有禁用超线程或其他内核的x86指令。但是, BIOS设置可以关闭这些功能。因为它可以在BIOS中设置,所以需要重新启动,通常它不受操作系统控制。 Windows启动选项限制了活动核心的数量,但HyperThreading只能通过BIOS打开/关闭。当前的英特尔超线程实现不允许动态打开和关闭(并且在近期内不会轻易实现)。

我假设您的问题中的“多线程”为“hardware multithreading”,其技术上与HyperThreading相同。但是,如果你真的打算使用软件级多线程(即多任务处理),那么这是完全不同的问题。对于现代操作系统来说(几乎)是不可能的,因为它们默认支持多任务处理。而且,这个问题实际上没有意义。如果你想运行MS-DOS(作为x86的实模式,可以完成单个任务),这是有意义的。

P.S。请注意,“多线程”可以是硬件或软件。此外,我同意所有其他人的答案,如处理器/线程亲和力。