JavaEE入门--计算机是怎么工作的

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档

文章目录


前言

在大家的陪伴下,我们成功经历了数据库这一冒险章节,我们就要开启新的冒险篇章。

本节就是新篇章的开端---计算机是怎么工作的!

一、计算机的组成

冯诺依曼结构体系

我们在上计算机组成原理这门课的时候,对这幅图很熟悉吧!我就不过多赘述了!

1.现代计算机的组成结构

1.1CPU

CPU是电脑上最核心的部分(中央处理器)!

计算机进行的各种算术运算,逻辑判断,都是CPU负责的(代码里写的内容都是CPU运行的!)

虽然CPU表面上小,内部结构非常非常复杂,复杂到"量子力学"尺度,CPU是人类科技的巅峰之作是和氢弹齐名。

#1.cpu和核心数

最开始的CPU(2008之前)

之前的CPU都是单个核心的。

当时研发新的CPU,就是努力提高cpu的频率。

提高到一定程度,就提高不上去了,cpu内部构造非常精密,里面是数不清的小的电路元件 构成的计算单元,计算单元越多,算的越快,一个cpu面积是固定的,要想让计算单元多,单个计算单元就得小。

不可能无限小,超过一定程度就超出经典物理了,步入到量子力学的范畴。

所以单个核心满了,干脆引入两个核心来工作。(多核心技术)

就类似于公司,招聘更多的员工完成工作。

物理核心层面:真实干活的人。

逻辑核心,实际上这些人能同时干几个活。

#1.3存储器

1.内存: 存储数据的最要模块!
2.硬盘:存储数据的主要模块!

二者统称为存储器。

问题:数据库MySQL存储数据是在内存上还是硬盘上呢?

答案:在硬盘上进行存储,这是数据库要满足持久性,而硬盘存储数据是持久的,断电也不会丢失!
内存与硬盘的区别:

1.内存读写速度快,硬盘读写速度慢,相差几千倍,机械硬盘读写速度一般是200MB/s左右;内存速度就快了,在这个的基础上几千倍水平。

2内存存储空间比较小,硬盘存储空间比较大。

3.内存的成本比硬盘更高(贵)。

4.内存存储数据不是持久的,断电就无了,而硬盘存储的数据是持久的,断电也不会丢失!!

科普两个小知识:

1.bit 1个二进制位

Byte 8 个二进制位

KB 1024个Byte

MB 1024个KB

GB 1024个MB

TB 1024个GB

PB 1024个TB

2.在生活中内存这个词存在着歧义的:

比如我的电脑是32G内存

我的手机是128G内存 :无良商家忽悠小白,以讹传讹了,手机的128G指的是硬盘;商家发明新词:运存 12G才是真正的内存。
1.4显卡(GPU)
显卡(GPU)和CPU是很相似的,都能进行算术运算和逻辑判断!

举个栗子:

CPU是一个大学生,能算1+1也能算微积分,"通用计算芯片"

GPU只是小学生,只能算1+1,算不了微积分,但是一组小学生,

虽然算不了微积分,如果是计算1+1,GPU速度比CPU快得多。"专用计算芯片"!

GPU就是用来处理计算虽然简单,但是运算非常大的场景:

1.图形渲染(大型游戏,3D建模)

黑神话,矩阵运算......

2.挖矿(加密货币)

比特币,以太坊,狗狗币......

挖矿收益,就是赚佣金,比特币这种区块链网络,能够运转需要一些系统辅助......

区块链系统给你出题

让我们算一系列1+1,哪个电脑算的快,哪个电脑就能够抢到这个任务,赚到佣金

1BTC = 60000+$

高点70000w,一两个月之前

3.AI人工智能

模型训练,就是在算大量的1+1,使用显卡就非常合适。

还有电源、散热器、机箱、键盘鼠标、显示器、1.2主板(就是一个大插座)。等就是组成现代的计算机。

二、编程语言

1.机器语言(以二进制 的方式,表示的一种编程语言)

2.汇编语言

3.高级语言(C,Java)

三、指令

⾸先,我们先介绍下我们需要到的指令(instruction)。

所谓指令,即指导 CPU 进⾏⼯作的命令,主要有操作码 + 被操作数组成。

其中操作码⽤来表⽰要做什么动作,被操作数是本条指令要操作的数据,可能是内存地址,也可能是

寄存器编号等。

指令本⾝也是⼀个数字,⽤⼆进制形式保存在内存的某个区域中。

cpu上面都支持那些指令,每个指令怎么表示,有哪些意义......

都是cpu在设计出来的时候就确定了,可以通过表格,表示出cpu支持哪些指令。

寄存器,也是存储数据的模块,是长在cpu身上的,cpu存储数据,就是通过寄存器,

cpu的寄存器,访问速度比内存还要快很多,存储空间也比内存小很多,成本也高很多。

断电之后数据也会丢失。

cache是介于寄存器和内存之间存储设施(也是集成在cpu上)

cpu的寄存器主要是在cpu进行执行指令进行各种运算的时候存储临时数据,起到一定的辅助效果。

