JavaEE基础,计算机是如何工作的

前言❤️❤️

hello hello💕,这里是洋不写bug~😄,欢迎大家点赞👍👍,关注😍😍,收藏🌹🌹

前端和后端是数字产品的 "前台" 和 "后台",分工明确但协同工作。前端像餐厅的服务员和用餐区(直接对接顾客,提供体验),后端像厨房和仓库(负责准备食物、存储食材,具体的处理逻辑用户看不见)

后端开发工程师,主要就是通过Java语言来对服务器进行开发(也可以选择Phython,C++,Go,PHP等语言,只是Java是比较主流的)
在JavaEE初阶,就是打基础,做网站

这篇博客会从计算机组成,cpu指令的执行,操作系统等部分的基础知识开始,来入门JavaEE
🎆个人主页:洋不写bug的博客
🎆所属专栏:JavaEE学习
🎆铁汁们对于JavaEE的各种常用核心语法,都可以在上面的前端专栏学习,专栏正在持续更新中🏀,有问题可以写在评论区或者私信我哦~

1,计算机组成

这部分知识就类似于学校的"计算机导论"的课程,这里会更多列出工作中实用的部分:
下面就是台式机的主要组成部分:

主板:是一个大插座,上面有很多的插孔,用于安装计算机的各种配件

CPU:中央处理器(Central Processing Unit,简称CPU),它是计算机最核心的一个部件,CPU很小,但是作用很大,整个计算机的算术运算/逻辑判断,全靠CPU

内存:内存是储存在内存条中的,主板上有内存条对应插入的位置,装机时就要插入,买电脑时,说的16G + 1TB,这个16G就是内存,1TB就是硬盘存储(外存),内存存储速度快,是硬盘存储的一百多倍,价格也贵,相对来说数据存储量也很小

而且,内存中的数据计算机断电后就会丢失

硬盘:硬盘比较大,不直接放在主板,而是放在机箱里,通过线缆跟主板相连接,硬盘价格便宜,存储速度相对慢,断电后数据也不会丢失,但凡是重启电脑后还存在的数据,基本上都是储存在硬盘上的,例如数据库中的数据表就是储存在硬盘上的

GPU:图形处理器(Graphics Processing Unit,简称GPU),也称为显卡,就是用来处理图形,进行显示

CPU(中央处理器)也可以当作显卡来使用,(更准确的说法是即在 CPU 芯片内部整合独立的 GPU 模块)
在大部分轻薄本中,就是把GPU和CPU挤在了一块,也称为核显 ,这样完全可以满足日常办公和一些不太吃配置的游戏(例如LOL),也比较省电,另外轻薄本的价格也低,但是就是玩不了大型3A游戏

而像游戏本,都安装有独立的GPU,这就称为独显,游戏本性能比较强,但是续航不高,另外价格也相对较高

其实,计算机是一个很广义的概念,像洗衣机,投影仪,电视,广义上都可以理解为计算机
冯诺依曼就提出了"冯诺依曼体系结构",描述了一个计算机的组成,冯诺依曼大佬主导了IAS 计算机(又称 "冯・诺依曼机")的设计与建造,IAS 计算机的诞生,标志着计算机从 "专用计算器" 向 "通用智能工具" 的质的飞跃

还有个大佬,叫图灵,冯诺依曼是计算机实践上的大佬,图灵是人工智能与计算机科学的 "理论奠基人",他提出的测试规则至今仍是判断人工智能 "类人程度" 的重要标准之一。

冯诺依曼体系结构(描述计算机的组成):

  1. CPU
  2. 存储器(内存 + 外存)
  3. 输入设备 (键盘,鼠标)
  4. 输出设备 (显示器,音响)

像显卡,散热器,机箱,电源这些都是后来演化出来的

另外,需要注意的是,一个设备可能即是输入设备,也是输出设备,例如触摸屏,网卡(如下图)等

CPU其实是很复杂的一个东西,可以说是人类科技的巅峰,现在能造CPU的主要有intel,AMD,高通,苹果,英伟达
中国的CPU就是华为麒麟系列,但是跟外国的科技还是差上几年的,现在华为旗舰机搭载了鸿蒙6.0系统,芯片与系统结合,流畅度还是很高的
对于GPU(显卡),英伟达(NVIDIA)是全球市场的绝对领导者,例如笔记本和台式机中的 RTX 4060 显卡核心芯片由英伟达(NVIDIA)独家设计并主导生产

由于美国对中国的制裁,4090这种顶级显卡对中国禁售,在中国是买不到4090满血版显卡的,只能买到4090D阉割版

接下来就是跟编程相关的部分:

在任务管理器中看下CPU,在CPU中主要看两个参数,速度和核心数(如下图)


这里的速度是4.79GHz,1Hz代表每秒计算一次,1G = 1 * 10^9 (10亿)

因此,这个CPU现在的速度是每秒进行47.9亿次运算
接着是核心数,20年前的CPU,只有一个核心(相当于只有一个人在干活)

