【操作系统】计算机大脑CPU

1.CPU组成机构和存储器层级

(1)CPU是计算机硬件系统的核心部件-大脑

  • 结构:运算器+控制器(两个部件里面有寄存器组)
  • 通过CPU内部的总线进行通信

(2)单核CPU架构

  • 控制器Control Unit简称【CU】
    • 计算机的指挥系统,用来控制计算机其他组件的运行。
  • 运算器 Arithmetic/Logic Unit 简称【ALU】
    • 运算功能,用来完成各种二进制编码做算数运算和逻辑运算,包括加减乘、与或非运算,控制器+运算器=CPU
    • 运算器和控制器两大部件大多数集成在同一芯片,统称为中央处理器(Central Processing Unit ,CPU)
  • 寄存器组 Register
    • 用暂存指令或数据、存储即将执行的指令等多个不同类型的寄存器

在这里插入图片描述

(3)多核CPU架构

  • 每个核心是可以运行指令的独立单元,包含了ALU/CU和寄存器
  • 每个核心配备L1 Cache和L2 Cache,多个核心共享L3 Cache

在这里插入图片描述

  • 现在的服务器可以支持多个处理器(CPU),2个CPU,4个CPU等
  • 假如4个CPU每块CPU内有8个核心,系统可对外提供32核计算能力
  • 总核数=物理CPU个数 X 每颗物理CPU的核数
  • 总逻辑CPU数 = 物理CPU个数 X 每颗物理CPU的核数 X 超线程数

(4)储存器的层级架构

  • L0 寄存器

    • 离CPU最近 ,材料贵费用高,存储大小几字节,速度最快
  • L1-Cache

    • 在 CPU 中,离CPU有一定距离,存储空间几十到几百KB
  • L2-Cache

    • 在 CPU 中,离CPU的距离比如L1更远点,存储空间几MB到几十MB
  • L3-Cahce

    • 在 CPU 中,离CPU的距离比如L2更远点,存储空间几MB到几十MB
  • 内存

    • 位于主板上,由半导体硅制作,通过总线和 CPU 连接,几G到几百G不等,成本比上面更低
  • 硬盘/SSD

    • 硬盘分机械硬盘和固态硬盘SSD,几百G到几十T不等,成本比上面更低

在这里插入图片描述

2.服务器CPU架构(X86、ARM)

(1)什么是指令

  • 中央处理器CPU,执行用户和操作系统下发的指令
  • 指令是以0 1二进制形式组织的机器码,在硬件物理底层-01用来控制高低电位
  • 一个加法运算,在X86处理器上的的二进制代码【01001000 00000001 11000011】被称为机器码

(2)什么是指令集

  • 指令集规定了一种CPU架构实现哪些【指令的集合】

(3)CPU架构指令集分类

  • 精简指令集(Reduced Instruction Set Computing,RISC)
    • 每个指令的运行时间短,完成的动作简单,但做复杂的多用需要多个指令来完成,一般小于200条指令
    • ARM架构的CPU:ARM公司做设计 给其他厂商生产CPU,如 高通、三星、苹果、华为海思、联发科,市面手机/小型设备等是采用这个架构,耗电少/电压低,面向移动领域
  • 复杂指令集(Complex Instruction Set Computer,CISC)
    • 指令数目多且支持的动作复杂,指令的长度不相同,执行消耗时也比较长,一般大于200条指令
    • X86架构的CPU:厂商有AMD、Intel公司等,在家用、商用领域,功耗大,在性能和兼容性方面做的更好

(4)CPU 32位和64位是什么意思

  • 表示一次可以处理多少位二进制,8位的CPU一次只能处理一个字节
  • 32位的CPU一次就能处理4个字节,64位的CPU一次可以处理8个字节
  • 所以64位的CPU在处理速度上比32位的CPU理论上快了一倍

(5)安装软件的时候 经常看到对应的适合操作系统有 X86、X64

  • X86是指Intel 的开发的一种32位指令集, 是一种cisc复杂指令集,所有Intel/AMD早期的CPU都支持这种指令集,32位操作系统则可以安装在32位(32位CPU)或64位(64位CPU)电脑上,但是浪费性能空间。
  • X64是x86架构的兼容64位的CPU叫X64,后来intel公司也迈向64位时取的名称叫X86_64,intel和amd的X86架构CPU指令集上有很大差别但相互兼容,所以软件可以直接用,X64支持64位的系统,64位操作系统只能安装在64位处理器的电脑上(CPU必须是64位的)。

