此文我们开始介绍JAVAEE的相关知识,首先从计算机的基础知识开始我们的探索吧
1. 冯诺依曼体系(VonNeumannArchitecture)
现代的计算机,大多遵守冯诺依曼体系结构
- CPU中央处理器:进行算术运算和逻辑判断.(包含运算器和控制器)
- 运算器:执行指令,完成计算工作
- 控制器:协调指令执行顺序
- 存储器:分为外存和内存,⽤于存储数据(使用二进制方式存储)
- 输入设备:⽤户给计算机发号施令的设备.(键盘、鼠标、扫描仪…)
- 输出设备:计算机给⽤户汇报结果的设备.(显示器、音响、打印机…)
输入设备相当于一个工厂里的采购部门,买原材料
存储器就相当于仓库,采购回来的东西要放到仓库里
CPU相当于加工车间,把原材料从仓库中拿出来加工之后再放回仓库
输出设备相当于销售部门,把仓库中加工好的东西卖出去
以我当前的电脑为例:
2.寄存器(Register)
属于存储器的一部分,只不过是封装到了CPU里面
为什么会存在寄存器呢??
这是因为CPU当中使用频繁的值,或者运算过程中产生的中间值,都会存在寄存器中。
硬盘 | 内存 | 寄存器( 8byte,一般在CPU里只有几十个) | |
---|---|---|---|
按容量分 | 最大 | 居中 | 最小 |
按速度分 | 最慢 | 居中 | 最快 |
按造价分 | 最便宜 | 居中 | 最贵 |
3. 指令
所谓指令,即指导CPU进行⼯作的命令,主要由操作码+被操作数组成。
其中操作码用来表示要做什么动作,被操作数是本条指令要操作的数据,可能是内存地址,也可能是寄存器编号等。
指令本身也是⼀个数字,⽤⼆进制形式保存在内存的某个区域中。
计算机的主要任务就是执行指令
电脑里的程序就是一堆编译好的指令
此时引出一个新的问题??是否一条Java语句对应多条指令还是一条指令呢??
结论:由此可见并不是一条Java语句就只对应一条指令
4. 控制单元
负责指令的调度,那些指令应该让CPU执行
5. 操作系统(OperatingSystem)
操作系统就是一个搞管理的软件
操作系统的作用:
- 对上(应用程序)为软件提供一个稳定的运行环境
- 对下(硬件)管理各种计算机设备(可以看到的任何设备)
- 对于图形化界面的操作系统,提供良好的人机交互界面,
其中Linux作为服务器的操作系统一般不提供图形化界面,因为要节省资源 - 文件管理
- 其中操作系统中没有的特殊功能,可以通过驱动程序来提供
6. 什么是进程
进程是操作系统对⼀个正在运行的程序的⼀种抽象,换⾔之,可以把进程看做程序的⼀次运行过程;
同时,在操作系统内部,进程又是操作系统进行资源分配的基本单位。
举例说明:
每一个运行的程序在操作系统里都对应着一个进程
其中进程可以分为
- 用户执行的进程
程序安装完成后,在系统里都是静态文件
双击之后,从磁盘加载到内存,系统就会创建一个与程序对应的进程,这时候程序就运行起来了 - 前台进程
- 系统创建的进程
- 后台进程
- 其中操作系统也是一个程序,他也创建了很多个进程
那么进程又有哪些属性呢?? 我们又该如何去描述组织进程呢??
此时,引出一个新的概念——>《 进程控制块抽象(PCB——>ProcessControlBlock)》
7. 进程控制块抽象(PCBProcessControlBlock)
类似于Java中的类,C语言中的结构体,进程控制程序块是用于定义进程的核心属性
7.1 PID
相当于数据表中的主键,也相当于手机号码,身份证,在操作系统中全局唯一
7.2 内存指针
当程序运行时,操作系统从磁盘加载程序文件到内存中
在程序运行之前就要在内存中分配一块有效的空间
内存指针就指向该有效空间
在内存中的数据与指令最终被CPU执行和读取
7.3 文件描述符表
当程序运行起来之后需要访问一些文件资源,这时操作系统就负责分配这些资源
程序需要的每个文件,被称为文件描述符,多个文件描述符合在一起,就组成了文件描述符表,类似于一个集合
默认每个程序运行时都会分配三个文件描述符
标准输入:System.in
标准输出: System.out
标准错误: System.error
7.4 进程调度
以下都归并为进程调度
1. 进程状态
运行状态:当前在CPU上,正在执行指令
就绪状态:排队中,随叫随到, 随时可以上CPU运行
(运行状态和就绪状态一般理解为一个状态)
阻塞状态:当前不适合到CPU上执行
2. 进程优先级
哪个进程有更多的机会去CPU上运行,优先级越高,机会就越大
3. 进程的上下文
进程调度的过程中,进程一会失去了CPU,一会又回到CPU上继续执行,
回到CPU之后要沿着上次的状态继续,而不是重头开始
当前执行的指令是啥,下一条是啥中间产生的一些变量值是啥保存的过程,存档读档恢复的过程
失去CPU时:进程的中间值(存放)
–>寄存器(存放)
-->内存中
回到CPU时:内存中(读取)
–>寄存器
4. 进程的记账信息
统计功能: 统计每个进程在CPU上运行了多久,哪些进程好长时间没有上CPU运行了
8. 内存分配–内存管理(Memory Manage)
程序运行时会分配内存空间
但此时由于野指针的存在,导致会有不好的效果
所以使用了虚拟内存来规避这个现象
对应到进程当中
⽬前,主流操作系统提供的进程通信机制有如下:
- 管道
- 共享内存
- ⽂件
- ⽹络
- 信号量
- 信号