在什么意义上,每个线程作为一个单独的CPU出现在操作系统中?

时间:2015-01-12 16:39:33

标签: multithreading operating-system

在书Modern Operating Systems中,

  

多线程对操作系统有影响,因为每个线程   在操作系统中显示为单独的CPU 。例如,考虑一个有两个的系统   实际的CPU,每个都有两个线程。操作系统将此视为四个   的CPU。

我不明白。线程是轻量级过程,而后者又是一个正在运行的程序。一个CPU是一个硬件。

线程在cpu上运行。

OS直接管理硬件,包括cpu,而进程(包括线程)通过OS提供的抽象间接地看到硬件。操作系统怎么不知道有多少cpus?

每个线程在什么意义上作为单独的CPU出现在操作系统中?

感谢。

3 个答案:

答案 0 :(得分:1)

cpu具有多个物理内核的事实是一回事(cpu内核),但cpu可以拥有虚拟内核的事实通常在硬件环境中称为“线程”(但它们不同于编程术语“threds”)。在硬件环境中考虑“线程”的简单方法是cpu核心的数量(注意这部分是正确的,也是不正确的,但为了理解差异,我建议查看维基百科,例如:{ {3}})。

答案 1 :(得分:1)

声明不是"愚蠢"并且是理解任务和线程的一个不错的第一近似。

任务/线程有一组寄存器,一个存储器地址空间(填充RAM,有时是ROM),以及执行指令的能力。这与基本CPU相同。因此,人们可以将多任务或多线程系统视为CPU的集合。

(并且,为了进一步进行这种类比,有些情况下,在单个线程/任务上模拟多个线程/任务。)

是的,现代CPU有很多额外的寄存器和控件,例如,控制任务和线程,但这超出了基础。

而且,从操作系统中的多线程的角度来看,无论您是在单个CPU上的多个线程中运行多个执行流,还是多个流,确实存在对同步和原子性的基本相同的担忧每个都在自己的CPU上运行。唯一的主要区别在于缓存一致性,即使在这种情况下,也存在单个CPU上的每个线程都有自己的缓存的系统。

答案 2 :(得分:1)

SMT CPU的各个线程显示为OS的独立内核。例如,在具有超线程的x86上,处理器间中断适用于虚拟核心。例如,SIPI(启动ipi)发往" all"将启动所有线程,而不仅仅是所有实际的物理核心。

操作系统可以知道有多少AP(与BSP签约的应用程序处理器,启动处理器,当你打开机器时启动的处理器),通过观察指示他们启动的代码的次数at(使用SIPI)运行(但最好用于检查),或者通过解析MP tables(绝对这样做,无论如何都要检测内存布局和设备等)。