【JavaEE初阶】第一节.计算机是如何工作的

news2024/11/15 15:33:31

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

文章目录

  • 前言
  • 文章目录

    前言

    一、计算机发展历史

    二、冯诺依曼体系 

    三、CPU  

  • 3.1 浅谈CPU

  • 3.2 寄存器

  • 3.3 指令

  • 3.4 CPU的操作流程

  • 3.5 时钟周期

    四、编程语言 

  • 总结


前言

今天我们将进入到JavaEE的学习当中,此内容是有关计算机组成原理的有关内容,是针对计算机底层的原理进行学习,所以比之前JavaSE的学习更加困难,我们应该打起100的精神进行学习,一起进步!!!

一、计算机发展历史

人类历史上很多发明的东西,其最早的目的 就是为了 "军事"

计算机诞生于 "普林斯顿大学",发明者是 约翰·冯·诺依曼;最初计算机的诞生,是用来计算 "弹道导弹" 的轨迹

计算机硬件的发展过程:

第一代:电子管计算机
第二代:晶体管计算机
第三代:中小规模集成电路计算机
第四代:大规模和超大规模集成电路计算机
第五代:人工智能和大数据云服务的结合 

二、冯诺依曼体系 

存储器:分为 内存 和 外存

那么,内存和外存到底有哪些区别呢?

1.从存储空间上来看,内存空间一般要小于外存空间
2.从访问速度上来看, 访问内存的速度要比访问外存的速度快上3~4个数量级,要快上几千上万倍
3.内存所需要的成本要更高,一个非常大的内存,需要超超超超级氪金玩家才会用得起
4.对于内存来说,断电就会导致数据的丢失;对于外存来说,断电数据仍然不丢失(因此就引出了数据 "持久化"存储,即 把数据存储到外存(硬盘)里面)

输入设备:

输入设备主要有:键盘、鼠标、麦克风、摄像头......

它们都可以把外界的信息采集进来,传输到计算机里面 

输出设备:

输出设备主要就是用来 给用户反馈一下信息的效果,

比如说,显示器、音箱......都是输出设备 

不过需要注意的是,输入设备和输出设备不是严格意义上的分隔开的,

有的设备就是 既是输入设备,又是输出设备。

比如说,戳摸屏(如 手机上的触摸屏,既可以用来去看,又可以用来去摸)

比如说,网卡(上网的时候,通过网卡,既可以接收别人发过来的数据,又可以把自己想要发送的数据发送过去)

CPU:

中文名 "中央处理器",主要由 "运算器"和"控制器"组成

其中,控制器的功能是控制计算机各部分协调工作,运算器则是负责计算机的算术运算和逻辑运算

一台计算机,能够运行程序,能够进行算术运算,能够进行逻辑判断,全部都是靠 CPU

CPU 就相当于是计算机的大脑,是当前人类科技水平的巅峰之作

CPU特别特别重要,据说比氢弹还牛掰(据说 全世界 只有两个国家才可以制造出 CPU)

注意:

显卡和 CPU 本质上没有啥区别,

主要就是 CPU叫做通用计算芯片,应对各种计算场景;

而 显卡叫做专用计算芯片,特别擅长计算大规模浮点数,尤其是矩阵计算,运算量贼大(当然,这个CPU也可以做到,但是CPU可以做到的事情,显卡不一定可以做到),尤其是在游戏领域~~

可以类比于,CPU类似于大学生,学的东西可多啦;

而显卡类似于小学生,只会算 1+1;而大学生也可以算 1+1哇

但是邀请小学生的代价低啊(即便有许多许多个小学生 也可能会低于 一个大学生)

所以说,显卡本质上也是 CPU,只不过这个 CPU 只是专门算 浮点运算的

三、CPU  

3.1 浅谈CPU

CPU本质上是一系列的 "门电路" 来构成的

而所谓的 "门电路",就是最基本的 "与门"、"或门"、"非门" 等等门电路

