【手把手带你学 Java EE】计算机是如何工作的

【手把手带你学 Java EE】计算机是如何工作的

在这里插入图片描述

好久没有写博客了,最近新开始了JavaEE的学习,借着这个机会,赶紧把博客捡起来,跟大家一起分享、学习新知识。

如果你觉得这篇文章有用的话,记得给我点赞噢!

如果你也想跟我一起学习,那就千万别忘记一键三连关注我哟~

在Java EE的初阶中,我们主要学习一些比较基础的内容,涵盖操作系统,网页前端和网站的后端搭建。虽然我们的目标是成为一个后端工作人员,但是一个程序员需要了解最基本的计算机的构成、网页的基本原理,对于整个计算机的如何工作的有个大致的了解,这样才能帮助我们更好地写出更优的代码~

计算机发展史(极简版)

为什么会有计算机呢?

从计算机的名字我们就可以知道,计算机的诞生是为了计算了,随着人类的计算需求越来越大,人工的计算已经不能满足我们的需求了,于是就有了计算机。

第一台电子通用计算机是1945年在“宾夕法尼亚大学”完成建造的。

冯诺依曼体系

在这里插入图片描述

现代的计算机,大多遵循冯诺依曼体系结构:
在这里插入图片描述

  • CUP 中央处理器:进行算数运算和逻辑判断
  • 存储器:分为内存和外存,以二进制的形式对数据进行存储
  • 输入设备:用户用于向计算机发送指令的设备
  • 输出设备:计算机呈现结果的设备

区别内存和外存:
外存其实就是外存储器,比如硬盘、光盘、U盘等等,而内存则是相对外存而言的。

访问速度:内存>外存
存储空间:内存<外存
成本:内存>外存
外存可持久化存储,而内存则不能(关电脑之后数据就没啦~)

CUP工作流程

简单地介绍了冯诺依曼体系后,下面再简单地介绍一下CPU的工作流程~

那么CPU是怎样从无到有工作的呢?

逻辑门

电子开关

在CPU中,最基本的单位就是电磁继电器,是一个电子开关,我们通过通电来控制磁场,进而控制开关的闭合,这样就使电路实现了有电流和无电流两种状态,称为1和0.

后来随着技术的发展,人们进一步使用了真空管、逻辑管来实现一个逻辑门,其物理原理更加复杂, 但是本就就是产生0和1两种状态。

门电路

有了电子开关,我们就可以通过电子开关的组合来够成一些基本的们电路了。

门电路其实就是用来进行一些基本的逻辑运算的部件。
分为非门、与门、或门,异或门,分别可以针对0或1完成按位与、按位或、非、异或的逻辑操作,当然其中的实现这里就不赘述了。
在这里插入图片描述

算术逻辑单元 ALU

算术逻辑单元ALU就是计算机中进行计算、逻辑运算的核心部件啦!可称其为计算机的数学大脑。其实它就是用上面介绍的逻辑门构成的。

乘法可以由加法完成,除法又可以由减法完成,而计算机中的数是以补码的形式存储的,所以减法也可以由加法实现,所以我们只需要通过一个加法器就可以实现数的运算啦~

半加器

在计算机的世界里,其实就是针对0和1进行运算。
比如:1+1=10

这里因为有进位,所以我们有两个输出A和B,也有两个输出,一个是得到的这一位的结果0,一个是是否产生了进位,是则为1,否则为0.
在这里插入图片描述

全加器

全加器其实就是进行三个1位的相加,即把半加器输出结果中的进位作为第三个输入,这样就可以处理进位的情况啦~
在这里插入图片描述
然后我们就可以通过一个半加器(第一位)和(n-1)个全加器的组合来实现(n位)数的加法啦~
在这里插入图片描述
而上述的加法器,其实就是通过电子开关的组合来实现。

寄存器

CPU要对数据进行运算,必然需要对数据进行存储,而这个存储数据的器件就是寄存器。

寄存器的本质也是电子开关的集合,通过逻辑运算来控制是否存储数据,这个存储集合的基本单位就是锁存器,通过输入是否为1来决定是否写入(即存储)数据。

