今天给大家带来javaEE初阶的知识,相信大家已经学完javaSE了吧,我们从本期博客开始为大家一一讲解,我们现在开始吧
我们作为程序员,大概了解这部分即可嗷
1,计算机的组成
祖师爷提出的:
冯诺依曼体系结构;
1,cpu
2,存储器
3,输入设备
4,输出设备
一台计算机由啥构成:
1,CPU:CPU是人类科技的巅峰制作,是电脑上最核心的部分,也叫中央处理器,计算机上进行各种逻辑判断,算数运算都是由CPU负责的,我们代码里写的内容都是CPU负责的。
2,主板:一个巨大的插座
3,内存:存储数据的主要模块
4,硬盘:存储数据的主要模块
这里玩意有啥区别呢,不知道大家学没学过数据库,我们使用数据库的目的是高效的将硬盘中持久化的数据拿出来,“持久化”,这个词描述的就是硬盘,内存的读写速度快,硬盘反之,内存的造价也高,硬盘就要便宜很多,内存的存储空间小,硬盘的存储空间大,还有就是内存存储数据不是持久的,断电就没有了,硬盘不一样,断电也在;
我们将内存和硬盘统称为存储器;
5,电源
6,散热器
7,机箱
8,显卡
9,GPU
10,键盘.....................
显卡,GPU,CPU都是很相似的,都能进行算术运算和逻辑判断
CPU是“通用计算器”,而GPU是“专用计算器”,可能一些CPU能算的东西GPU不能算,但是GPU专用计算的赛道,就远远比CPU要快了。GPU就是用来处理,运算虽然简单,但是运算量非常大的场景比如:
1,图形渲染(大型游戏,3D建模)
2,挖矿(加密货币)
不知道大家听没听过比特币这个东西,一个可贵了,还有以太坊,和狗狗币等。挖矿就是赚佣金,比特币这样的区块链网络能够运行需要一些系统来辅助,你的电脑参与辅助工作,就能分一些比特币,区块链给你出题,你如果有好的显卡你就能抢到这个任务,赚取到佣金。
说完这些,冯诺依曼体结构中的输入设备和输出设备是啥呢,我们是在CPU视角上来讨论的,数据来到CPU我们叫做输入,从CPU走我们叫做输出。
触摸屏既是输入设备也是输出设备,还有网卡,上网的时候和网线连接的部分对应的硬件,也是集成在主板上的,下载数据的时候是输入,上传数据的时候是输出;
2,CPU
1> cpu关心的指标
1,我们下面来讲讲现代CPU关心的指标,我们打开任务管理器,
看到这有一个速度和,基准速度,
基准速度也叫基频,默频,G是10亿,HZ是一秒钟多少次,3.20GHZ就是一秒能进行32亿次计算
速度又叫睿频和加速频率(有加速上限)
现代CPU的特性,动态的根据任务量变更自己的频率,
2> cpu和核心
2,CPU和核心数
CPU核心数越多,CPU就越牛,(CPU干活效率越高)
我们通常说的8核,16线程,就8个物理核心,16个逻辑核心(能同时干16个活)
这里还有大小核,超线程的概念;
3> CPU执行指令的过程
编程语言分为3大类
1,机器语言(二进制形式)
2,汇编语言
3,高级语言(java......)
CPU上都支持那些指令,每个指令怎么表示,有那些意义,在CPU被设计的时候就确定了;
我们可以根据指令表来查看CPU的每一步操作
这里是咱们简化的指令表,正常的指令表是64个bit,8个字节,
一条指令 = 4位操作码 + 4位操作数 (简化版);
RAM是内存,LOAD_A指令的功能是把内存数据提取到CPU寄存器A中,STORE_A指令是把A寄存器的数据写入到内存中,ADD指令是将两个寄存器的数据的和相加放到第二个寄存器中,内存地址就理解为指针;
寄存器:
存储数据的模块,长在CPU身上的,CPU的寄存器,访问速度比内存还要快,存储空间也更小,造价也更高,寄存器主要在CPU执行指令进行各种运算的时候存储临时数据,起到一定的辅助作用;
CPU执行指令的过程
1,读取指令
2,解析指令(对照指令表,理解指令的含义)
3,执行指令
开始了嗷,
1)读取指令(从0地址开始执行)
00101110
2)解析指令
0010(opcode) 1110(操作数)
我们看到LOAD_A的opcode是0010,所以我们这一步的操作是将操作数读取到寄存器中,1110是14,14地址上的数是3
3)执行指令
此时CPU中的A寄存器就出现了数据3;
我们假设CPU是顺序执行指令表的
1)读取指令
00011111
2)解析指令
0001(opcode) 1111(操作数)
LOAD_B的opcode是0001,将操作数15的地址上的数读取到寄存器B中
3)执行指令
CPU
寄存器A:3
寄存器B:14
1)读取指令
10000100
2)解析指令
1000(opcode) 0100(操作数)
ADD的opcode, 01为B,00为A,两个寄存器的编号,数据相加,结果放到00中
3)执行指令
CPU:
A:17
B:14
1)读取指令
01001101
2)解析指令
0100(opcode) 1101(操作数)
0100是STORE_A的opcode,1101是13,
我们就要把寄存器中的数据存到地址为13的数据中
这样就把地址为13的数据改为我们刚刚的17了。
这就是模拟CPU进行加法的过程;
大家有没有听过一个东西,热补丁,这个就是在指令的层面实现的,我们在服务器遇到严重bug的时候,有时候我们有不能重启的需求,我们就需要指令来修复,因为服务器本神也是一段指令;
3,操作系统
1,简介
计算机中最重要的“软件”
不同的操作系统之间是不兼容的,一个软件在Linux能运行但是在Windows就不行了,但是我们java怎么说来着,一次运行,到处运行?还是啥来着,反正因为java的虚拟机,java给各种主流系统都开发了一个虚拟机,jvm牛批(后面再舔)哈哈哈哈哈。
我们来介绍主流的操作系统
Windows
Linux
Mac
IOS
Android
还有不断完善的鸿蒙操作系统;
大家了解过驱动程序没有,我们有的时候买鼠标,一堆按键,刚拿回来是不生效的,我们会去官方下对应的东西,这个就是驱动程序,操作系统通过驱动程序间接来控制硬件,显卡也是一样;
操作系统就是一个搞管理的软件
1,管理各种硬件设备
2,为各种应用环境提供各种稳定的运行环境,这里我们就要引出进程了;
操作系统中的一个重要概念:进程(process)
一个运行起来的程序就是进程
这些打开了的,全都是进程
一个计算机可能有上百来个进程,那么操作系统是怎么去管理这些呢,
1,使用结构体来描绘出进程的属性,PCB进程控制块,一个非常大的结构体
2,把多个进程组织起来,用数据结构,比如链表啊之类的,来把进程一个一个串起来;
大概的流程就是
1)创建一个新的进程
创建PCB,初始PCB中的各个属性,把PCB加到链表上
2)查看进程表
遍历进程链表,取出链表上的每个元素,把关键信息显示到界面是上;
3)销毁进程
把这个进程的PCB在链表上找到,删除
大家有没有注意到一个问题,操作系统操作CPU来驱动各种程序,但是操作系统本身也是个程序呀,也就是一段指令,CPU不是去执行指令的吗,那到底是CPU操作操作系统还是操作系统操作CPU呢,其实还是操作系统操作CPU,我们的电脑在打开时,CPU醒了运行一些指令来唤醒操作系统,操作系统在操作CPU进行更多的操作;
2,PCB的属性
进程是操作系统资源分配的基本单位
1,pid(进程的ID)
2,内存指针(一组指针)
3,文件描述符表
进程在运行的过程中会消耗内存分配,同时也会和硬盘去交互,硬盘是上的数据是以文件的形式来组织的,进程读取硬盘的文件的时候就会打开文件,我们会把这个文件的信息保存到文件描述符表中,表里的每一项,对应打开了哪个文件
进程的运行还会依赖到CPU,网卡等资源
4,状态
5,优先级
6,上下文
7,记账信息
我们把4,5,6,7统称为进程的调度
大家思考一个问题,我们早期的计算机是单进程的,在运行一个软件1,在想要运行软件2就要把软件1关掉,我们现在虽然引入了多进程的概念,但是一个电脑可能核心只有12个,那么上百个进程,12个核心怎么做到一起运行的呢,其实并没有,还记得计算机一秒能运算32亿甚至更多次吗,大家学没学过微分,我们在切换软件的时候,其实进程一直在交替的运行,先运行这个在运行那个,只不过是太快太快了,我们无法感知到,我们遇到过的卡顿,就是进程太多了,速度降下来了,我们感知到一点了,这样把单位时间分为很多份,第一份运行进程1的指令,第二份运行进程2的指令,超高速的切换,我们就管他叫分时复用;
这里引出两个概念:
1,并发执行:把一个CPU上,按分时复用,执行多个进程的方式称为“并发执行”
2,并行执行:
在多个CPU上,同时执行多个进程的方式就是“并行执行”
一般并发执行和并行执行是同时存在的,我们可以把他俩统称为并发执行;
因为需要并发执行,操作系统需要快速的切换进程,也就是进程调度
4,进程状态
两个最典型的
1)就绪状态————CPU上随叫随到
2)阻塞状态————进程不适合在CPU上运行
5,进程的优先级
打游戏的时候,游戏的优先级一定会比qq,微信的高吧,这个后面在讲
6,进程的上下文
我们可能一个进程执行了一会就暂时不用了,那么他就失去了CPU,我们再使用的时候就能沿着上次的状态执行,CPU上的寄存器就存储了进程运行的“中间状态”
保存上下文:把CPU中的寄存器的值,保存到内存中(PCB对应的属性)
回复上下文:把PCB中的属性,填回寄存器中
7,进程中的记账信息
记录了你当前进程分配了多少资源,使用了多久,如果你好就没吃到资源了,还会给你这个进程分配一些资源
差不多啦,下期给大家带来多线程的知识!