有人曾经这么评价CPU,它是迄今人类历史上科技巅峰的存在,除了需要复杂的技术之外,更需要精良的制作工艺,综合考虑制造顶尖性能的CPU难度堪比造核弹。 这个专题中并不会出现非常抽象的cpu核心概念,而是以一种科普的方式带大家了解计算机是如何工作的,我的主要目的就是希望大家在进行编程时能理解计算机是如何将逻辑代码进行实现的,帮助大家打破计算机的神秘感。
现代的计算机 , 大多遵守 冯诺依曼体系结构,如下图所示:
针对存储空间
硬盘 > 内存 >> CPU
针对数据访问速度
CPU >> 内存 > 硬盘
CPU是电脑中最重要的硬件,操作系统是电脑中最重要的软件。
目前市面是主流的CPU有两种架构X86架构和ARM架构:
CPU32位与64位的区别是什么呢?
比如在C语言代码中
int*p=NULL;
printf("%d",sizeof(p));
cpu是16,32,64位分别会得到不同的结果2,4,8。
CPU的位数和代码中内存地址用几个字节表示密切相关。
CPU的组成:
主要有四部分,计算单元ALU,控制单元CU,存储单元寄存器,时钟。
CPU的内部有很多小的计算单元(ALU运算器),它的数量多少决定了CPU的算力。
门电路=》半加器=》全加器=》加法器=》ALU运算器=》CPU的主要部分。
全加器的组成如下:
其中门电路是由与门,或门,非门,异或门组成的,CPU的构成非常抽象和复杂,上面只是帮助大家了解,并不严谨。
除了计算之外,CPU内部还有负责存储的部门(寄存器),寄存器也是由门电路构成的,它的存储必须在通电情况下才能完成。下图所示是1比特位的存储单元:
CPU的控制单元CU:
CU的主要任务就是依据指令驱动ALU进行具体的计算工作。
所谓指令,即指导 CPU 进行工作的命令,主要有操作码 + 被操作数组成。
其中操作码用来表示要做什么动作,被操作数是本条指令要操作的数据,可能是内存地址,也可能是寄存器编号等。
CPU如何执行指令?
CPU的时钟
电子计算机中的 CPU 并不是 靠自己来驱动这个周期的运转,而是靠背后一个时钟来进行周期驱动的。粗略的讲,CPU的主频就是时钟震荡的每秒次数,可近似看作每秒执行的指令数。
以我的电脑为例,下图基准速率即CPU的主频:
总结: ALU + CU + 寄存器 + 时钟就组成了我们平时经常看到的一个词汇:中央处理器( Center Process Unit )简称 CPU 。
最后再给大家科普一个小技巧,如何观察自己电脑的cpu性能?
CPU的性能好坏主要看两个部分,核心数(上图中逻辑处理器)——多个核心的运算能力;和频率(基准频率)——单个核心的运算能力。
现在的硬件厂家为了提高CPU的性能一般采用两种方法, 一个是把门电路做的足够小,(但是以现在的水平当门电路过小时即达到微粒水平,平时我门所熟知的物理规律便失效了,进入量子力学范畴,目前不可控) 二是把CPU做的足够大(但是这与工艺水平有很大关系,CPU做的越大制作过程中间出现错误的可能性就越高,CPU的废品率就越高,会提高成本)。所以厂家们想出来了 多核心的CPU,即一个CPU板上放多个CPU。这也就导致了并发编程的由来。后来又演化出 超线程技术,即把一个CPU当成两个也就是逻辑处理器,我们俗称大小核。现在的CPU都是多核加超线程技术加持下的产物。
Java语言首先先被Java编译器编译成class文件(字节码文件),进入Java虚拟机中,通过jvm进行装载字节码,校验字节码,解释字节码把class文件语言变成机器语言,最后由操作系统进行执行。
而C语言是先进行编译链接,形成汇编语言,在进行汇编形成机器语言,最后由操作系统调配CPU进行执行。
高级语言的一条语句 (Statement) 往往对应很多条指令 (Instruction) 才能完成。
操作系统是一组做计算机资源管理的软件的统称。目前常见的操作系统有: Windows 系列、 Unix 系列、Linux系列、 OSX 系列、 Android 系列、 iOS 系列、鸿蒙等。操作系统介于硬件和应用程序之间。
操作系统由两个基本功能:
操作系统通过抽象封装来管理各种硬件,并给其他软件提供稳定的运行环境。
操作系统中常见的一些概念及解释:
进程/任务:操作系统提供的一种软件资源,正在运行的程序会被操作系统封装为进程,进程是系统分配资源的基本单位——内存,硬盘。
进程在系统中的管理:1.先描述:先利用类或结构体把进程中的实体属性列出来,即PCB。
2.再组织:通过一定的数据结构(链表)把这些结构、对象串在一起。
看到任务管理器进程时,表示系统内部在遍历链表并打印每个阶段的相关信息。
运行一个新程序,系统多一个进程,即需要构造一个新的PCB并添加到链表上。
若运行中的程序退出,需要把对应进程的PCB从链表中删掉并销毁对应PCB资源。
PCB进程控制板块:操作系统利用类/结构体的方式对进程的抽象表示,即名称为PCB的类/结构体。它非常庞大,有上百个属性。
内存管理:每个进程的内存彼此独立,互不干扰,通常情况下,进程A不能直接访问进程B的内存(系统稳定性)。
进程间通信:进程之间很多时候也需要相互配合完成某项工作,进程间通信和进程的独立性并不冲突,系统提供公共空间(多个进程都能访问到),让两个进程借助这种公共空间来交互数据;通信方式有:管道,共享内存,文件,网络,信号量,信号等。