【JavaEE】计算机是如何工作的
目录CPU的了解缓存(Cache)CPU的基本工作流程(重点)具体执行过程取指令执行指令操作系统进程是什么单进程和多进程进程管理如何管理进程中的核心属性PID标识符内存指针文件描述符表进程调度进程状态进程的优先级进程的上下文进程的记账信息CPU的了解基准速度也叫做主频旁边那个4.59GHz的也叫做睿频,这两个速度可以理解为CPU运算速度的快慢CPU运算速度越快, 我们的电脑就使用的流畅舒适.既然知道了CPU的运算速度很重要, 我们该如何提高CPU的运算速度呢?前提是我们了解CPU的主频速度是由谁决定的:其实CPU上有很多的运算单元, 运算单元越多, 那么我们的运算速度也就越快.而这里的运算单元我们可以大概得理解他就是我们所说的核心, 既然说了我们核心越多那么运算速度越快, 我们一个核心的算力有限制, 那么我们就会多搞几个核心来提高我们CPU的运算输的. 这也是为什么现在的电脑都有什么8核, 16核的区分.核心我们只用关心逻辑处理器这种核心就行了.缓存(Cache)因为CPU的运算速度非常快, 读取数据的速度也就非常快. 这样他的读取速度是和内存不同量级的. 那么这个时候就需要用到缓存这个速度和CPU差不多的, 来把内存中的数据放在缓存中, 方便CPU不用等待内存太多时间.设想一下, 现在你在高铁站, 马上排队进站就需要身份证, 你是放在包里面还是直接拿在手里面好呢? 当然是直接放在手里面好把, 这样你给验证机刷的时候就可以马上交给他, 而不用去包里面找吧. 这里的包就是内存, 手就是缓存. 验证机是CPU.我们没有开始检票的时候就可以放在包里面, 因为验证机还不需要这个资源. 但一旦开始检票了, 我们就马上要把包里面的身份证交给手. 验证机马上需要这个资源了.这里的L1, L2, L3设多级缓存让缓存可以存储更多的数据. 让CPU的时间可以几乎完全利用.CPU的基本工作流程(重点)指令是CPU执行任务的基本单位. 不管是Java还是C编写的程序, 要交给CPU执行. 都要转换成指令, CPU只认识指令.不同厂家生成的CPU支持的指令会有些差异, 但是生产CPU的厂家会提供CPU支持指令的手册. 如下这个CPU支持的指令这里解释一下寄存器, 寄存器是CPU内部的存储数据的硬件设备, 寄存器的空间很小, 主要用于数据的临时计算和保存具体执行过程取指令从内存中取出指令, 即从内存中读到CPU的寄存器中,### 解析指令约定指令前4位是操作码(对应那个操作), 后4位是操作数(操作内存还是寄存器)看指令表, 查到前4位是0010, 对应LOAD_A指令, 后4位1110,(转十进制14) 对应的是操作的内存地址. 所以是这个指令是把内存地址为14的数据加载到寄存器A中查看内存中, 是把00000011放在寄存器A中执行指令把00000011(十进制是3), 放到了寄存器A中其他指令依次执行即可.操作系统操作系统的作用就是管理软件和硬件从而给应用程序提供稳定的运行环境进程是什么进程就是计算机上运行起来的程序可以看到每一个进程都占用了如CPU, 内存, 磁盘, 网络等计算机资源. 所以操作系统重,进程是资源分配的基本单位单进程和多进程但进程就是操作系统一个时间只能让计算机运行一个进程, 那么这个就很不方便. 我们听歌的时候就不能打游戏. 打游戏的时候就不能听歌.所以现在支持了多进程, 我们可以在同一个时间又听歌又打游戏.进程管理那么进程多了, 就需要进行管理. 不然就会导致进程混乱, 在计算机中乱跑.如何管理先描述, 再组织. 用struct(也就是类)把进程的属性描述出来, 通过双向链表(这样的数据结构)把进程之间组织起来.(实际上不只是一个双链表, 可能会更复杂)进程中的核心属性PID标识符相当于进程的身份证, 用于区别两个不同的进程内存指针进程要运行, 需要加载到内存中. 而一个进程中有的部分是指令, 有的部分是数据. 内存指针告诉系统, 那部分是指令, 那部分是数据.文件描述符表用于描述文件, 进程中可能需要读写文件. 有了文件描述符表就可以找到这些文件进程调度在我们计算机中有这么多进程. 如何让CPU利用有限的核心来同时执行这么多进程呢?主要通过并行和并发来解决. 并行指的就是两个及以上的CPU核心分别来执行不同的进程. 并发则是一个CPU核心来执行多个进程. 那么一个CPU核心是如何执行多个进程呢?这就是通过分时复用来执行的.分时复用就是CPU给每个进程分配执行时间, 第一个CPU执行了0.1s, 这个时候CPU告诉进程从新去调度队列进行排队. 那么下一个进程来执行, 下一个进程执行了0.1s也要重新排队. 由于CPU的执行速度太快了, 肉眼根本感觉不到一个进程是被停止了的. 所以并发这种模式看起来就是处理了多个进程.其实上面的操作就像我们海王一样, 我有ABC3个女朋友, 周一周二我和A约会, 周三周四我和B约会. 周五周六我和C约会. A想要和我约会, 就需要重新排队到下周的周一周二进程状态当然在调度进程的时候, 我们进程也有状态.进程的优先级进程的优先级也是调度中必要的, 如果我们不区分优先级的话. 我们在汽车的智能驾驶系统中, 如果遇到要撞上人的时候, 我们系统在放歌. 这个时候系统必须把刹车进程的优先级马上执行, 放在优先级最高. 不可能在这个时候告诉你不行你还在听歌, 不能进行刹车. 听歌的优先级最高. 这就有点不科学了当然我们约会也是这样进程的上下文我们在并发的概念中说过, 多进程的情况下, 一个进程只会执行一个时间片的时间, 进程就需要重新排队, 那么这个时候我们怎么保证进程下次执行的时候是从上次执行的进度开始执行, 而不是从头开始执行呢(就像打游戏从存档哪里开始玩)进程的记账信息统计机制, 统计每个进程在CPU上运行了多久, 我们说过进程优先级, 那么这个时候我们如果让一个进程一直处于一个很高的优先级. 那么其他进程就一直吃不到资源, 这个时候就会导致进程饥饿. 这个时候就不合理了.所以通过统计机制, 我们统计出那些在CPU上运行很少的进程, 定期给他分配高的优先级. 让他尽量执行和我们生活中一样, 让舔狗舔, 也要定期给舔狗一点甜头, 不然舔狗长期没好处, 就有可能不舔我们了