在CPU中,这些数据的读取速度很快,但是只要一断电,数据就全部消失了。

而内存(PAM:Random Access Memory)其实就是一系列锁存器的组合,其构建又复杂啦,在此只需要知道原理即可,细节可参考计算机系统/计算机组成原理等课程。

控制单元

CPU其实就像是人类的大脑,负责进行数据的处理、存储,那么CPU要怎么完成指令呢?这时候就需要有一个专门负责只会的部门,这个部门就是控制单元。

在这里插入图片描述
关于控制单元的基本组成原理,这里就不展开了。

指令

了解了控制单元的存在之后,我们可以用它来组成指令了。

指令其实也是一组数字,通过数字的含义来表达CPU的工作命令。

早期计算机刚诞生的时候,人们需要一个字一个字地把0和1的信息(机器语言)告诉给计算机,但是这样实在是太麻烦了,于是就有了汇编语言,即将一些基本的指令用简单的单词来表示,再有计算机自动转换成对应的指令进行执行,这样就不用再一直010101地控制开关了。

而不同厂商制造的CPU支持的机器语言可能有所差别,一个CPU具体支持哪些指令,则需要根据厂商提供的“芯片手册”来获得。

~通常学校中学习的汇编语言针对的是Intel 8086 CPU~

那么指令是如何执行的呢?

下面我们构造出一个简单的指令表:
在这里插入图片描述
一条指令由操作码和被操作数组成:

在这里插入图片描述
操作—>对应指令

  1. 把0001加载到A寄存器中—> 0010 0001
  2. 把0010加载到B寄存器中—> 0001 0010
  3. 把A寄存器中的数据写入内存中的存储器—> 0100 0001
  4. 把存储器中的数据和B寄存器中的数据相加,结果放到存储器中—> 1000 0100

这样就通过四个指令完成了1和2两个数的相加。

简而言之,CPU的工作流程就是:

  1. 从内存中读取指令
  2. 解析指令
  3. 执行指令

而上面三步,都是通过控制单元来说实现的。

编程语言

我们平时编写的C、C++、Java等计算机高级语言,最终都是转换成CPU所能识别的机器指令,从而得到执行的。

上述例子只是展现了最简单的加法运算,其实只要再叠加上条件的判断等等操作,就可以实现更多的功能了(条件语句和循环语句)。

从指令的获取,到解析,再到执行,就是一个完整的周期。

我们可以在计算机控制面板的系统中查看CPU的主频。
在这里插入图片描述
其可以大致理解机器每秒钟执行的指令数,这里数字3.30GHz大致可以近似看做每秒钟可以执行33亿次指令,可见其执行效率是非常高的。而数字越大,表示CPU一秒钟内可以执行的指令数越多。

操作系统

计算机中还有一个重要的东西:操作系统

它又是干嘛的呢?

其实,操作系统是计算机上重要且复杂的“软件”~
这个软件主要负责一些管理事务:

  1. 对下,它要管理好底下各个部门的伙伴(底层硬件设备)
  2. 对上,它要给各个大老板提供良好的服务(给其他应用软件构建一个稳定的运行环境)

进程

每个应用程序在操作系统中的一次运行,都被抽象为一个进程,而操作系统会为每一个进程提供运行的资源。
在这里插入图片描述
电脑中的这些.exe文件(里面存储了与这个程序对应的二进制指令),都是我们安装在电脑中应用程序,当我们打开程序时,操作系统就会把这个程序加载到内存中,开始让CPU执行其中的指令。而这些在电脑上跑起来的程序,就成了前面提到的进程。

当我们打开电脑上的任务管理器,就可以看到当前计算机上运行的进程~
在这里插入图片描述

所以,在操作系统内部,进程是操作系统进行资源分配的基本单位。

进程控制块抽象

我们的电脑需要同时运行许多程序,这时候就涉及到了进程的管理,于是就有了“进程控制块抽象”(PCB Process Control Block)的概念,PCB其实就是描述每个进程的信息的。