在这里先不做过多解释,感兴趣的铁铁们 可以去看看关于数电、模电之类的书籍......

通过门电路,我们可以得到加法器来算出加法了,之后也可以算减法(补码存在的意义,就是是用加法来代替减法);再进一步,也可以算出乘法和除法了

也就是说,通过这些门电路,就构造出了计算单元

除此之外,还能够造出 控制单元,也可以构造处 存储单元

这些基本的组件,就够造成了完整的 CPU 

所以说,为啥我们认为 CPU 里面的制程越小越好?

——一个 CPU 芯片的面积是固定的,如果制程越小,单个门电路的体积就越小,整个 CPU 上面能够搭载的 门电路 数量就越多;数量越多,说明 CPU 上面的功能模块就越多,算的就越快(俗称 人多力量大)

说明:虽然我们希望它越小越好,但是也不能无限小(从物理角度上来说,现有科技在量子领域中还有很长的路要走)

3.2 寄存器

寄存器 也是用来存储数据的一个组件,和内存(主储存器)都是属于储存器,除此之外,还包括外存(硬盘,磁盘等)

功能和内存都差不多,都是存储数据,都是断电就消失

只不过 寄存器 不是单独的硬件设备,而是长在 CPU 上的一个部件;换句话说, CPU 自身也有一定的数据存储能力

 

相比于内存来说,寄存器与它是有一定的区别的:

  1. 储存空间更小(内存可以有几十个G,而 寄存器一般就是几百个字节,最多只有几K)
  2. 访问速度更快(比内存又快了 3~4 个数量级)

寄存器搞这么小,是因为成本就比内存还要高出很多很多

现在,寄存器所起到的效果,就是用来辅助程序运行,存储程序运行中产生的一些中间结果

举例解释说明:

比如说,想计算一个 10+20,

就需要:

从 内存 中读取 10 到寄存器A中
从 内存 中读取 20 到寄存器B中
执行相加指令,把两个寄存器相加的值,保存到 寄存器A(或 寄存器B)中
把寄存器A(或 寄存器B)中的值写回内存
CPU 的计算是针对寄存器中的值进行的;

3.3 指令

定义:

什么是指令?

简单的来说,指令就是人给计算机发布的命令

不过,计算机要想好好干活,那么程序员就需要把计算机所要干的活指定清楚、明确无歧义

而 程序员指定计算机干啥活的 过程就叫做 "编程",换句话说,程序员所写好的程序,里面就包含了许多的 "指令

说明:

人写的 Java、C/C++ 这样的编程语言构成的代码(相对于来说更接近自然语言),

计算机并不认识,计算机所认识的是 二进制的指令,

因此 就会有这样一个环节,把人写的代码(高级语言) 翻译成 计算机所能识别的指令(机器语言),这个翻译的过程,就叫做 编译;完成这个 编译工作的程序,就叫做 编译器;

那么,指令究竟是长什么样的呢?

上面的 "指令表"中的指令 是一个极简版本,实际上 计算机(CPU)上面支持的指令很多

内存地址:把内存进行了编号

把内存想象成 宿舍楼的大走廊,每个房间都有编号,按照一定的顺序 依次往下累加,

而内存是 从0开始依次往下累加的,这个房间号,就是内存的地址

3.4 CPU的操作流程

这个表表示内存中的一个片段,每一个内存地址里存的都是一个指令

每一个指令都是按照上述 "指令表" 来展开的

接下来指令加载到内存之后,CPU就可以执行程序了

(1)CPU 先从内存中读取指令

从哪个地址开始读?

在 CPU 里有一个特殊的寄存器,叫做 "程序计数器",也称为 "PC指针"

实际上在 x86_32 CPU 叫做 eip寄存器

程序计数器中就包含了一个 "地址",表示接下来要读哪个内存里的指令

(程序计数器 就像书签一样,书签往书里面一夹,就知道书已经读到哪里了)

