目录
一、冯诺依曼体系
- CPU中央处理器:进行算术运算和逻辑判断;
1)运算器:进行逻辑运算
2)寄存器:cpu执行进程时,保存进程需要的数据
3)控制器:if、while控制语句的执行方向- 存储器:分为内存和外存,用来存储数据(使用二进制存储)
- 输入设备
- 输出设备
存储空间:硬盘>内存>>cpu
数据访问速度:cpu>>内存>硬盘
程序:静态的可执行文件(java.exe)
扫描二维码关注公众号,回复: 14257408 查看本文章![]()
二、java进程
编译型语言和解释型语言:
- 编译型语言:需要编译的编程语言
- 解释型语言:运行时,将代码翻译为cpu可以执行的机器码
为什么Java程序可以跨平台?
对于Java语言,既是编译型语言,也是解释型语言。静态编译java文件为class字节码文件;
Java进程启动后,就会创建一个Java虚拟机,便运行便翻译字节码为机器码(便运行便翻译,效率较低)。而对于C++,直接静态编译为具体某个系统的机器码,所以其不可跨平台(效率比较高)。
三、进程
进程是由操作系统创建并管理的。
jdk、jre、jvm之间的关系
1、操作系统
操作系统是一组做计算机资源管理的软件的统称。常见的操作系统:Windows系列、Unix系列、
Linux系列、OSX系列、Android系列、iOS系列等。
操作系统向上可以管理进程,向下可以管理硬件(通过硬件的驱动程序来管理)。
2、进程管理
(1)进程:系统分配资源(内存、网络、硬盘)的最小单位。
默认创建三个文件描述符:
(2)cpu:多核cpu,就是将多个cpuu捆绑在一起,安装在电脑中;meigecpu核心,都可以执行进程的代码指令。
(3)系统管理进程:会先创建一个进程的pcb结构体(用于描述进程信息),包括:
- pid:标识进程的身份(类似数据库主键)
- 状态:包括运行、阻塞等状态
- 内存指针:进程的内存地址
- 资源清单:io设备和硬盘文件
文件描述符表:定位硬盘中的文件:
默认创建三个文件描述符:System.out,System.err,System.in- 调度信息:进程执行了多少代码,等待了多久
- 上下文
(4)系统对进程的调度
系统中,进程的数量远远大于cpu的核心数,为什么给我们的感觉,是在同时进行?
时间片轮转调度算法:一个cpu以时间片轮转调度(一个进程一个时间片,执行一段时间,就切换到下一个进程继续执行)的方式,依次执行多个进程。
操作系统管理进程,也是类似cpu执行一段时间,只是相对于人眼感知不到。
抢占式调度:有优先级比较高的任务,就需要以抢占式的方式优先执行。
上下文:时间片切换出去,保留上下文(主存);切换回来,要恢复下文(寄存器)
(5)进程的状态
一个进程是就绪态还是运行态,是由系统调度决定的,进程是无法感知的。
并发和并行;
- 并发:一个cpu以时间片轮转调度的方式,执行多个进程,给我们感觉像是同时执行(实际是肉眼无法感知的小范围时间)
- 并行:多个cpu在同一时间点,同时执行多个进程
计算机中,即存在并发,也存在并行。
(6)进程:虚拟地址空间
通过进程的虚拟地址空间,映射到物理内存。(隔离多个进程的内存→更安全。)
虚拟地址空间(使用分页式存储管理)
虚拟内存:现在操作系统,都会使用一种虚拟内存的技术,用于某些进程进入阻塞等不活跃的状态,把进程需要的数据,放到硬盘中,系统中所有进程使用的内存,就可以超过物理内存的限制(扩展真实使用的内存)
进程要加载某些数据:
- 通过虚拟的地址空间,查找对应的物理内容中的数据,如果找到,直接使用;
- 如果找不到,就产生一个分页式中断,就会再次从虚拟内存保存到硬盘的部分去查找。
(7)进程通信
进程使用虚拟地址空间,内存是互相隔离开的(不能通过共享变量来通信)。
但实际可能需要这样的场景:某些进程间需要一定的执行顺序。
目前:主流操作系统提供的进程通信机制如下:
1. 管道 2. 共享内存 3. 文件
4. 网络 5. 信号量 6. 信号