PCB包含:

  1. pid (进程id) - 进程的身份证号。在任务管理器中可以看到每个进程的pid
    在这里插入图片描述

  2. 内存指针 - 指向这个进程所要执行的指令的存储位置,以及相关数据的存储位置,以便操作系统将将运行程序所需的数据都加载到内存中。

  3. 文件描述表 - 程序在运行的时候,经常需要对文件进行操作。

进程每打开一个文件,文件描述表上就会多一项信息。我们可以将文件描述表视为一个数组,数组中的每个元素是一个结构体,用于描述对应的文件的相关信息。

而一个程序只要运行起来,系统就是默认打开三个文件:标准输入(System.in)、标准输出(System.out)、标准错误(System.err)

以上三条描述的是进程最基础的属性,它是进程运行的基础,接下来还有一组属性,其功能主要是为了能够实现进程的调度。

  1. 状态
    一个线程的状态觉得了下一步CPU是否分配资源给它。
    例如:就绪状态(随时可以执行任务)、阻塞状态(暂时不能执行任务)等等

  2. 优先级
    根据每个进程的优先级不同,系统会给优先级高的程序分配更多的时间等等、

  3. 记账信息 - 统计每个进程的执行时间、等待实现、执行的指令等等,这些信息可以为进程调度提供依据。

比如A进程已经等了很久,那么CPU就会根据这个信息,考虑到A已经等好久了,就要给A分配一些CPU的资源,以此来确保每个进程都能分配到资源。

  1. 上下文 - 用于记录进程上一次调出CPU的时候,程序执行的状态。

每个进程并不是进入CPU之后就要一次性把任务执行完毕,而是只能在某个时间段内使用CPU的资源,时间到了之后就得等待下一次系统的分配,这时候就需要记录该进程已经被执行到哪个部分了,相当于文明完游戏的时候并不是每一次进入游戏都重新开始,而是退出之前将记录存档,下一次开始游戏的时候再读档,然后继续游戏。而进程里存档的信息,就是这里的“上下文”。

进程的调度

进程的调度,其实就是操作系统在考虑CPU如何给各个进程分配资源。

系统对CPU资源的分配,采用的是时间模式,即在不同的时间段给不同的进程分配CPU资源。

内存分配

操作系统对内存资源的分配,使用了一个虚拟地址空间。

由于在操作系统上,同时运行着很多的进程,如果所有进程都用同一个地址,那么如果其中的某个进程出现了BUG,就很可能影响其他进程。

所以为了避免出现这种情况,操作系统就把进程之间通过虚拟地址空间来隔离开,即每个进程使用各自不同的虚拟地址空间,这样两个进程使用的是不同的空间,也不能直接交互。

但是也有一些进程是需要相互交互交流的,于是操作系统除了提供隔离开的空间,也会提供一些公共的空间,这样的空间类似于一个外卖柜,A把外卖放到柜子上,等B进程执行的时候再到外卖柜这里把外卖取走。

进程间通信

刚才说到有些进程之间是需要相互交流的,这就涉及到了进程间的通信。

在操作系统中,提供的“公共空间”有很多种,并且各有特点,有的存储空间大,速度快,有的则比较小,速度较慢。

操作系统中提供的进程通信机制如下:

  • 管道
  • 共享内存
  • 文件
  • 网络
  • 信号量
  • 信号
    其中,网络除了支持同主机两个进程间通信,还支持同一个网络下不同主机上的进程间通信。

总结

本文主要讲了计算机是如何工作的:

  1. 计算机中最基本的单元是电子开关,电子开关的不同组合构成了各种元器件。

电子开关—>基本单门电路—>半加器—>全加器—>加法器—>加减乘除

其中CPU是计算机中最重要的核心构成。

  1. 操作系统是一个搞管理的软件,负责协调好各硬件设备,为上层软件提供稳定的运行环境。

  2. 进程是跑起来的应用程序,通过PCB来描述。进程的调度是由系统按照时间和空间两种模式进行分配。为了保证进程的独立性,系统为每个进程分配了独立的虚拟地址空间,但同时也提供了进程间通信的通道。

如果你觉得文章对你有用,动动小手指给我点个赞吧~~

也欢迎大家和我交流噢!~

关注我!一起精进吧!~

在这里插入图片描述

  • 13
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 13
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 13
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值