操作系统

操作系统是计算机中,最重要的"软件"。

如Windows11/10,Linux......
Linux在程序员圈子中是非常重要的,后端开发,服务器程序使用的系统一般是Linux,嵌入式设备Linux也是主力系统!

Windows和Linux最大的区别:
1.这两个系统提供的API(系统函数)截然不同!

比如 我在Windows上写一个程序能运行,放到Linux上就不运行不了。

2.比如一些书写的格式不同,Windows Sleep(ms) = > #include <Windows.h>

Linux sleep(s) => #include <unistd.h>

使用Windows一般都是使用图形化界面操作,

使用Linux一般都是命令行操作(命令)(Linux也有图形化界面开发中一般不会使用)

图形化界面,降低门槛,命令行界面,才是生产力工具。

进程

概括为一句话:进程是一个运行起来的程序!!

现代的计算机同时炮哥百十来个进程,很常见,操作系统就需要能够很好的管理上述的进程(多了就需要谈管理),毕竟多了,就容易乱

为了避免乱套,就需要管理。

站在操作系的视角
1先描述出一个进程啥样的,
使用结构体,描述出进程的核心属性,
进程控制块(PCB) 非常大的结构体,有很多很多的属性

举个栗子:

一个班级,人也不少,学校需要管理好每个班级的同学情况,

  • 能够知道每个同学的各种信息,如学号、姓名......定义一个结构体/对象
    通过对象的各种属性,保存上述信息。
  • .把这些同学对应的对象,组织起来,通过数据结构的方式组织,
    数组、链表、哈希、数据库的表......=>集中存储,便于以后增删改查!
    2.再把多个进程组织起来
    比如,Linux这样的操作系统,使用链表(不一定是一个链表)这样的形式,吧多个PCB串到一起的。
    1)创建一个新的进程
    创建一个PCB,初始化PCB中的各个属性把PCB加到链表上
    2)销毁一个进程
    把这个进程的PCB在链表上找到,并且从链表上删除掉
    3)查看进程列表
    遍历链表,取出链表上的每个元素,把里面的一些关键信息,显示到界面上。
    PCB中的一些关键要点:
    1.pid(进程id),进程的身份标识符

2.内存指针(一组指针)
进程就需要知道要执行的指令在哪里,指令依赖的数据又在哪里。

双击exe,运行一个程序,创建一个进程,

操作系统加载的过程:

操作系统会把exe中的指令和数据,读取出来加载到内存中,后续进程在运行过程中,就会从指令内存区域里一条一条的取

指令并进行执行。

QQ.exe是可执行文件(保存在硬盘上的一段数据)

1)QQ这个程序运行过程中,都要执行哪些指令(二进制的)

exe是程序员写代码生成的

程序员写的代码最终就会编译成二进制指令包含在上述的exe中了

2)这些指令运行过程中,依赖的数据

3.文件描述符表

进程运行过程中,很多时候,需要和硬盘这个硬件设备,也要进行交互,

硬盘上的数据,就是以文件的形式来组织的。

进程在读写文件的时候,就需要先"打开文件"(fopen)

每次打开一个文件,就会把这个文件的信息,保存到文件描述符表中,

表里的每个项,就对应着一个打开了的文件。

操作系统中,会把很多资源,都抽象成文件来表示,不一定是硬盘上的资源;

还有操作系统中,会把很多资源,都抽象成文件来表示,不一定是硬盘上的资源,

网卡、操作系统管理网卡的时候就是当做"文件"一样来管理。

进程的运行,也会依赖到硬盘,网卡等相关的资源设备。

进程运行,执行指令,都是靠cpu的,进程也需要消耗cpu资源。
进程是操作系统中,资源分配的基本单位!!

进程调度

PCB中的进一步的属性
4.进程状态
5.进程优先级
6.进程的上下文
7.进程的几张信息统称为进程调度
进程调度是操作系统进行进程管理过程中,需要完成的重要工作。

我的电脑上,进程有百八十个,但是电脑cpu的核心数12个,一个cpu逻辑核心,同一时刻,只能执行一个进程的指令,

12个干活的牛马,如何同时进,行一百多个任务的工作?

在早期的计算机,操作系统"单任务"操作系统,同一时刻只能运行一个进程,要想运行下一个进程就得结束上一个进程。

多任务操作系统(在有多核处理器之前,多任务系统就已经有了)即使cpu只有一个核心,也能同时运行多个进程。
分时复用:

把一个单位时间,分成很多份。第一份,运行进程1的指令,第二份,运行进程2的指令......

cpu运行速度足够快,上述的切换过程,也会非常快,快到超出人类的反应时间。

让人看起立好像这些进程在"同时执行"一样.但是如果我们运行的任务实在是太多了,人也是有可能感知到这个卡顿的过程。

把一个CPU核心上,按照分时复用,执行多个进程这样的方式,称为**并行执行!!**雀食就是"同时执行".现代cpu在运行这些进程的时候,并发和并行是同时存在的。

因为程序员在写代码的时候,无法区分当前这些进程是并行执行还是并发执行,所以也会把并行和并发统称为"并发"。

