对于想了解笔记本CPU莫名锁频率0.39GHz?教你解决这个Bug的读者,本文将提供新的信息,我们将详细介绍笔记本cpu频率被锁,并且为您提供关于.NET/C#如何获取当前进程的CPU和内存占用?如何
对于想了解笔记本 CPU 莫名锁频率 0.39GHz?教你解决这个 Bug的读者,本文将提供新的信息,我们将详细介绍笔记本cpu频率被锁,并且为您提供关于.NET/C# 如何获取当前进程的 CPU 和内存占用?如何获取全局 CPU 和内存占用?、32 位 CPU 和 64 位 CPU 区别、CPU Rings, Privilege, and Protection.CPU 的运行环,特权级与保护、CPU | 物理 CPU vs 逻辑 CPU vs 核心 vs 线程 vs Socket的有价值信息。
本文目录一览:- 笔记本 CPU 莫名锁频率 0.39GHz?教你解决这个 Bug(笔记本cpu频率被锁)
- .NET/C# 如何获取当前进程的 CPU 和内存占用?如何获取全局 CPU 和内存占用?
- 32 位 CPU 和 64 位 CPU 区别
- CPU Rings, Privilege, and Protection.CPU 的运行环,特权级与保护
- CPU | 物理 CPU vs 逻辑 CPU vs 核心 vs 线程 vs Socket
笔记本 CPU 莫名锁频率 0.39GHz?教你解决这个 Bug(笔记本cpu频率被锁)
夏天来了,一些奇奇怪怪的软硬件问题又开始出现了。近日,有朋友向笔者反馈,说笔记本从休眠模式恢复后,cpu 频率被锁定在 0.39GHz,无论插电与否都停留在这个频率,导致系统卡顿无比!这到底要如何解决?其实和 Windows 的电源策略有关。
当检测到电池电量不足的时候,Windows 系统会强制关机。但于此同时,Windows 还会抢先在关机前,将当前的内存数据写入硬盘,以方便下次开机的时候恢复,无需丢失工作进度。实则上,系统进入的是休眠状态,而不是完全的关机。
而在将数据写入硬盘时,为了防止突然掉电导致写入失败,此时系统可能会将 cpu 频率控制在比较低的频率,减少能耗,保证完成数据写入的过程。
另外,在笔记本发热过大的时候,也可能会触发 cpu 强制降频,将 cpu 频率锁定到较低频率,这个频率比较常见的是 0.39GHz 或者 0.78GHz。触发 cpu 降频后,系统也可能会强制休眠,将内存数据写入到硬盘后进入休眠状态。
Win10 和 Win11 都有类似的机制。然而问题就来了,这个 cpu 降频后进入休眠状态的机制可能存在 Bug,当电脑从休眠恢复过来的时候,cpu 频率可能不会恢复,依然保持在 0.39GHz 之类的低频!这就导致了文章开头所说 cpu 频率被锁定在 0.39GHz 的情况,整个系统都缓慢卡顿,无法正常使用。这种情况,连重启电脑可能也无法解决,因为重启属于热启动,不会检测硬件并重新加载数据,如果 Win10 和 Win11 保存了一些关机前的状态数据,很有可能连 cpu 的锁频状态也会在重启后继续维持。
要如何解决这个问题?这里提供两种可供尝试的解决方法。
长按电源键强制关机再启动
系统恢复时带上了休眠前的状态数据,这可能是 cpu 锁频的诱因。如果出现了锁频,我们可以通过长按电源键强制关机来尝试解决。
长按电源键强制关机,电脑将不会保存关机前的任何数据,也会清理掉一些和系统状态相关的设置。当再次开机的时候,电脑属于冷启动,cpu 锁频设置被清空,频率也就恢复正常了。
使用 ThrottleStop 关闭过热保护
ThrottleStop:点此下载
如果不想重启电脑,那么可以用 ThrottleStop 这款小工具尝试解决。ThrottleStop 是由著名硬件评测网站 TechPowerUp 开发的一款小工具,面向 DIY 玩家,用以监视 cpu 以及设置一些和 cpu 相关的选项。在 ThrottleStop 当中,可以找到 BD PROCHOT 这一项,取消勾选,去除 cpu 的过热保护,保存后 cpu 频率可能就恢复正常了。
总的来说,这是一个系统进入休眠状态或者过热保护时、cpu 降频所引发的 Bug。如果大家遇到了类似情况,不妨尝试一下本文的方法吧,也希望微软可以尽快修复这个问题!
.NET/C# 如何获取当前进程的 CPU 和内存占用?如何获取全局 CPU 和内存占用?
原文: .NET/C# 如何获取当前进程的 CPU 和内存占用?如何获取全局 CPU 和内存占用?
都知道可以在任务管理器中查看进程的 CPU 和内存占用,那么如何通过 .NET 编写代码的方式来获取到 CPU 和内存占用呢?
.NET 中提供了 PerformanceCounter
类型,可以用来监视系统中大量的性能问题。
本文内容
- 获取全局 CPU 和内存占用
- 获取当前进程的 CPU 和内存占用
获取全局 CPU 和内存占用
要获取到全系统中的 CPU 占用率,获取全系统中内存占用,需要首先分别创建这两者的性能计数器:
// 创建对 CPU 占用百分比的性能计数器。
var cpuCounter = new PerformanceCounter("Processor", "% Processor Time", "_Total");
// 创建内存占用字节数的性能计数器
var ramCounter = new PerformanceCounter("Memory", "Available MBytes");
- 1
- 2
- 3
- 4
接下来,使用 NextValue()
可分别获取到两者的值:
float cpu = CpuCounter.NextValue();
float ram = RamCounter.NextValue();
- 1
- 2
你需要注意的是,我们在创建 PerformanceCounter
时,构造函数中传入的参数是固定的,或者说必须跟当前系统中安装的计数器的计数器类别的名称(categoryName
,第一个参数)和计数器的名称(counterName
,第二个参数)对应。另外,如果某个类别包含单个实例,那么需要传入实例名称(instanceName
,第三个参数)。
获取当前进程的 CPU 和内存占用
在了解的 PerformanceCounter
各个参数代表的含义之后,我们还可以获取到单个进程的性能计数。
var name = Process.GetCurrentProcess().ProcessName;
var cpuCounter = new PerformanceCounter("Process", "% Processor Time", name);
var ramCounter = new PerformanceCounter("Process", "Working Set", name);
- 1
- 2
- 3
也是使用 NextValue()
来获取到此性能计数器实例的值。
这里,我们在计算单个进程的内存占用时,使用的是工作集大小,这个值会比较接近我们平时使用任务管理器看到的物理内存占用的大小,但是我们还有其他可以查询的类别:
Private Bytes
包含进程向系统中申请的私有内存大小,不包含跨进程中共享的部分内存。Working Set
进程占用的物理内存的大小。由于包含共享内存部分和其他资源,所以其实并不准;但这个值就是在任务管理器中看到的值。Virtual Bytes
进程在地址空间中已经使用到的所有的地址空间总大小。
参考资料
- PerformanceCounter Class (System.Diagnostics) - Microsoft Docs
- How to get the CPU Usage in C#? - Stack Overflow
- .net - Get CPU Usage for Process by Process ID - Stack Overflow
- c# - What is the correct Performance Counter to get CPU and Memory Usage of a Process? - Stack Overflow
- debugging - What is private bytes, virtual bytes, working set? - Stack Overflow
我的博客会首发于 https://blog.walterlv.com/,而 CSDN 会从其中精选发布,但是一旦发布了就很少更新。
如果在博客看到有任何不懂的内容,欢迎交流。我搭建了 dotnet 职业技术学院 欢迎大家加入。
本作品采用知识共享署名 - 非商业性使用 - 相同方式共享 4.0 国际许可协议进行许可。欢迎转载、使用、重新发布,但务必保留文章署名吕毅(包含链接:https://walterlv.blog.csdn.net/),不得用于商业目的,基于本文修改后的作品务必以相同的许可发布。如有任何疑问,请与我联系。
- 点赞
- 收藏
- 分享
-
- 文章举报
32 位 CPU 和 64 位 CPU 区别
64 位操作系统针对的 64 位的 CPU 设计。操作系统只是硬件和应用软件中间的一个平台。
64 位操作系统针对的 64 位的 CPU 设计。
又比如:“+1” 这个运算,你要先指示 CPU 做 “+”,完成后再输入 “1” 数据给 CPU。
8 位的 CPU 优点是设计简单,处理速度比较快。
缺点就是:软件设计复杂,繁琐。不利于计算机的发展。
缺点:硬件设计更加复杂,计算速度下降。
很显然 32 位 CPU 只有 4G 左右的内存寻址空间,对于一些服务器来讲 4G 的内存的远远不够的了。我们需要更加大的内存寻址空间的话就需要对 CPU 进升级。64 位 CPU 就这样诞生了。64 位 CPU 的内存寻址空间是 2 的 64 次方(理论上)。
要是真的全部都是 64 位的了,那么现在市场上的软件将全部被淘汰不能使用了.
CPU Rings, Privilege, and Protection.CPU 的运行环,特权级与保护
原文标题:CPU Rings, Privilege, and Protection
原文地址:http://duartes.org/gustavo/blog/
[注:本人水平有限,只好挑一些国外高手的精彩文章翻译一下。一来自己复习,二来与大家分享。]
可能你凭借直觉就知道应用程序的功能受到了 Intel x86 计算机的某种限制,有些特定的任务只有操作系统的代码才可以完成,但是你知道这到底是怎么一回事吗?在这篇文章里,我们会接触到 x86 的特权级(privilege level),看看操作系统和 CPU 是怎么一起合谋来限制用户模式的应用程序的。特权级总共有 4 个,编号从 0(最高特权)到 3(最低特权)。有 3 种主要的资源受到保护:内存,I/O 端口以及执行特殊机器指令的能力。在任一时刻,x86 CPU 都是在一个特定的特权级下运行的,从而决定了代码可以做什么,不可以做什么。这些特权级经常被描述为保护环(protection ring),最内的环对应于最高特权。即使是最新的 x86 内核也只用到其中的 2 个特权级:0 和 3。
x86 的保护环
在诸多机器指令中,只有大约 15 条指令被 CPU 限制只能在 ring 0 执行(其余那么多指令的操作数都受到一定的限制)。这些指令如果被用户模式的程序所使用,就会颠覆保护机制或引起混乱,所以它们被保留给内核使用。如果企图在 ring 0 以外运行这些指令,就会导致一个一般保护错(general-protection exception),就像一个程序使用了非法的内存地址一样。类似的,对内存和 I/O 端口的访问也受特权级的限制。但是,在我们分析保护机制之前,先让我们看看 CPU 是怎么记录当前特权级的吧,这与前篇文章中提到的段选择符(segment selector)有关。如下所示:
数据段和代码段的段选择符
数据段选择符的整个内容可由程序直接加载到各个段寄存器当中,比如 ss(堆栈段寄存器)和 ds(数据段寄存器)。这些内容里包含了请求特权级(Requested Privilege Level,简称 RPL)字段,其含义过会儿再说。然而,代码段寄存器(cs)就比较特别了。首先,它的内容不能由装载指令(如 MOV)直接设置,而只能被那些会改变程序执行顺序的指令(如 CALL)间接的设置。而且,不像那个可以被代码设置的 RPL 字段,cs 拥有一个由 CPU 自己维护的当前特权级字段(Current Privilege Level,简称 CPL),这点对我们来说非常重要。这个代码段寄存器中的 2 位宽的 CPL 字段的值总是等于 CPU 的当前特权级。Intel 的文档并未明确指出此事实,而且有时在线文档也对此含糊其辞,但这的确是个硬性规定。在任何时候,不管 CPU 内部正在发生什么,只要看一眼 cs 中的 CPL,你就可以知道此刻的特权级了。
记住,CPU 特权级并不会对操作系统的用户造成什么影响,不管你是根用户,管理员,访客还是一般用户。所有的用户代码都在 ring 3 上执行,所有的内核代码都在 ring 0 上执行,跟是以哪个 OS 用户的身份执行无关。有时一些内核任务可以被放到用户模式中执行,比如 Windows Vista 上的用户模式驱动程序,但是它们只是替内核执行任务的特殊进程而已,而且往往可以被直接删除而不会引起严重后果。
由于限制了对内存和 I/O 端口的访问,用户模式代码在不调用系统内核的情况下,几乎不能与外部世界交互。它不能打开文件,发送网络数据包,向屏幕打印信息或分配内存。用户模式进程的执行被严格限制在一个由 ring 0 之 神所设定的沙盘之中。这就是为什么从设计上就决定了:一个进程所泄漏的内存会在进程结束后被统统回收,之前打开的文件也会被自动关闭。所有的控制着内存或 打开的文件等的数据结构全都不能被用户代码直接使用;一旦进程结束了,这个沙盘就会被内核拆毁。这就是为什么我们的服务器只要硬件和内核不出毛病,就可以 连续正常运行 600 天,甚至一直运行下去。这也解释了为什么 Windows 95/98 那么容易死机:这并非因为微软差劲,而是因为系统中的一些重要数据结构,出于兼容的目的被设计成可以由用户直接访问了。这在当时可能是一个很好的折中,当然代价也很大。
CPU 会在两个关键点上保护内存:当一个段选择符被加载时,以及,当通过线形地址访问一个内存页时。因此,保护也反映在内存地址转换的过程之中,既包括分段又包括分页。当一个数据段选择符被加载时,就会发生下述的检测过程:
x86 的分段保护
因为越高的数值代表越低的特权,上图中的 MAX () 用于挑出 CPL 和 RPL 中特权最低的一个,并与描述符特权级(descriptor privilege level,简称 DPL)比较。如果 DPL 的值大于等于它,那么这个访问就获得许可了。RPL 背后的设计思想是:允许内核代码加载特权较低的段。比如,你可以使用 RPL=3 的段描述符来确保给定的操作所使用的段可以在用户模式中访问。但堆栈段寄存器是个例外,它要求 CPL,RPL 和 DPL 这 3 个值必须完全一致,才可以被加载。
事实上,段保护功能几乎没什么用,因为现代的内核使用扁平的地址空间。在那里,用户模式的段可以访问整个线形地址空间。真正有用的内存保护发生在分页单元中,即从线形地址转化为物理地址的时候。一个内存页就是由一个页表项(page table entry)所描述的字节块。页表项包含两个与保护有关的字段:一个超级用户标志(supervisor flag),一个读写标志(read/write flag)。超级用户标志是内核所使用的重要的 x86 内存保护机制。当它开启时,内存页就不能被 ring 3 访问了。尽管读写标志对于实施特权控制并不像前者那么重要,但它依然十分有用。当一个进程被加载后,那些存储了二进制镜像(即代码)的内存页就被标记为只读了,从而可以捕获一些指针错误,比如程序企图通过此指针来写这些内存页。这个标志还被用于在调用 fork 创建 Unix 子进程时,实现写时拷贝功能(copy on write)。
最后,我们需要一种方式来让 CPU 切换它的特权级。如果 ring 3 的程序可以随意的将控制转移到(即跳转到)内核的任意位置,那么一个错误的跳转就会轻易的把操作系统毁掉了。但控制的转移是必须的。这项工作是通过门描述符(gate descriptor)和 sysenter 指令来完成的。一个门描述符就是一个系统类型的段描述符,分为了 4 个子类型:调用门描述符(call-gate descriptor),中断门描述符(interrupt-gate descriptor),陷阱门描述符(trap-gate descriptor)和任务门描述符(task-gate descriptor)。调用门提供了一个可以用于通常的 CALL 和 JMP 指令的内核入口点,但是由于调用门用得不多,我就忽略不提了。任务门也不怎么热门(在 Linux 上,它们只在处理内核或硬件问题引起的双重故障时才被用到)。
剩下两个有趣的:中断门和陷阱门,它们用来处理硬件中断(如键盘,计时器,磁盘)和异常(如缺页异常,0 除数异常)。我将不再区分中断和异常,在文中统一用 "中断" 一词表示。这些门描述符被存储在中断描述符表(Interrupt Descriptor Table,简称 IDT)当中。每一个中断都被赋予一个从 0 到 255 的编号,叫做中断向量。处理器把中断向量作为 IDT 表项的索引,用来指出当中断发生时使用哪一个门描述符来处理中断。中断门和陷阱门几乎是一样的。下图给出了它们的格式。以及当中断发生时实施特权检查的过程。我在其中填入了一些 Linux 内核的典型数值,以便让事情更加清晰具体。
伴随特权检查的中断描述符
门中的 DPL 和段选择符一起控制着访问,同时,段选择符结合偏移量(Offset)指出了中断处理代码的入口点。内核一般在门描述符中填入内核代码段的段选择符。一个中断永远不会将控制从高特权环转向低特权环。特权级必须要么保持不变(当内核自己被中断的时候),或被提升(当用户模式的代码被中断的时候)。无论哪一种情况,作为结果的 CPL 必须等于目的代码段的 DPL。如果 CPL 发生了改变,一个堆栈切换操作就会发生。如果中断是被程序中的指令所触发的(比如 INT n),还会增加一个额外的检查:门的 DPL 必须具有与 CPL 相同或更低的特权。这就防止了用户代码随意触发中断。如果这些检查失败,正如你所猜测的,会产生一个一般保护错(general-protection exception)。所有的 Linux 中断处理器都以 ring 0 特权退出。
在初始化阶段,Linux 内核首先在 setup_idt () 中建立 IDT,并忽略全部中断。之后它使用 include/asm-x86/desc.h 的函数来填充普通的 IDT 表项(参见 arch/x86/kernel/traps_32.c)。在 Linux 代码中,名字中包含 "system" 字样的门描述符是可以从用户模式中访问的,而且其设置函数使用 DPL 3。"system gate" 是 Intel 的陷阱门,也可以从用户模式访问。除此之外,术语名词都与本文对得上号。然而,硬件中断门并不是在这里设置的,而是由适当的驱动程序来完成。
有三个门可以被用户模式访问:中断向量 3 和 4 分别用于调试和检查数值运算溢出。剩下的是一个系统门,被设置为 SYSCALL_VECTOR。对于 x86 体系结构,它等于 0x80。它曾被作为一种机制,用于将进程的控制转移到内核,进行一个系统调用(system call),然后再跳转回来。在那个时代,我需要去申请 "INT 0x80" 这个没用的牌照 J。从奔腾 Pro 开始,引入了 sysenter 指令,从此可以用这种更快捷的方式来启动系统调用了。它依赖于 CPU 上的特殊目的寄存器,这些寄存器存储着代码段、入口点及内核系统调用处理器所需的其他零散信息。在 sysenter 执行后,CPU 不再进行特权检查,而是直接进入 CPL 0,并将新值加载到与代码和堆栈有关的寄存器当中(cs,eip,ss 和 esp)。只有 ring 0 的代码 enable_sep_cpu () 可以加载 sysenter 设置寄存器。
最后,当需要跳转回 ring 3 时,内核发出一个 iret 或 sysexit 指令,分别用于从中断和系统调用中返回,从而离开 ring 0 并恢复 CPL=3 的用户代码的执行。噢!Vim 提示我已经接近 1,900 字了,所以 I/O 端口的保护只能下次再谈了。这样我们就结束了 x86 的运行环与保护之旅。感谢您的耐心阅读。
参考:
http://blog.csdn.net/drshenlei/article/details/4265101
CPU | 物理 CPU vs 逻辑 CPU vs 核心 vs 线程 vs Socket
<html> <head></head> <body> <div> <div> <p > 当我们试着通过 Linux 命令 nproc 和 lscpu 了解一台计算机 CPU 级的架构和性能时,我们总会发现无法正确地理解相应的结果,因为我们会被好几个术语搞混淆:物理 CPU、逻辑 CPU、虚拟 CPU、核心、线程和 Socket 等等。如果我们又增加了超线程(不同于多线程),我们就会开始不知道计算机里面到底有多少核心,我们搞不明白为什么像 htop 这样的命令会在我们认为买的是一台单核计算机上返回拥有 8 个 CPU 的结果。这样的情况一片混乱。</p> <p><br /></p> <div> <img src="http://p1.pstatp.com/large/pgc-image/58f9425657f94522a8011e3deb7c0e7e" img_width="914" img_height="545" alt="物理 CPU vs 逻辑 CPU vs 核心 vs 线程 vs Socket" inline="0" /> <p></p> </div> <p><br /></p> <h1><strong > 起源:单核 CPU 和超线程 </strong></h1> <p > 在诸如多核、虚拟 CPU 和逻辑 CPU 这样的概念诞生前,在奔腾系列处理器的年代,大部分计算机在它们的主板上装备了一块不大不小的芯片,我们把它叫做微处理器、处理器或直接叫 CPU。只有很少数需要更强处理能力的企业能够负担得起同一块主板上安装 2 块以上的处理器的费用:这些就是多处理器系统。这些处理器与主板上其它元件的通信通过一个连接器或 Socket 来完成。那我们很容易能计算得到一块主板上有多少连接器或 Socket,那么这块主板上最多就能有相同数量的 CPU。如果你需要更多的计算能力,你只需要寻找一块能够支持更多处理器的主板即可。</p> <p > 但是后来 Intel 意识到多处理器系统里,处理器之间通过系统总线进行通信是非常低效的,因为总线传输速度较慢。这样就会经常发生的性能瓶颈,无法最大化利用 CPU 的计算能力。</p> <p><br /></p> <div> <img src="http://p3.pstatp.com/large/pgc-image/815647be4c1e4d4c806535bba7aef56c" img_width="713" img_height="517" alt="物理 CPU vs 逻辑 CPU vs 核心 vs 线程 vs Socket" inline="0" /> <p></p> </div> <p><br /></p> <p > 为了改善这个处境于是诞生了超线程技术。超线程的大意是复制一些 CPU 单元到同一块芯片上,比如寄存器或者一级缓存,这样可以在两个执行线程里共享这些数据,而无需经由系统总线和避免因为访问速度导致的性能下降问题。超线程还带来另外一个好处是可以当一个进程在等待中断的时候,另一进程仍然可以使用同一个 CPU 进行执行而且无需停止。</p> <p > 这种方式可以加速多个被处理的进程,比传统的单个核心(未开启超线程)提供更高的整体性能。操作系统有点像被欺骗的意思,因为它被提供了两个虚拟 CPU 或者逻辑 CPU 并且可以 “同时” 执行两个进程。但是要非常注意的是,它并不能带来两倍的处理能力,也不提供完全并行计算能力。</p> <p > 这样, 从 Linux 或者其他操作系统的视角来看,一个单核 CPU 计算机通过超线程技术呈现出双核 CPU 的效果,但两个逻辑 CPU 实际上在同一个物理 CPU 中执行。</p> <h1><strong > 又一点复杂:多核架构的出现 </strong></h1> <p > 正如我在前面部分所说的,尽管开启了超线程的 CPU 能够提供更强的计算能力,但并不能提供 2 倍的处理能力和 2 个独立的 CPU,所以我打算进一步缩小 CPU 元件的视角,并且把它们都安装到统一块芯片上。如此一来每个被压缩的处理器都叫做核心,并且允许使用同一块硅晶的内部共享总线进行更快的通信。从那一刻开始再也不需要较慢的系统总线了。</p> <p><br /></p> <div> <img src="http://p1.pstatp.com/large/pgc-image/182645578ed44ed4b3c28d9de160b829" img_width="655" img_height="433" alt="物理 CPU vs 逻辑 CPU vs 核心 vs 线程 vs Socket" inline="0" /> <p></p> </div> <p><br /></p> <p > 不同于超线程技术,我们现在拥有多个完全独立的 CPU 服务于任何任务,每个任务可以分配一个核心。确实,从性能的角度来看,拥有单个多核芯片要比同一个主板上拥有多个单核芯片提供更好的性能。当然,拥有一个双数核心要比单数核心更好。</p> <p > 在操作系统层,一个物理的四核处理器可以看做是四个 CPU。但这些可能是四个逻辑 CPU 或者非物理的 LCPU。如果处理器还提供了超线程支持,那么像 htop 和 nproc 的命令会看到系统里有八个 CPU,但是可能在一个八核 CPU 上看到少于八核的结果。</p> <h1><strong>1LCPU = 1 线程 </strong></h1> <p > 最后我们通常发现支持四线程的处理器,每个核心两个线程这样,这仅仅表示同时可以执行任务的线程,并且与一个 LCPU 能够提供的处理能力等价。如果一个处理器每个核心能够支持两个线程说明它启用了超线程,否则正常来说线程数与核心数一致。</p> <p><br /></p> <div> <img src="http://p3.pstatp.com/large/pgc-image/43bab08ac6a64cd5ab70ac36fdc6ca58" img_width="556" img_height="508" alt="物理 CPU vs 逻辑 CPU vs 核心 vs 线程 vs Socket" inline="0" /> <p></p> </div> <p><br /></p> <p><strong > 逻辑 CPU vs 虚拟 CPU</strong></p> <p > 虚拟 CPU 这个术语通常会被与逻辑 CPU 进行比较,但是有一点细微的差别:虚拟 CPU 更加被局限在计算虚拟化的领域里,它表示那些与从底层硬件(可以是物理 CPU 也可以是逻辑 CPU、开启超线程与否)映射到虚拟机的处理器。一般情况下,宿主机上一个逻辑 CPU 映射到虚拟机里的一个虚拟 CPU,所以它们可以看做是相同含义的术语。</p> </div> </div> </body> </html>
关于笔记本 CPU 莫名锁频率 0.39GHz?教你解决这个 Bug和笔记本cpu频率被锁的问题就给大家分享到这里,感谢你花时间阅读本站内容,更多关于.NET/C# 如何获取当前进程的 CPU 和内存占用?如何获取全局 CPU 和内存占用?、32 位 CPU 和 64 位 CPU 区别、CPU Rings, Privilege, and Protection.CPU 的运行环,特权级与保护、CPU | 物理 CPU vs 逻辑 CPU vs 核心 vs 线程 vs Socket等相关知识的信息别忘了在本站进行查找喔。
本文标签: