2010-01-19 77 views
0

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

谢谢你这么多 Mareike

回答

3

大多数操作系统都改变一个进程的CPU亲和力,从而将其限制在一台物理或虚拟核设施。但多线程是一种程序架构,而不是CPU设备。

0

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

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

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

+0

操作系统可能拒绝运行内核线程,但有可用库提供进程内线程;操作系统阻止这些人工作的唯一方法是根本不运行该进程。 – 2010-01-19 18:52:54

1

我想你想问的是,“有没有办法阻止操作系统利用超线程和/或多核?”

答案是肯定的。这不受单条指令的支配,事实上它不像你可以写一个设备驱动程序,它会自动禁用所有的硬件。这大部分取决于内核在启动时如何配置中断控制器。

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

0

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

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

p.s.请注意'多线程'可以是硬件或软件。我同意所有其他人的答案,如处理器/线程亲和力。