那如何升级CPU呢,可能首先想到的就是提升核心频率

CPU里面包含了很多非常小的运算单元
运算单元越多,频率越高

但是一个CPU的大小是固定的,想要塞进去更多的运算单元,就要让单元变小,但是单元本来就很小了,总不可能让它无限小,因此,cpu的频率,已经很多年没有大幅提升
频率不好提升,就开始提升核心数量,intel在2005年就搞出了奔腾双核处理器

后来,又提出了一个理念,就是能不能让一个CPU核心,同时打两份工(一个顶俩)
于是,intel又提出了超线程技术,一个物理核心(真实运算单元),可以顶两个逻辑核心(虚拟运算单元)使用

像博主的电脑,有20个物理核心,28个逻辑核心,就有8个物理核心使用了超线程技术,一个顶俩,剩下的12个物理核心一个顶一个

2,cpu指令的执行

在学C语言时,我们学习到编程语言分为三个大类:

  • 机器语言:二进制的0101,不同的二进制组合表示不同的含义(在上古时期程序员写代码,用的就是这个)

  • 汇编语言:把一些固定组合的0101,转化成简单的英语单词

  • 高级语言(C,Java):对汇编语言的进一步封装,可以通过一些更具有描述性的语句,对应到一组汇编代码

  • C语言是先编译生成汇编语言,再把汇编语言转为机器语言

    Java是先生成字节码文件(.class),接着JVM将其转成机器语言
    接下来就进入一个比较难的部分,CPU指令的执行:

    这里虚构一个CPU指令表,用于进行演示,真实的 CPU 指令集是比这个要复杂得多的

    表中的RAM就是Random Access Memory(随机存取存储器)的简写,也就是我们常说的内存
    这个表中有个寄存器的概念,寄存器就是存储数据的硬件设备(跟计算机的硬盘外存,还有内存类似)
    寄存器是cpu上的一个部分,一个cpu上通常用几十个寄存器,都不到1kb,寄存器的作用就是去临时的存储一些数据,也就是保存一些中间结果,辅助cpu的计算

    就比如要算1 + 2 + 3,cpu就需要先计算 1 + 2,把1 + 2的结果3保存在寄存器中,再计算 3 + 3,程序员在写代码的时候,通常是无法直接访问到寄存器的

    寄存器就具有以下的特点:

    1. 访问速度极快(大概是内存访问速度的100倍)
    2. 存储空间小
    3. 成本高
    4. 断电后数据丢失

    关于寄存器,内存,硬盘,可以这样来比喻,就好比火车入站要刷身份证

    硬盘 => 把身份证放在行李箱中

    内存 => 把身份证放在口袋里

    寄存器 => 把身份证拿在手上
    例如加载一个程序,这个程序原来是存储在硬盘上的,接着启动后再将程序加载到内存中,再按需加载到寄存器中让cpu执行时取用

    一条指令占8个bit位,就比如下面这样:

    前面提到,程序运行要先加载到内存中去,下面是一个程序内存空间的示意图:

    数据部分每个格子是1个字节,8个比特位,内存是以字节为单位组织的

    下面就根据这个程序内存空间图,来看下这个程序的执行过程:

    1.程序是从0号地址从上往下执行的,就好比程序运行的入口(main函数,main方法)

    首先是读取指令,CPU从内存中读取到一条指令的内容,读取到指令后就根据指令表来解析指令

    这里读取到的指令是 0010 1110 (前四位是操作码,后四位是操作数)
    在前面的指令表中查下操作码,0010就代表加载后面指定内存地址的数据到寄存器A中,1110转化为二进制就是14,也就是加载14号内存中的数据到寄存器A中

    这里14号内存中存储的数据是0000 0011,十进制就是3

    这条指令执行结果就是把3存到寄存器A中
    可能有的铁汁有点奇怪,会说:这个内存表你前面说是存储操作码 + 操作数据地址,怎么这会又变成存储纯数据了呢⁉️
    其实内存表是可以混合存储指令和数据,具体当成操作码 + 地址还是纯数据取决于cpu对操作码的识别

    注:在将二进制转为十进制时,千万不要手算(除非是学校考试要求手算),直接打开计算器,选择程序员计算器,HEX(十六进制),DEC(十进制),OCT(八进制),BIN(二进制),如下图所示

    2.接着进入地址1,读取指令 0001 1111,对照下指令表,0001的意思就是加载指定地址里的数据到B寄存器中,这里加载的1111地址,十进制就是15
    也就是加载15号内存中的数据(二进制为1110,转为十进制就是14)到B寄存器中
    寄存器中的存储如下图:

    3,进入地址2,读取指令1000 0100,1000就是计算两个指定寄存器的和,并将结果放入第二个寄存器中,后面01和00就是两个寄存器的编号,这里就把01当作B寄存器,00当作A寄存器

    执行的结果就是将A寄存器和B寄存器的结果相加,和存到A寄存器中
    执行完后寄存器存储如下图:

    4.进入地址3,读取指令0100 1101,0100的意思就是将数据从A寄存器写到指定的内存地址,后面的内存地址1101,十进制就是13
    这个指令就是将A寄存器中的数据(17)写到13号内存中

    5.接着进入地址4,发现里面是0000 0000 这时候这个程序就运行结束了
    那这个程序具体要实现的就是计算 3 + 14的值, 1 - 4步每步可以分为三个具体过程:取指令、解析指令、执行指令

    也就是说进行这样一个简单的计算,就要经过12个步骤
    但是别忘了,前面我们提到了CPU能一秒进行四十多亿次运算,因此执行的时间几乎可以忽略不计🐵

    小结:

    1. CPU 执行程序,需要从内存中加载指令
    2. 针对每个指令,都分成 取指令,解析指令,执行指令 三个环节
    3. CPU 使用一些数据进行计算的时候,都是需要把内存的数据加载到寄存器中,才能运算.
    4. 经过运算得到的结果,还要从寄存器中再写回到内存中去
    5. cpu会根据指令,跟内存或者其他硬件配合工作
    6. 我们平常写代码时,都会被编译器转化为指令,供cpu执行
    7. 上述过程是很简化的版本,真实的cpu执行指令时是很复杂的,会又一系列的优化手段来提高执行效率

    3,操作系统

    刚刚在计算机硬件层面主要关注的是cpu,内存这些东西

    操作系统就相当于是计算机中最关键的一个软件,提到这个,铁汁们最先想起的可能是Windows操作系统,除了Windows,还有很多其他著名的操作系统,如下所示:

    Linux 操作系统

    大部分计算机专业的铁汁都会学习这门课程,Windows操作系统主要是图形化界面(通过点鼠标来进行操作),Linux也有图形化页面,但使用时更多都是直接使用命令行进行操作的

    Linux系统主要在下面三个地方使用:

  • 服务器,服务器的操作系统,90%以上都是Linux

  • 嵌入式设备,像冰箱,洗衣机,空调这些,都内置的计算机,而且计算机的配置也比较低低的(成本低),内存可能只有几十MB,CPU频率也很低,因为本身也不需要进行什么特别复杂度运算
    那在这些设备的计算机上,Windows对于硬件的要求比较高,而Linux对于硬件的要求就很低,因此这些设备基本上装的都是Linux操作系统

  • Linux桌面版,steamdeck掌机用的就是Linux系统(如下图)
    我们的计算机上也可以不装Windows系统,装Linux系统,但是Linux系统桌面版是远远落后于Windows的,而且会有各种bug,因此敢直接给电脑装Linux系统无异于在重庆买手动挡汽车😅,绝对是大佬

  • MAC OS 系统

    苹果电脑装的操作系统

    IOS

    苹果手机的操作系统

    Android

    是消费级第一大操作系统,大部分国产手机,装的都是Android系统(也就是我们常说的安卓系统),安卓系统也是基于Linux发展过来的(Android的内核就是Linux)
    大部分国产手机厂商都是在安卓操作系统基础上加了点自己的特色,就类似于游戏中的皮肤

    鸿蒙

    鸿蒙是华为为了对抗美国制裁而自主研发的操作系统,这些年的发展还是很快的,在一些部分已经领先于安卓了👍🐵

    结语💕💕

    这里的重点部分就是cpu指令的执行(可能第一次看会觉得有点抽象😅)这部分是学习JavaEE的入门知识,其他部分铁汁们可以当作知识补充去看

    恭喜大家学习完了了JavaSE,开始更深程度的探索Java💪🐵
    以上就是今天的所有内容啦~完结撒花~🥳🎉🎉

相关推荐
码农水水1 小时前
小红书Java面试被问:mTLS(双向TLS)的证书验证和握手过程
java·开发语言·数据库·redis·python·面试·开源
康小庄1 小时前
List线程不安全解决办法和适用场景
java·数据结构·spring boot·spring·list·intellij-idea
上海合宙LuatOS2 小时前
LuatOS框架的使用(1)
java·开发语言·单片机·嵌入式硬件·物联网·ios·iphone
会算数的⑨2 小时前
Spring AI Alibaba学习(一)—— RAG
java·人工智能·后端·学习·spring·saa
IT 行者2 小时前
Spring Security 7 响应头配置完全指南
java·后端·spring·security
bug-0072 小时前
springboot 自定义消息处理
java·spring boot·后端
我真的是大笨蛋2 小时前
MySQL临时表深度解析
java·数据库·sql·mysql·缓存·性能优化
九皇叔叔2 小时前
【02】微服务系列 之 初始化工程
java·数据库·微服务
季明洵2 小时前
两数之和、四数相加II、三数之和、四数之和
java·数据结构·算法·leetcode·蓝桥杯·哈希算法