程序一启动的时候,程序计数器一般就会有一个初始值,就会从程序的入口代码开始读取指令了

初始情况下,如上表 就会读到 地址是 0 的数据 0010 1110

 

(2)解析指令

读取指令之后,就需要解析指令了

对照前面的 "指令表" 来看,0010 1110 是啥意思

按照上述设定,每个指令 是 8 bit,包含两个部分:

前 4 bit 是指令的操作码(opcode),指令要干啥

后 4 bit 是操作数,不同的指令操作数不一样

对照前面的 "指令表" 可以知道,0010是LOAD_A,1110是 要读的内存地址,

所以它的意思是:从 1110 这个地址里 读一个字节到 A 寄存器中

3)执行指令

二进制1110 翻译成十进制 就是 14 ,可以观察上表,发现 地址是14的 数据为 0000 0011,也就是十进制的3

于是,就向寄存器A 放了一个3

此时,执行完第一条指令以后,程序计数器就会累加,从一开始的 0 变成了 1,执行下一条指令(地址是1,数据是 0001 1111)

这就是CPU基本的工作过程:读取指令、解析指令、执行指令

但是,虽然看起来好像是 CPU先读一条指令,解析指令,执行指令;再读下一条指令,......

可是实际上并不是这样,反而是类似于 "流水线" 的方式执行的:

这种方式 禁止摸鱼!!!

这样的设计 主要的目的是:可以提高程序的执行效率,可以保证各单位都在满负荷工作

3.5 时钟周期

前面所说过,CPU 是按照 "流水线" 的方式来执行的

如果要想这几个流水线之间可以相互协同工作、有节奏的配合的话;那就需要:"时钟周期" 来进行帮助

举例说明:

类似于拔河比赛,除了有运动员使劲拽绳子,还需要有一个人喊口号:需要让运动员们 力气向着一处使

而这个 喊口号的人 就相当于是 时钟周期

如上图所示,当前我使用的电脑的主频是 2.10GHz,也可以看作当前电脑 CPU 1秒钟就有 2.10亿个时钟周期

其实,每一个指令的执行都需要消耗 几个时钟周期的,但是 在流水线的生产环境下,可以简单的视为 一个指令消耗了一个时钟周期

 

四、编程语言 

机器语言:

又称为 二进制代码语言,需要程序员来记忆每一条指令的代码

但是,在这种情况下,效率贼低

可是,机器语言 却是计算机唯一可识别和执行的语言

高级语言:

虽然汇编语言降低了程序员的记忆成本,但是仍然要求程序员必须掌握 计算机硬件的所有知识

但是,随着计算机的厂商越来越多,一次编写的程序 往往只适用于一类计算机

但是这仍然不够,所以更高级的语言诞生了(如 C/C++,Java 等等),屏蔽了各种细节,程序员可以站在更高的层面上思考自己的业务

汇编语言:

为了提升编程的效率,最早创造了汇编语言的概念

汇编语言就是 用英文单词或者其缩写代替二进制的代码,使人们更容易记忆和理解

其实,汇编语言 和 机器语言(也就是指令)是一一对应的,只是相对于0、1这些数字,发明了一些帮助人类理解和记忆的 符号将其对应起来,也就是 上面的 类似于LOAD_A,LOAD_B等等

程序员完成编译之后,需要使用 汇编器 将汇编语言翻译成机器语言,以便计算机可以识别和执行

总结来说,我们所写的代码 都会被编译器转换成 许多条 CPU 可以识别的机器语言指令,CPU 执行这些指令以后,实现程序的功能

注意:高级语言的一条语句 往往对应很多条指令 才能完成 


总结

今天我们简单介了有关Javaee初阶的简单的内容,这是学习Javaee最基础的东西;

下一节内容我们将进入到进程的学习中,让我们下期再见!!!!

 

三连会顺着评论区回访滴!!!!!!!!!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/165882.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