现在我们开始讲解进程调度中四个属性
4.进程状态:

进程有很多状态,其中两个最典型的:

1)就绪状态->随叫随到,进程就可以随时到cpu上进行执行。在操作系统中,一般不区分就绪和执行都是就绪。

2)阻塞状态->进程当前不适合到cpu上执行。

举个例子:我们在餐厅点餐想象一下你在一家餐厅吃饭,餐厅里有一位服务员(相当于CPU),多名顾客(相当于进程)。

就绪状态 :当你已经拿到菜单,考虑好了要点什么菜,并且向服务员举手示意要点餐。这时你就处于"就绪状态"------你已经准备好点餐了,只是在等待服务员过来为你服务。

在计算机中,就绪状态的进程就是已经准备好了所有运行条件,只等待CPU分配时间片来执行它。

阻塞状态 :如果你点了一道菜,但这道菜需要厨师现做,需要等待10分钟。这时候你虽然已经点完餐,但需要等待菜做好才能继续用餐过程。这时你就处于"阻塞状态"------你因为等待某个外部事件(菜做好)而暂停了用餐进程。

**5.进程优先级:**这么多进程,他们能够去cpu上运行的机会是均等的吗嘛?

有些进程,就是要优先级更高一些,吃到更多的cpu资源。

比如LOL,同时,电脑上也运行了微信(哪怕微信吃cpu资源少,延迟几秒也能收到消息);

而LOL,卡了一下,团战就输了,伴随着基地也要爆炸。
6.进程的上下文:

进程调度,一个进程执行一会,失去cpu。过了一段时间之后,进程还会回到cpu上执行。

沿着上次执行到的状态,继续往下执行(而不能是重头执行),进程在CPU中运行的过程中,CPU上的各种寄存器,就表示了当前进程运行的"中间状态"。

**保存上下文:**把CPU中的这些寄存器的值,保存到内存中(PCB的对应属性中)。

**恢复上下文:**把PCB中刚才保存属性,填写回对应的寄存器中。多说一点,寄存器,不只是存储中间结果也会存储中间结果,也会存储当前这个进程执行到第几条指令了,以及当前进程中"函数调用关系"。

举个例子:玩过像《模拟人生》这样的多角色游戏吗?

  1. 角色A活动 :你正在控制角色A做饭
  2. 切换角色 :你切换到角色B去花园浇水
  3. 状态保存 :游戏会自动保存角色A的所有状态信息(站在哪里、手里拿什么、做到哪一步)
  4. 角色B活动 :你操作角色B完成浇水任务
  5. 恢复角色A :当你切回角色A时,他还在原地,保持着之前的动作和状态,可以继续做饭。

7.进程的记账信息:统计功能,统计每个进程都在CPU上运行了多久。如果发现某个进程,好久没有吃到CPU资源了,就给这个进程倾斜一些资源。

举个例子:

在RPG游戏中,每个角色都有一个详细的属性面板,这就像进程的记账信息:

  1. 生命值/魔法值 :角色当前的健康状态和能量储备(进程状态信息)
  2. 经验值/等级 :角色的成长进度和能力等级(进程优先级或权限)
  3. 装备栏/背包 :角色占用的道具和装备空间(内存使用情况)
  4. 技能冷却 :每个技能上次使用后经过了多长时间(时间统计信息)
  5. 任务进度 :当前正在执行的任务及其完成情况(进程运行状态)
    游戏系统通过这些信息来管理角色在游戏世界中的存在和行为,决定角色能做什么、能获得什么资源。

总结

上述内容就是我们本节的知识,尤其是进程和cpu这块的知识很重要,可能会有很多,大家要结合例子理解性的记忆和把他们吃透。
下节预告--->JavaEE初阶--Thread类

相关推荐
前端世界2 小时前
ASP.NET 实战:用 CSS 选择器打造一个可搜索、响应式的书籍管理系统
css·后端·asp.net
Z3r4y2 小时前
【代码审计】RuoYi-4.2 五处安全问题分析
java·web安全·代码审计·若依4.2·ruoyi-4.2
代码栈上的思考2 小时前
Spring MVC 中 @RequestMapping 路径映射与请求处理全流程
java·spring·mvc
WZTTMoon2 小时前
Spring MVC 核心工作原理:DispatcherServlet 全流程深度解析
java·spring·mvc
Java水解2 小时前
MySQL 正则表达式:REGEXP 和 RLIKE 操作符详解
后端·mysql
金銀銅鐵2 小时前
[Java] 用 Swing 生成一个最大公约数计算器(展示计算过程)
java·后端·数学
知其然亦知其所以然2 小时前
面试官笑了:我用这套方案搞定了“2000w vs 20w”的Redis难题!
redis·后端·面试
计算机学姐2 小时前
基于SpringBoot的新闻管理系统【协同过滤推荐算法+可视化统计】
java·vue.js·spring boot·后端·spring·mybatis·推荐算法
2201_757830872 小时前
泛型的细节
java·开发语言·数据结构