(6)关于ARM和X86选择问题

  • ARM:

    • 近年来Arm64架构突起,先进制作工艺技术,大幅度降低单核功耗以及更高的CPU核心数

    • Arm64架构芯片用于低功耗和高性能,大幅度提升性价比

    • 比如华为鲲鹏920高性能芯片,苹果电脑M1芯片性能强劲,国产化不断将 Arm64 推向军队、政府、国企的供应商

  • X86:

    • X86更偏向于高性能的台机,比如服务器,适合绝大部分用户的上云场景,不如做游戏块,用X86架构
    • 是一般用户选择阿里云服务器的主要架构,都是基于x86计算架构来选择的

3.常见CPU信息和超线程

(1)什么是CPU的超线程

  • 超线程的英文是HT技术,全名为Hyper-Threading,中文名又名超线程。
  • 把一颗CPU当作两颗来用,将一颗具有超线程功能的物理CPU变成两颗逻辑CPU。
  • 每颗CPU可以有多个线程,常规数量是两个,如1核2线程,2核4线程,4核8线程。

(2)超线程的好处

  • 多个物理CPU,各个CPU通过总线进行通信,效率比较低。
  • 利用超线程技术模拟出两个逻辑内核共享同一个CPU资源,效率更高。
  • 同一时刻可以有两个线程都占用CPU资源,两个线程都可以得到执行,实现同一时间执行两个线程的并行操作。
  • 允许两个线程同时不冲突的使用CPU中的资源,通过超线程的技术来达到提高性能。

注意:CPU 的多线程和程序的多线程是不同的,CPU 的多线程是硬件多线程,程序的多线程是软件多线程,硬件的多线程是可以被当作一个 CPU 核心来调度执行任务的 CPU 资源

(3)阿里云ECS服务器 CPU规格说明

  • 开启超线程:如果将每核线程数置为2,则该实例规格有2*2=4个vCPU,默认情况下实例规格开启超线程配置。
  • 关闭超线程:如果关闭超线程配置,则1个物理核只能运行1个线程,实例的vCPU数量等于物理核数,为2

在这里插入图片描述

(4)如何查看CPU的相关信息

CPU的相关信息存储在 文件 /proc/cpuinfo 里面

在这里插入图片描述

  • 查看CPU架构:uname -a

在这里插入图片描述

  • 查看CPU厂家信息:cat /proc/cpuinfo | grep name | cut -f2 -d: | uniq -c

在这里插入图片描述

  • 查看每个CPU的core,即常说的核心数:cat /proc/cpuinfo | grep “cpu cores” | uniq

在这里插入图片描述

  • 查看服务器总的核心数,也就是逻辑CPU个数:cat /proc/cpuinfo | grep “processor” | wc -l
    • 物理cpu个数 * 每个cpu的核心数 * 超线程数

在这里插入图片描述

4.CPU执行指令的内存空间

(1)什么是内核

  • 内核是一组应用程序,这类程序能够控制所有硬件及计算机活动。
  • 内核抽象计算机内部硬件资源,并统一管理对外提供支持,内核操作 = 计算机硬件操作
  • 内核是计算机资源的最大管理者,比如:CPU进程管理、内存管理、文件系统管理、网络接口管理等。

在这里插入图片描述

(2)什么是内核态核用户态

  • 操作系统把进程的运行内存分为两个区域
    • 内核空间(kernel space),只有内核程序访问,也叫进程内核态,可以直接访问内存、磁盘等资源。
    • 用户空间(user space),专门给应用程序使用,也叫进程用户态,只能访问受限的用户资源。
  • 其实就是CPU的两种工作状态:内核态和用户态,权限高和权限低
  • 程序最终编译、解释成一条一条的CPU指令,然后指令都是CPU都在执行

在这里插入图片描述