vue.js客服系统实时聊天项目开发(四)引入iconfont图标代码

普通引入模式下是这样的 首先&#xff0c;您需要在iconfont.cn上创建一个账号并添加图标。 然后&#xff0c;将iconfont的链接代码加入到页面的head标签中&#xff0c;例如&#xff1a; <link rel"stylesheet" href"//at.alicdn.com/t/font_123456_abcdefghi…

Docker为什莫方便(学习的记录)

Docker为什莫方便&#xff08;学习的记录&#xff09; 程序 — apk— 发布到商城------下载安装即可使用 程序----打包项目带上环境&#xff08;创建一个项目的镜像&#xff09;-----发布到docker仓库当中------下载安装运行即可 &#x1f315; docker的核心思想 将各个环境…

【手写 Vue2.x 源码】第二十七篇 - Vue 生命周期的实现

一&#xff0c;前言 上篇&#xff0c;主要介绍了数组依赖收集的实现 本篇&#xff0c;Vue 生命周期的实现 二&#xff0c;Vue.mixin 介绍 1&#xff0c;mixin 简介 Vue2 中可以通过 Vue.mixin 为 vue 进行功能扩展 开发中&#xff0c;经常使用 mixin 来为所有组件增加一些生…

机器学习的相关软件框架下载安装

文章目录一、Anaconda1. Anaconda 的下载2. Anaconda 的安装3. Anaconda Navigator 打不开问题&#xff08;不适用所有&#xff09;二、PyTorch-CPU1. PyTorch 环境创建2. PyTorch 下载3. Jupyter 中使用 PyTorch三、Python 版本升级与包的维护1. 更新 Anaconda2. 查看与更新 p…

回归预测 | MATLAB实现SSA-LSSVM麻雀算法优化最小二乘支持向量机多输入单输出

回归预测 | MATLAB实现SSA-LSSVM麻雀算法优化最小二乘支持向量机多输入单输出 目录回归预测 | MATLAB实现SSA-LSSVM麻雀算法优化最小二乘支持向量机多输入单输出预测效果基本介绍模型描述程序设计参考资料预测效果 基本介绍 MATLAB实现SSA-LSSVM麻雀算法优化最小二乘支持向量机…

【MAUI】自动更新功能的安卓App

自动更新功能的安卓App自动更新主要下面4个步骤更新服务测试页面:MainPage.xaml测试自动更新主要下面4个步骤 1、获取最新版本号 2、提示用户发现更新&#xff0c;等待用户确认更新 3、下载最新的apk包 4、安装apk包 更新服务 为简单示例&#xff1a;直接在android平台文件夹…

Spring资源管理,Spring资源管理源码分析

文章目录一、Java标准资源管理1、Java 标准资源定位2、Java URL 协议扩展基于 java.net.URLStreamHandlerFactory基于 java.net.URLStreamHandler3、Java 标准资源管理扩展的步骤4、Spring为什么不用Java标准的资源管理二、Spring资源接口与实现1、Spring基本资源接口InputStre…

C++ 简单实现RPC网络通讯

RPC是远程调用系统简称&#xff0c;它允许程序调用运行在另一台计算机上的过程&#xff0c;就像调用本地的过程一样。RPC 实现了网络编程的“过程调用”模型&#xff0c;让程序员可以像调用本地函数一样调用远程函数。最近在做的也是远程调用过程&#xff0c;所以通过重新梳理R…

项目管理平台,如何助力CMMI3-5级高效落地?

近日CoCode旗下Co-ProjectV3.0智能项目管理平台全面升级&#xff0c;CoCode产品4大版本全新发布&#xff0c;用户不限版本30天免费试用&#xff1b;平台全面支持CMMI3-5级&#xff0c;助力CMMI高效落地。 一、4大版本全新发布 不限版本30天免费试用 Co-Project V3.0智能项目管理…

FPGA:组合逻辑电路的设计

