linux

CPU核心

物理核心

就是实实在在插在主机上看得见摸得着那块CPU硬件,可通过如下命令来查看物理CPU个数:

cat /proc/cpuinfo | grep 'physical id' | sort | uniq | wc -l

CPU核数

一块物理CPU上能处理数据的芯片组数量。也就是说一个物理CPU上可能会有多个核心,日常中说的双核,四核就是指的CPU核心。可通过如下命令来查看CPU核心数:

cat /proc/cpuinfo | grep 'core id' | sort | uniq | wc -l

超线程

一个CPU核就是一个物理线程,由英特尔开发的超线程技术可以把一个实体CPU核心模拟出两个线程来使用,在 CPU 层面通过共用原件来做到一个物理核执行两个逻辑核的任务,使得单个核心用起来像两个核一样。

并不是所有的CPU都运用了超线程技术,而且超线程并不是真的能让一个核心当2个用。超线程是因为现有的应用缺陷而产生的技术,因为各种原因现在在实际应用中并不可以完全充分利用CPU的处理单元。超线程可以让那一部分并没有被利用的资源利用起来,以充分发挥CPU的能力。

逻辑核心

总的逻辑CPU数对应总的CPU核数,但借助超线程技术,一个核用起来像两个核,这时逻辑CPU数就是核心数的两倍了。可通过如下命令来查看逻辑CPU数:

cat /proc/cpuinfo | grep 'processor' | sort | uniq | wc -l

另外用top命令,然后输入1也是可以的。

Rings

操作系统提供不同的资源访问级别。内层Ring可以随便使用外层Ring的资源,而外层Ring经授权才能访问内层Ring的资源。

Ring 0(内核态)拥有最高特权,并且可以和最多的硬件直接交互(比如CPU,内存)。

Ring 2 用于某些需要特权的代码(例如需要I/O权限的用户程序)。

Ring 3 用于非特权代码(几乎所有的用户程序都在这一级别)。库函数,如open()、write()、read()等也在这一层,Shell 也在这一层。

比如,打印机的打印任务在 Ring 3 层触发,通过系统调用的方式(systemcall)调用 Ring 2 层提供的接口,Ring 2 层向打印机发送打印指令。

Last updated

Was this helpful?