(3)为什么要分内核态和用户态

  • 目标:提高操作系统的稳定性及可用性,确保和平稳定

  • 在CPU的所有指令中,有些指令是非常危险的,如果错用会导致系统崩溃,比如申请,释放内存,杀进程等。

  • 如果所有的程序都可以使用这些指令,那么系统崩溃的概率将大大增加

  • CPU将指令分为特权指令和非特权指令

    • 常规将CPU特权等级分为4个级别:Ring0~Ring3
    • Linux系统只是用了【Ring0和Ring3】,运行在Ring0级别时称为运行在内核态,CPU可以执行任何指令,运行在Ring3级别时称为运行在用户态,CPU可以执行部分指令。
  • CPU处于什么工作空间,实际上代表的时当前CPU正在执行什么级别的指令

在这里插入图片描述

(4)什么时候会从用户态切换到内核态

  • 用户态的程序需要像操作系统申请更高权限的操作时,就通过【系统调用】向内核发起请求。
  • 系统调用过程中,会发生CPU的上下文切换,CPU寄存器会先保存用户态的状态,然后加载内核态相关内容。
  • 系统调用结束后,CPU寄存器要恢复原来保存的用户态,继续运行进程。
  • 一次调用,发生两次CPU上下文切换

5.CPU的上下文切换

(1)什么是操作系统的【中断】

  • CPU在执行【当前程序】时系统出现了【某种信号】使得CPU必须停止当前程序,去执行【另一个程序】来处理的紧急事务
  • 处理结束后CPU在返回到原先暂停的程序继续执行,这个过程称为【中断】。

(2)中断操作分类

  • 内部中断:指令执行时由CPU主动产生
  • 外部中断:系统外部设备引发的程序中断

(3)Linux是一个多任务的操作系统

  • 支持的任务同时运行数量远远大于CPU的数量。
  • CPU运行程序,每个任务运行之前,CPU需要知道在哪里加载和启动任务。
  • 这些信息存储-依赖CPU寄存器和程序计数器。
  • 寄存器是CPU里面空间小但速度极快的内存,程序计数器存储CPU正在执行的或下一条要执行的指令的位置。

(4)什么是cpu的上下文切换

  • cpu寄存器和程序计数器是cpu在运行任务前依赖的环境,也叫cpu上下文
  • cpu的上下文切换先把前一个任务的cpu上下文保存起来【下次才知道任务从哪里加载+运行】
  • 再加载新任务的上下文到寄存器和程序计数器进行运行任务,每次切换 在【保存和恢复】上下文耗时几十纳秒 或 微秒 ,1μs【微秒】 = 1000ns【纳秒】

(5)cpu的上下文切换的场景

  • 【系统调用切换】
    • 即内核态和用户态的切换,一直是同一个进程在运行,不切换进程
    • 一次系统调用的过程发生两次cpu上下文切换,切换过去,切换回来
  • 【进程上下文切换】
    • 每个cpu都维护了一个就绪队列,存放活跃进程,根据情况进行调度
    • 进程是由内核来管理和调度的,进程的切换只能发生在【内核态】
    • 比如你用【网易云听着歌、玩着英雄联盟】因为现在电脑多CPU多核心配置好,所以感觉不到切换
  • 【线程上下文切换】
    • 进程是资源拥有的基本单位,线程是调度的基本单位,当进程只有一个线程的时候,可以认为进程就等于线程
    • 前后线程同属于一个进程,切换时虚拟内存资源不变
    • 上下文切换时需要保存的是线程私有数据,比如栈和寄存器
    • 同进程内的线程切换,要比多进程间的切换消耗更少的资源,所以开发中用多线程代替多进程的原因
  • 【中断上下文切换】
    • 快速响应硬件,中断处理会打断进程的正常调度和执行,转而调用中断处理程序,响应设备事件
      进程是资源拥有的基本单位,线程是调度的基本单位,当进程只有一个线程的时候,可以认为进程就等于线程
    • 前后线程同属于一个进程,切换时虚拟内存资源不变
    • 上下文切换时需要保存的是线程私有数据,比如栈和寄存器
    • 同进程内的线程切换,要比多进程间的切换消耗更少的资源,所以开发中用多线程代替多进程的原因
  • 【中断上下文切换】
    • 快速响应硬件,中断处理会打断进程的正常调度和执行,转而调用中断处理程序,响应设备事件
    • 打断其他进程时,就需要保存该进程状态,这样在设备事件结束后,就可以从原来的状态恢复

猜你喜欢

转载自blog.csdn.net/weixin_47533244/article/details/128237298