文章目录组合逻辑电路的设计组合逻辑电路的设计步骤组合逻辑电路的设计举例例1例2组合逻辑电路的设计 根据实际逻辑问题&#xff0c;求出所要求逻辑功能的最简单逻辑电路。 组合逻辑电路的设计步骤 1.逻辑抽象&#xff1a;根据实际逻辑问题的因果关系确定输入、输出变量&…

【寒假每日一题】DAY8 倒置字符串

牛客网链接&#xff1a;传送门 【❤️温馨提示】自己做一遍&#xff0c;再看解析效果更佳哟 描述 将一句话的单词进行倒置&#xff0c;标点不倒置。输入描述&#xff1a; 每个测试输入包含1个测试用例&#xff1a; I like beijing. 输入用例长度不超过100输出描述&#xff1a…

Open3D 点云投影至指定平面(Python版本)

文章目录 一、简介二、实现代码三、实现效果参考资料一、简介 假设给定的平面为 a x + b y + c z + 1 = 0 ax+by+cz+1=0

Python基础(二十四):面向对象核心知识

文章目录 面向对象核心知识 一、面向对象三大特性 1、封装 2、继承 3、多态

音频音量调整中的ramp up down

在日常生活中不管是打电话还是听音乐&#xff0c;都会遇到音量不合适而去调整音量的情况。如果音量调整软件处理不好&#xff0c;就会听到pop noise。产生pop noise的原因是音量直接从当前值骤变到目标值&#xff0c;而不是缓慢的变。如果缓慢的变就不会有pop noise了。图1显示…

select for update是行锁还是表锁,还真得看情况

背景 看到许多写select for update是行锁还是表锁的文章&#xff0c;但每篇文章的结论好像都不太一样。同时&#xff0c;是行锁还是表锁的问题直接影响着系统的性能&#xff0c;所以特意为大家调研一番&#xff0c;也就有了本篇文章&#xff0c;一共为大家汇总验证了20个场景下…

MES系统选型攻略,优秀MES系统应具备哪些性质

在众多MES系统中&#xff0c;企业怎样才能找到最适合自己的产品&#xff1f;那么&#xff0c;一套高质量的MES系统&#xff0c;究竟有什么特点&#xff1f;随着全球经济一体化的发展&#xff0c;中美两国之间的贸易战争日趋白热化&#xff0c;中国作为一个生产大国&#xff0c;…

行为型模式 - 迭代器模式iterator

模式的定义与特点 迭代器模式&#xff08;iterator Pattern&#xff09;&#xff0c;为的提是可以顺序访问一个聚集中的元素而不必暴露聚集的内部表象。多个对象聚在一起形成的总体称之为聚集&#xff0c;聚集对象是能够包容一组对象的容器对象。迭代子模式将迭代逻辑封装到一个…

ffmpeg源码编译vs2013版本

完整版安装ffmpeg 一、安装choco 1.Set-ExecutionPolicy AllSigned 2.Set-ExecutionPolicy Bypass -Scope Process -Force; [System.Net.ServicePointManager]::SecurityProtocol [System.Net.ServicePointManager]::SecurityProtocol -bor 3072; iex ((New-Object System.N…

链队基本操作(笔记版)

本节主要针对链栈的基本操作进行解析。 # coding:___utf-8___ # author:Guoxuan Sun time:2023/1/12 #链栈的基本操作 #链栈的创建与顺序栈的区别就是每个结点都有一个指针域 #同时链栈也是有两个指针front和rear #链栈中的front指针指向的结点是第一个结点&#xff0c;不是空…

关于MySQL中的存储引擎

存储引擎&#xff1a;&#xff08;了解内容&#xff09; 1、什么是存储引擎&#xff0c;有什么用&#xff1f; 存储引擎是mysql中特有的一个术语&#xff0c;其他数据库中没有。 存储引擎就是一个表存储/组织数据的方式。不同的存储引擎&#xff0c;表存储数据的方式不同。 目前…