)
JavaEE——服务器后端开发1.冯诺依曼体系CPU、存储器、输入设备、输出设备。存储器可分为内存硬盘光盘U盘等内存与硬盘的区别内存读写速度快硬盘慢内存存储空间小硬盘大内存成本高硬盘低内存断点后数据丢失硬盘断电后数据存在2.CPU1.主频与睿频主频基准速度CPU工作的频率是变频的所以有一个最大睿频CPU的频率越高运算速度越快2.核心数CPU内部的核心上有海量的“运算单元”运算单元越多CPU算力越强CPU的核心数量越多CPU的算力就越强。超线程利用超线程技术可以让一个核心当2个用所以就有了物理核心和逻辑核心上图CPU有10个物理核心20个逻辑核心大小核win11CPU采取大小核心通过操作系统的调度用大核心做高负载任务提高效率用小核心做低负载任务提高电池续航核心不全是超线程。上图CPU有14个物理核心18个逻辑核心。4个物理核心支持超线程10个物理核心不支持超线程3.缓存cache缓存是什么缓存是存放在CPU芯片内部的告诉小容量存储器用来临时存放CPU最近可能要用到的数据。为什么用缓存避免CPU每次都去慢速的内存读取数据内存的访问速度低于CPU访问速度缓存的特点容量L3L2L1空间越大访问速度越慢缓存的工作流程首先明确一点在计算其中数据通常存储在内存/硬盘中且CPU永远优先去更快的地方读取数据即L1——L2——L3——内存1.L1有目标数据读取结束2.L2有目标数据读取L2中的目标数据同时把数据拷贝一份到L1方便下次访问3.L3有目标数据读取L3中的目标数据同时把数据分别拷贝到L2L1方便下次访问4.内存有目标数据读取内存中的目标数据同时把数据分别拷贝到L3L2L1方便下次访问以上逐级拷贝的过程叫缓存填充逐级拷贝是因为L1空间太小如果访问数据大覆盖次数多反而达不到L1的快速访问。主机拷贝是为了尽可能多的覆盖数据缓存中的数据在空间不够时最不常用的旧数据会被新数据覆盖这个机制叫做缓存替换4.指令——instruction指令是CPU上执行的任务的基本单位指令是CPU工作的最小单位是一串二进制编码。指令的组成操作码操作数操作码告诉CPU做什么操作数告诉CPU对谁做数据在哪CPU的设计者在设计CPU时就设置好了CPU支持哪些指令不同CPU厂商设计的CPU不同编程语言与指令编程语言分为机器语言、汇编语言、高级语言高级语言有C/C/Java/Python...高级语言编译运行的过程C/C.c/.cpp文件被编译器转为汇编语言汇编语言再转为机器语言包含指令Java.java文件转为.class字节码文件然后JVM把字节码转为机器语言指令的存储位置指令保存在内存中比如运行一个.exe文件双击——操作系统把exe加载到内存中假设一个指令为8bit实际更长前4位操作码后4位操作数RAM随机存取存储器——Random Access Memory即内存寄存器在CPU内部是存储数据的硬件设备。寄存器空间很小主要进行临时数据的计算和保存一般有几十个寄存器CPU运行指令的过程假设有以下指令真实的内存中“地址”不需要保存而是通过硬件的电路结构计算出来的内存内的数据可随机访问时间复杂度位O1操作系统会安排好内存中哪个部分存指令哪个部分存数据1.执行第一条指令取指令从内存中读取指令00101110从内存读取到CPU的寄存器中解析指令将指令分为操作码0010操作数1110查询指令表理解操作码含义0010是LOAD_A,通过指令表明确后四位1110是内存地址14.功能是从14地址的内存单元处读取数据放到寄存器A中执行指令14地址处的数据为寄存器A寄存器B2.执行第二条指令取指令从内存中读取指令解析指令将指令分为操作码0001操作数1111查询指令表0001是LOAD_B,通过指令表后四位1111是内存地址15.功能是将15地址内存单元处的数据读取放到寄存器B中执行指令15地址处的数据为寄存器A寄存器B:3.执行第三条指令取指令解析指令1000是ADD0100是两个寄存器的地址01——寄存器B00——寄存器A功能计算两个寄存器中数值之和将结果放到第二个寄存器即寄存器A中执行指令add结果17寄存器A00010001寄存器B000011104.执行第四条指令取指令解析指令0100将寄存器A的值写入指定RAM1101指定的RAM地址执行指令省略5.执行第五条指令取指令直接结束上述整个流程是CPU完成314运算的过程假设每一步消耗一个Hz整体需要消耗12Hz1GHz/s10亿Hz/s所以CPU完成这个过程只需几毫秒。并且在真实情况下CPU是“流水线式”作业即并非等一条指令执行完整个“取指令——解析指令——执行指令”过程而是当第一条指令进入“解析”阶段时取指令的电路空闲下来就可以去取第二条指令。当第一条指令进入执行阶段时解析电路空闲就可以去解析第二条指令同时取指令电路去取第三条指令。3.操作系统作用1.管理各种硬件设备2.给软件提供稳定的运行环境应用程序不能直接操作硬件只能通过API请求操作系统例如在idea里打印“hello world”需要经过一下过程System.out.println“hello world”——JVM调用C版函数——调用操作系统的API——操作系统把字符串给驱动程序——驱动程序控制硬件显示打印\1.进程在操作系统中进程是操作系统资源分配的基本单位计算机上运行起来的应用程序就称为进程现在的计算机通常都是多进程的。进程的运行是需要消耗一定的硬件资源。一个可执行文件可能对应多个进程2.操作系统如何管理进程1.描述操作系统用C语言的结构体把一个进程的所有信息成一个PCB进程控制块保存在内存中2.组织使用特定的数据结构把多个PCB组织起来通常使用链表为什么要组织因为操作系统通常要管理几十个进程需要能快速找到下一个要运行的进程找到某个PID对应的进程把阻塞的进程放在一边3.PCB中的核心属性1.PID——进程的标识符PID是操作系统自动分配的整数。确保同一台设备上、在同一时刻不会存在两个相同的PID。有的应用程序有多个进程2.内存指针内存指针是一组属性。进程运行需要内存一个进程的内存空间里有的部分是“是指令”有的部分是“数据”或其它。内存指针的作用就是告诉操作系统哪些部分是指令哪些是数据3.文件描述符表文件都是在硬盘上保存的让各种进程打开和关闭、读和写文件。一个进程想要读写一个文件需要先打开打开时就会在PCB中构建一个文件相关的结构体放在PCB的文件描述符表中。文件描述符表可以看作一个数组这个数组里包含着很多个结构体每个结构体表示了文件的具体信息通过文件信息确定文件内容在硬盘的那个位置。4.进程状态进程的状态可简单分为就绪阻塞2种状态阻塞意味着该进程无法参与到CPU的调度执行上例如Scanner就绪意味着该进程可以参与到CPU的调度上5.进程的优先级进程的优先级决定了哪个进程优先分配到CPU资源6.进程的上下文一个进程调度到CPU上执行了一部分离开CPU过一段时间后会调回到CPU上继之前的执行过的部分继续执行上下文就记录了进程的执行信息。“上下文”指的是CPU的寄存器存的值进程的上下文类似于存档信息CPU内部有很多寄存器不同的寄存器有不同的功能例如“保存当前程序运行的一些中间状态”、“记录当前指令执行到哪一条”、“记录当前程序的函数调用关系型”等功能进程在CPU上执行的时候寄存器的值不停的发生变换进程要离开CPU的时候把这一时刻CPU上这些寄存器的值全都拷贝出来保存到PCB的结构体中保存进程的上下文进程后续如果回到CPU上把之前PCB保存的寄存器的值写入到CPU的寄存器上恢复上下文7.进程的记账信息在优先级机制下某个进程就可能分配到的CPU资源非常少为避免这种情况就有了进程的记账信息记账信息统计每个进程分别在CPU上运行了多久识别出哪个进程分配的CPU资源多哪个进程分配到的CPU资源少从而灵活调整分配