
一JavaEEjavaEE 特指Java开发网站后端 相关技术体系二冯诺依曼体系2.1 计算机的组成1CPU中央处理器工作的时候很烫需要散热2主板大插座其他的组件都需要插到插座上才能供电才能工作3内存存储数据数据量少速度快成本高断电后数据丢失4硬盘存储数据数据量多速度慢成本低断电后数据仍然存在持久化存储5散热器6电源7机箱8显卡2.1.1针对存储空间硬盘 内存CPU2.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缓存寄存器的运行速度比内存的快而内存的运行速度又比硬盘上的快所以寄存器和内存之间有一个cacheCPU上的内存和硬盘之间有一个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 PCBPID进程的身份标识每个进程需要有一个唯一的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网络