cpu和内存

CPU ( Central Processing Unit )是一块超大规模的集成电路板,是计算机的核心部件,承载着计算机的主要运算和控制功能,是计算机指令的最终解释模块和执行模块。硬件包括基板、核心、针脚,基板用来固定核心和针脚,针脚通过基板上的基座连接电路信号, CPU 核心的工艺极度精密,达到 10 纳米级别。连接电路信号, CPU 核心的工艺极度精密,达到 10 纳米级别。
和其他硬件设备相比,在实际代码的运行环境中, CPU 与内存是密切相关的两个硬件设备。开发工程师在实际编程中,对这两个部件有一定的掌控性,熟悉 CPU 和内存的脾气,让它们以自己期望的方式执行相关指令。在 CPU 的世界里,没有缤纷多彩的图像、悦耳动昕的音乐,只有日复一日地对 电流信号的处理。但 CPU 内部的处理机制是十分精密而复杂的,总的来说,就是由控制器和运算器组成的,内部寄存器使这两者协同更加高效。 CPU 的内部结构如图所示。

cpu和内存_第1张图片


控制器
控制器由图中所示的控制单元、指令译码器、指令寄存器组成。其中控制单元是 CPU 的大脑,由时序控制和指令控制等组成;指令译码器是在控制单元的协调下完成指令读取、分析并交由运算器执行等操作 指令寄存器是存储指令集,当前流行的指令集包括 X86,SSE,MMX 等。控制器有点像一个编程语言的编译器,输入0与1的源码流,通过译码和控制单元对存储设备的数据进行读取,运算完成后,保存回寄存器,甚至是内存。

运算器
运算器的核心是算术逻辑运算单元,即 ALU ,能够执行算术运算或逻辑运算等各种命令,运算单元会从寄存器中提取或存储数据。相对控制单元来说,运算器是受控的执行部件。任何编程语言诸如a+b的算术运算,无论字节码指令,还是汇编指令,最后一定会以0和1的组合流方式在部件中完成最终运算,并保存到寄存器中,最后送出CPU。平时理解的堆和栈,在CPU眼里都是内存。

寄存器
最著名的寄存器是 CPU 的高速缓存 LI L2 ,缓存容 是在组装计算机时必问的
两个 CPU 性能问题之 。缓存结构和大小对 CPU 的运行速度影响非常大,毕竟 CPU的运行速度远大于内存的读写速度,更远大于硬盘。基于执行指令和热点数据的时间局部性和空间局部性, CPU 缓存部分指令和数据,以提升性能。但由于 CPU 内部空间狭小且结构复杂,高速缓存远小于内存空间。
CPU 是一个高内聚的模块化组件,它对外部其他硬件设备的时序协调、指令控制、存取动作,都需要通过操作系统进行统 管理和协调。所谓的 CPU 时间片切分,并CPU 内部能够控制与管理 CPU 部件是一个任劳任怨的好公民代表,只要有指令就会马不停蹄地执行,高级语言提供的多线程技术和并发更多地依赖于操作系统的调配,并行更多依赖于 CPU 多核技术。多核 CPU 即在同 块基板上封装了多个 Core还有一种提升 CPU 性能的方式是超线程,即在一个 Core 上执行多个线程,如下图所示为 Core ,但是有4个逻辑 CPU ,并有对应独立的性能监控数据。

cpu和内存_第2张图片

CPU 与内存的执行速度存在巨大的鸿沟,如上图所示的 L2L3 分别是256KB,4MB ,它们是 CPU 和内存之间的缓冲区,但并非所有的处理器都有 L3 缓存。
曾几何时,内存就是系统资源的代名词,它是其他硬件设备与 CPU 沟通的桥梁,计算机中的所有程序都在内存中运行,它的容量与性能如果存在瓶颈,即使 CPU 再快,也是枉然。内存物理结构由内存芯片、电路板、控制芯片、相关支持模块等组成,内存芯片结构比较简单,核心是存储单元,支持模块是地址译码器和读写控制器 如下图所示。

cpu和内存_第3张图片

从上图中可以看出 越往 CPU 核心靠近 存储越贵 速度越快。越往下,存储越便宣、速度越慢,当然容量也会更大。云端存储使得应用程序无须关心是分布式还是集中式,数据如何备份和容灾。在本地喝盘与 CPU 内部的缓存之间,内存是一个非常关键的角色,但它很敏感,内存颗粒如果有问题无法存储,或控制模块出现地址解析问题,或内存空间被占满,都会导致无法正常地执行其他应用程序,甚至是操作系统程序。程序员们最害怕的 OOM通常来源于由于不恰当的编码方式而导致内存的资源耗尽 ,虽然现代内存的窑量已经今非昔比 但仍然是可以在秒级内耗尽所有内存资源的。
上图中的存储单元都有一个十六进制的编号 32 位机器上是 0x 始的数字编号, 是内存存储单元的地址,相当于门牌号。以C和C++为代表的编程语言可以直接操作内存地址,进行分配和释放。举个例子,要写一份数据到存储单元中就像快递一个包裹 需要到付并且当面签收,到了对应的住址,发现收件人不在抛出异常。如下图所示的经典错误 估计很多人都遇到过,选择要调试程序,单击
按钮,并无反应,也不会出现调试界面。内存的抽象就是线性空间内的字节数组,通过下标访问某个特定位置的数据,比如C语言使用 malloc()进行内存的分配 然后使用指针进行内存的读与写。

cpu和内存_第4张图片

而以 Java 为代表的编程语言,内存就交给 JVM 进行自动分配与释放,这个过程称为垃圾回收机制。这就好像刚才的快递员并不直接访问内存单元,只是把包裹放在叫JVM的老大爷家里。付出的代价是到货速度慢了,影响客户体验。毕竟老大爷并不是实时立马转交的,而是要攒到一定的包裹量再接家接户地给收件人送过去。虽然垃圾回收机制能为程序员减负,但如果不加节制的话,同样会耗尽内存资源。

你可能感兴趣的:(基础,c++)