【JavaEE初阶】计算机是如何运行的?
欢迎关注个人主页:逸狼
创造不易,可以点点赞吗~
如有错误,欢迎指出~
目录
冯诺依曼体系结构
寄存器
缓存
cpu:核心和 频率
核心数
频率
cpu执行指令的流程
操作系统 核心概念
进程的概念
进程的管理
PCB表
PID 进程的标识符
内存指针(一组)
文件描述符表(顺序表/数组)
进程的调度
进程状态
进程优先级
进程的上下文
进程的记账信息
冯诺依曼体系结构
cpu(包含运算器,控制器) 存储器,输入设备 ,输出设备
CPU 中央处理器:进⾏算术运算和逻辑判断.
存储器:分为外存(硬盘,软盘,U盘,光盘)和内存,⽤于存储数据(使⽤⼆进制⽅式存储)
- 内存:存储空间小,访问速度快,成本高,掉电后数据丢失
- 硬盘:存储空间大,访问速度慢,成本低,掉电后数据仍在
输⼊设备:⽤⼾给计算机发号施令的设备.
输出设备:计算机个⽤⼾汇报结果的设备.
存储数据主要靠 内存和硬盘,实际上,cpu在运算时,需要把 数据从内存读到cpu里,才能进行计算
寄存器
寄存器是cpu内部 存储数据的部分
- 存储空间比内存小(往往只有几个kb),
- 因此cpu在计算时 需要反复从内存 加载数据,效率受影响
- 速度比内存更快(好几个量级)
- 成本也比内存更高
- 断电后数据会丢失
缓存
现代cpu引入了缓存, 若某个内存中的数据经常使用,寄存器又放不下,就可以放到缓存中
数据使用频率越高,就往L1上放,没那么高就放L3,中间放L2
cpu:核心和 频率
衡量一个cup的两个重要指标 :核心数 和 频率
核心数
最早的cpu都是单个核心(cpu里只有一个人在干活),现在计算机发展成了多核心多线程工作
查看计算机的任务管理器,有几个方框就可以认为有几个核心
频率
cpu的运算速度 使用频率来描述
cpu的频率会根据任务量动态调整 ,随着频率提升,消耗的电量更高,发热更多
计算机都有 '功耗墙' ,cpu温度达到一定的阈值(105摄氏度),自动降频, 所以 若散热工作做好,可以让频率达到更到的水准(超频),平时实用阶段,cpu频率达到6.0GHz 就是极限了
cpu执行指令的流程
指令:指令是cpu完成任务的基本单位 . 编程语言写的程序最终都要被翻译成 cpu上执行的二进制指令, 不同cpu 支持的指令是不同的
指令表
执行指令的三个重要阶段
取指令:cpu从内存中读取到的指令内容到cpu内部
解析指令:识别指令 对应的功能 和 操作数
执行指令
操作系统 核心概念
操作系统的作用:
- 管理不同的硬件设备
- 给软件提供稳定的运行环境
操作系统不是直接操作硬件,而是厂商会提供对应的"驱动程序",操作系统是通过 驱动程序,间接地操作硬件设备
操作系统 =内核+ 配套的应用程序
操作系统 有
- Windows
- Linux
- Mac OS (苹果电脑内置系统)
- Android(最主流的系统)
- IOS(苹果手机/平板)
- 其他小众系统(如风河公司搞得vxworks用于工业设备,航空航天)
每个系统,运行的程序都是不同的(不能兼容)
进程的概念
进程是指 正在执行的应用程序
一个应用程序有两种状态
没有运行时,是一个exe文件,躺在硬盘上
运行时,exe会被加载到内存中,并且cpu会执行里面的指令
进程的管理
一台计算机,即使不开啥程序,自己会有很多进程出来
由于一个系统进程比较多,才需要管理,分为 描述和组织
- 描述: 通过结构体 /类,把进程的各个属性表示出来 (对于 Linux操作系统来说,使用称为"PCB"(进程控制块)这样的数据结构来描述进程信息)
- 组织: 通过数据结构 把多个上面的数据结构穿起来,并进一步进行各种增删查改 (简单理解为 通过链表的方式,把上述的多个PCB串到一起,但实际情况更复杂,不只是一个链表)
创建新的进程(双击exe,运行起程序),相当于创建一个PCB 结构体,并且插入到链表中
销毁进程 就是把PCB从链表上 删除掉,并且释放这个PCB结构体
查看进程链表, 就是在遍历这个链表,依次显示出对应的信息
PCB表
PCB其实是一个非常复杂的结构体,里面包含的属性非常多,下面只讨论一些关键信息
PID 进程的标识符
同一时刻,一个机器上的多个进程之间,PID是唯一的,不会重复,系统内的很多操作,都是通过PID找到对应的进程的
内存指针(一组)
描述内存依赖的指令和数据都在内存的哪个区域 ,操作系统运行exe,就会读取 exe中的 指令和数据,加载到内存中(内存地址)--->侧面表示出,进程的执行需要一定的内存资源
文件描述符表(顺序表/数组)
描述了进程打开了哪些 文件(对应到硬盘上的数据)---->侧面表示出,进程的执行,需要一定的硬盘资源
进程的调度
计算机上同时存在 百八十个进程,这么多的进程都需要执行,cpu负责执行,cpu每个核心可以执行一个进程(执行里面的指令), 操作系统中进程调度的关键是 '分时复用'(即 并发执行)
"并发执行": 一个时刻cpu运行进程1,运行一会,cpu运行进程2,过一会运行进程3,由于cpu运算的速度非常快,所以上述切换的速度也很快, 站在宏观的角度来看就是 同时执行
'并行执行' : 多核cpu的每个核心之间微观上也能同时执行不同的进程
并发/并行 都是操作系统内核统一调度,程序员/普通用户感知不到, 因此平时也把并发/并行统称为'并发执行' 对应的编程手法 也称为' 并发编程'
进程状态
就绪状态(可以随叫随到)的进程 是可以随时被调度到cpu上执行指令的
阻塞状态(无法随叫随到)的进程 无法调度到cup上执行,之所以阻塞,是因为要做一些其他的工作,比如 进行IO操作(读写硬盘/ 读写网卡...)
进程优先级
谁先来,谁后来,谁多,谁少
进程的上下文
分时复用,一个进程执行一会后,就要从cpu上调度走,过一段时间还会调度回cpu,就要沿着上次的执行结果(把之前执行的中间结果保存到各种cpu寄存器中,以备下次使用)继续往下执行
进程的记账信息
进程优先级的加持下 是不同的进程吃到的资源,差异越来越大
操作系统会统计每个进程在cpu上的执行时间,根据这个来进一步调整调度的策略
这几个属性相互配合共同构成了进程调度的核心逻辑(上述的调度过程,都是系统内核负责完成的)
进程间的通信:现在进程间的通信有且只有一个方式:通过网络