教师：在本课中,
我们将介绍CPU的功能｡
这包括多线程､
对称多处理､
单核与多核以及虚拟化支持｡
现在, 我们要介绍的第一件事是多线程,
也称为SMT或同步多线程或超线程,
这取决于您购买的CPU｡
超线程是英特尔用于此过程的术语｡
更通用的术语是SMT,
即同时多线程｡
现在, 当你处理线程时,
这是一个由软件应用程序发送到处理器的单一指令流的概念｡
现在, 大多数应用程序都被设计为在单个线程中运行单个进程｡
这意味着该软件以串行方式执行所有操作｡
所以, 如果我给你五件不同的事情做你会做这些事情的顺序,
一, 二, 三, 四, 五｡
如果每一个都花了你10分钟,
那总共是50分钟｡
但是如果我允许你做多线程, 不按顺序做这些事情,
或者同时做这些事情, 你就可以一次做多件事,
把这些事情发送到不同的线程或不同的流｡
例如, 假设我告诉你,
我想让你用右手写下一些东西,
同时, 我想让你用左手敲桌子｡
你可以同时做这两件事,
因为你有两个线程,
或者两只手来做这些动作｡
这就是多线程的思想｡
因此, 英特尔和其他制造商所做的就是开发一种方法,
允许软件与他们的处理器对话,
并在单个处理器内同时运行多个并行线程｡
这允许这些线程在该处理器中运行,
并减少CPU等待下一个操作的空闲时间｡
通过这样做, 我们基本上可以尝试增加我们的能力,
并通过处理器处理更多的事情,
并尝试在相同的时间内完成更多的事情｡
现在, 这很好, 但它只在一定程度上起作用,
软件必须能够使用并理解这一点,
才能告诉系统, 你想同时使用多个线程｡
这是处理超线程之类的东西时的一个很大的限制｡
现在, 另一种解决这个问题的方法是所谓的对称多处理（SMP）｡
SMP是工作站和服务器的传统方式,
因为它们实际上有多个处理器｡
现在, 要做到这一点, 你必须有一个主板,
有两个处理器插槽或四个处理器插槽, 然后你会安装两个或四个处理器到主板｡
当您这样做时, 所有这些处理器都需要具有相同的类型和速度,
以便它们可以一起工作｡
你的底层操作系统必须了解如何使用多个处理器｡
默认情况下, 大多数操作系统都不会这样做｡
因此, 您必须拥有基于服务器的操作系统,
如Windows Server 2019,
才能支持多个处理器｡
因此, SMP或对称多处理在台式机和笔记本电脑中不是很有用｡
相反, 大多数台式机和笔记本电脑不得不依靠英特尔处理器的超线程或同步多线程,
或SMT, 如果你使用的是AMD处理器｡
所以, 超线程和SMT在很长一段时间内都工作得很好,
但最终我们仍然达到了我们想要处理的东西的数量的限制, 并且只有一个处理器来处理它｡
现在, 由于大多数操作系统不知道如何处理给定主板上的多个插槽或多个处理器,
制造商开始创建所谓的多核软件包｡
现在, 当我提到封装时,
我指的是CPU, 物理芯片｡
现在, 这些制造商决定做的不是在主板上的两个不同插槽上有两个物理封装或两个物理芯片,
而是创建一个作为单个CPU运行的单个封装｡
但在那个包里面,
实际上有多个CPU或多个处理器｡
这意味着对于主板来说, 它看起来像一个物理CPU,
因为它是, 但在它的内部, 有多个核心, 或中央处理器核心, 在它的内部｡
现在, 这允许任何操作系统与该单个处理器或处理器包进行对话,
然后处理器包本身可以在该CPU内部的内部多核之间划分这些指令｡
这样想吧
你的房子有四间卧室｡
如果有人来到前门, 他们说, 我需要一张床过夜,
他们真的不在乎这四个人中的哪一个, 只要他们有一张床过夜｡
所以, 你进入前门, 把他们带到一个房间,
只给他们看一个房间｡
这就是这个多核处理器的本质｡
当新的人进来的时候, 它会把他们带到一个单独的房间,
让他们在那里过夜, 或者做他们的处理,
然后再把他们送出去｡
所有这些都是由前门的人处理的,
在这种情况下, 就是多核包｡
然后, 它将它们放入单独的隔间或单独的子处理器,
它需要做这项工作｡
这就是多核软件包的概念｡
现在, 我们大多数人都听说过这个,
因为在你的系统上,
你可能有一个多核处理器｡
你可能有一个双核处理器, 这意味着你在一个芯片里有两个CPU,
或者你有一个四处理器, 这意味着你在一个芯片里有四个处理器｡
或者你有一个hexa处理器,
这意味着你在一个芯片里有六个核心｡
或者你有一个octa处理器,
这意味着你在一个芯片上有八个核心｡
例如, 在我的CPU上, 我的台式机上有一个八核处理器,
它是一个物理芯片, 但它内部有八个子处理器｡
因此, 这被称为八核或多核处理器｡
现在, 除了拥有多核和超线程之外,
您实际上可以将两者结合起来, 因此每个处理器都包含在软件包中, 例如,
在我的系统中, 我有八核,
它有八个处理器｡
现在, 在这个包中,
有八个处理器,
这八个处理器中的每一个都可以支持超线程｡
这意味着我有16个线程和8个CPU,
在这台特定的机器上给了我大量的处理能力｡
好了, 现在我们已经讨论了这节课要讲的四件事中的三件｡
我们已经讨论了超线程和同步多线程,
称为SMT｡
我们已经讨论过对称多处理,
或者说在插槽中有多个CPU,
然后我们讨论了多核处理器的概念,
即一个CPU内部有多个处理器,
无论是两个､ 四个､ 六个还是八个｡
现在, 我们需要讨论的最后一件事是虚拟化｡
现在, 虚拟化是CPU的另一个特性, 但它与我们刚刚讨论的三个特性没有真正的关系｡
我们刚才讨论的三个问题都是关于如何从单个芯片或多个芯片中获得更高性能｡
但是当我们谈论虚拟化时,
我们谈论的是能够模拟那里实际上不存在的硬件｡
现在, 这实际上是通过英特尔的虚拟化技术（称为VT）或AMD的虚拟化技术（称为AMD-V）实现的｡
现在, 这两个都提供了处理器扩展来支持虚拟化,
这被称为硬件辅助虚拟化｡
这可能会引出一个问题,
什么是虚拟化？
虚拟化是一种让一台计算机假装它在自己内部运行多台其他计算机的能力｡
现在, 看起来像是, 我可能有一台像我的MacBook一样的笔记本电脑｡
在这台MacBook上, 我只有一个操作系统, macOS｡
现在, 如果我想运行Windows或Linux,
我必须重新格式化我的机器并安装该软件｡
那就太不方便了
但有了虚拟化, 我就不必这样做了｡
相反, 我可以运行一个像VMware或Virtualbox或Parallels这样的程序,
在这个软件中, 我可以创建一个虚拟计算机｡
我可以告诉它, 我希望它有一个处理器或两个处理器或四个处理器｡
我可以告诉它我需要多少内存和存储空间｡
它将创建这个虚拟计算机,
这是只存在于软件中｡
现在, 当我在它里面运行新的操作系统,
比如Windows, 我可能会说这是一个双核处理器｡
它有4G内存和50G硬盘｡
所有这些都只存在于软件中｡
但是当我将Windows安装到该虚拟机时, Windows认为它是一台完整的计算机｡
它认为它有一个完整的两个处理器, 一个完整的4G内存和一个完整的50G硬盘驱动器｡
因此, 对于Windows来说,
它认为它拥有所有这些物理硬件, 这就是虚拟化允许我们做的事情｡
它允许我们虚拟化计算机并提供虚拟硬件,
并能够在单个物理主机内运行多个操作系统｡
现在, 除了VT和AMD-V之外,
您还可以在某些现代处理器中找到第二级虚拟化硬件支持｡
在Intel系统上, 这被称为EPT或扩展页表｡
当你使用AMD处理器时,
他们称之为快速虚拟化索引, 或RVI｡
这两者都被认为是软件虚拟化的第二级地址转换或SLAT功能,
然后由硬件处理器底层支持,
以允许更好的虚拟内存管理, 并在使用虚拟机内部的内存时提高性能｡
我们将在各自的课程中详细讨论虚拟化,
但现在, 我只想让您了解,
某些CPU能够在其处理器集内执行此操作, 并且具有此功能的处理器（例如支持Intel的VT或AMD的AMD-V的处理器）在执行虚拟化时会比不支持虚拟化的处理器提供更好的性能｡
因此, 如果您要构建一台机器,
并希望将其用于虚拟化, 例如一台将在其上运行许多其他虚拟服务器的服务器,
则需要确保您选择的处理器具有VT或AMD-V, 以便它们可以支持直接硬件加速虚拟化, 因为这将给你一个更好的体验和更好的性能, 而不是你必须做软件虚拟化｡