一,JavaEE
javaEE 特指Java开发网站后端 相关技术体系
二,冯诺依曼体系
2.1 计算机的组成
1)CPU中央处理器
工作的时候很烫,需要散热
2)主板(大插座)
其他的组件都需要插到插座上才能供电,才能工作
3)内存(存储数据)
数据量少,速度快,成本高,断电后数据丢失
4)硬盘(存储数据)
数据量多,速度慢,成本低,断电后数据仍然存在(持久化存储)
5)散热器
6)电源
7)机箱
8)显卡
2.1.1针对存储空间
硬盘 >> 内存>>CPU
2.1.2针对数据访问速度
CPU >> 内存 >> 硬盘
三,CPU的工作过程
3.1 相关的概念
1)指令:一组二进制构成的数据,这些数据都是有特定的含义的,在CPU出场的时候就设定好了能够接收哪些指令
编程语言分为三个大类,机器语言,汇编语言和高级语言
机器语言是一条一条的指令,每个指令都是二进制的
而汇编语言是把每个指令都转换成了一个英语单词(助记符)
汇编语言的每个语句和机器语言的每个指令一一对应

RAM:为内存(Random Access Memory:访问内存任意地址的数据,开销都差不多)
寄存器(CPU内部的存储设备)CPU也能存储数据,存储空间更小,速度更快,成本更高
CPU的寄存器整体存储空间一般不到1KB(存临时数据,辅助进行计算)
CPU进行计算需要把数据从内存读取到寄存器中
3.2 CPU的基本工作流程
一,CPU可以按照上述指令表进行工作

CPU看到的程序就是这些二进制指令,假设CPU从0号地址开始执行,顺序的往下进行执行
真实的情况是CPU会从内存的指定地址开始执行(不一定是0)有一个硬件设定好的起始地址
CPU上还有一个专门的寄存器"程序计数器"存储下一条要执行的指令的地址是什么
二,CPU执行一条指令,通常要经过三个步骤
内存上的指令是从哪来的?
操作系统,运行程序的时候把这个硬盘的可执行文件加载到内存中
1)读取指令:把指令从内存中读取出来,放到CPU上专门的寄存器中
2)解析指令:把指令解析一下,和指令表对照,理解要做啥
3)执行指令:真正按照指令说的来工作
当遇到0时程序结束
四,补充
4.1 cache缓存
寄存器的运行速度比内存的快,而内存的运行速度又比硬盘上的快
所以
寄存器和内存之间有一个cache(CPU上的)
内存和硬盘之间有一个cache(固态硬盘上,会有专门的cache模块)
从内存中直接取数据太慢了,就可以把数据放到缓存里
局部性原理:某次用到一条数据,紧接着很大的概率使用和这个数据相邻的数据
从内存中读一个数据,不是只读这一个地址,而是把这个地址和周围的数据都一起读取到cache中
4.2显卡
GPU分为两种独立显卡和集成显卡/核心显卡
集成显卡/核心显卡------CPU内部集成了独立显卡功能(能力比较弱)
独立显卡-----能力比较强
五,操作系统
1)类型
windows 家用电脑上的系统
Linux 服务器上的系统/嵌入式设备
MacOS 苹果电脑专属
Android 智能手机(从Linux发展过来)
IOS 苹果手机专属
还有其他专用领域的系统
2)功能
1,对下,管理好各种硬件设备
2,对上,要给软件提供稳定的运行环境
总之,操作系统是一个"搞管理的软件"
计算机上支持的硬件设备有很多,每种硬件都有不同的厂商,操作系统针对上述的各种硬件设备都提供了一定的"抽象封装",各种硬件厂商,就需要按照操作系统的要求,对接上去
应用软件
|
操作系统API
|
操作系统
|
驱动程序
|
硬件设备
操作系统会使每个应用程序之间隔离开,避免出现一个软件崩溃把其他软件带走的情况,相对稳定
六,进程
1)进程process是操作系统当中非常核心的概念
一个跑起来的应用程序就称为"进程"
操作系统提供了功能 任务管理器 中可以看到所有进程
进程和可执行文件是应用程序的不同状态
2)要想让进程运行,就得分配一些"系统资源"
进程是系统进行资源分配的基本单位
6.1 进程管理
1)描述
操作系统引入了PCB(进程控制块)结构体,表示一个进程的各种属性
进程的描述不能使用数据库的表,数据库本身是一个"应用软件",依赖操作系统的
2)组织
操作系统使用双向链表结构,组织这些PCB结构体
1,任务管理器上看到进程的信息,就是在遍历链表
2,创建新的进程 => 创建PCB,添加到链表上
3,销毁旧的进程 => 把PCB从链表上删除
之所以操作系统需要管理进程,本质上是操作系统同一时刻可以运行的进程有多个
6.2 PCB
PID
进程的身份标识
每个进程需要有一个唯一的id进行表示
pid具体的数字不重要,这是系统随机分配的
内存指针
操作系统运行进程需要分配资源,内存就是重要的资源
对于一个进程的内存,需要保存两部分核心的信息
1)进程要执行的指令 (高级语言 => 机器语言的指令)
2)进程执行时依赖的数据 (代码中涉及的各种变量即为数据)
操作系统需要知道哪个区域里都放的什么
文件描述符表
文件在操作系统是一个广义的概念,其中最典型的就是硬盘上的文件
进程工作中,很可能要和硬盘交互
一个进程可以同时操作多个文件,每次操作一个文件,都需要"打开文件"就会往文件描述符表上放一个结构体(这个文件描述符表就相当于一个顺序表)
6.3进程调度
cpu的核心数有限,进程数目很多
1)并行:两个CPU核心,同时的运行各自的进程
2)并发:一个cpu核心,通过"分时复用"的方式,运行多个进程
本质上就是轮着来
由于cpu的执行速度很快,上述分时复用轮转速度很快,人肉眼感知不到
宏观上看是"多个线程同时进行"
微观上看是"多个线程一个一个串行执行的"
每个进程在cpu核心上运行的时间单位,称为"时间片"
在开发中,从程序员/普通用户的角度是无法区分当前多个进程是并行的还是并发的
因此对于我们来说,就会把"并行和并发"统称为并发
6.4 进程的状态
一个进程的状态有很多
1)就绪状态:进程随时可以到cpu上执行/正在cpu上运行
2)堵塞状态:进程暂时不方便取cpu上执行
6.5 优先级
虽然都可以调度,但是有先后顺序
进程和进程之间的优先级不一样
6.6 上下文
进程在cpu上执行一段时间之后,切换走,过了一定的时间,再次切换回来了
进程切换回来就需要按照上次执行到的位置,继续往后执行
一个进程在切换走之前,保存进度
下次切换回来的时候,恢复进度
上下文就是进程执行到的++当前状态++
进程的上下文:进程执行的过程当中,CPU的各种寄存器的值
6.7 记账信息
是一个对抗优先级机制的兜底机制
有些进程优先级高,优先被执行
有些进程优先级低,后被执行
所有可能会出现某个时间里低优先级的进程一直吃不到cpu的资源
记账信息,统计每个进程在cpu上执行的时间,避免把某个进程冷落太久
6.8 内存分配
操作系统对内存资源的分配,采用的是空间模式-----不同的进程使用内存中的不同区域,互相之间不会干扰
6.9 进程间通信
进程和进程之间,内存空间是隔离的
进程之间要想交互,无法通过内存直接完成
操作系统提供了很多种进程间通信机制来解决这个问题
两种重要的通信机制 1)文件
2)网络