JavaEE初阶 01 计算机是如何工作的

前言

今天开始进行对JavaEE的一些基本总结,希望大家能在阅读中有所收获,如有错误还望多多指正.

1.冯诺依曼体系结构

 这个体系结构相信学计算机的同学都不陌生,但是你真的知道这个体系结构说的是什么嘛?请听我娓娓道来.首先我先给出一张冯诺依曼体系结构的简图

你可以理解为当前的计算机就是五大结构组成的,它们分别是:输入设备,输出设备,存储器,运算器和控制器(cpu)组成

可能你并不理解,下面我举一些你知道的例子

输入设备:键盘,鼠标..

输出设备:音响..

存储器:usb,软盘,硬盘...(二进制存储)

cpu相信大家都不会过于陌生,不做过多介绍

下面介绍它们的容量和访问速度

容量:硬盘 > 内存 >> CPU

访问速度:CPU >> 内存 > 硬盘

2.cpu基本情况 

我们都知道cpu是一个计算机的灵魂,下面我们也来介绍一点点关于cpu的知识

一谈到cpu,可能有些男同胞就要坐不住了

A:小米今年又首发了8gen3,我直接冲

B:我都用上4090了,怎么说开一把

很多同学都对这些cpu"很有见解",那么它们有什么区别呢,为什么手机和电脑的cpu不能使用一样的呢??

首先,家用pc或者是服务器大家熟知的肯定是amd,intel

手机上大家熟知的可能就是苹果,高通等等

这里家用pc和服务器使用的cpu就是x86架构的,性能就强一点

这里手机使用的就是ARM架构的,为了节省电量,保持续航,性能就没那么强

不同的cpu它们的架构就可能不同,架构不同支持的指令集可能就不同,指令集不同,支持的机器语言/汇编语言可能就不同,这样就可能导致不兼容问题,比如苹果刚出来那会很多从Windos转mac机器的就会发现很多东西不兼容导致很多问题.

小例子

这里很多人可能好奇这里的cpu指令是啥,咱们可以暂时理解为是一些二进制的指令,后续再做介绍,我们这里可以跟大家掰扯掰扯外挂式怎么操作的,其实外挂的原理也是一个程序,需要通过这个程序对游戏的那个程序产生一些影响.假设你现在正在运行csgo游戏程序,在运行加载的过程中,很多应用数据和逻辑代码就会被加载到内存中,这个时候外挂程序就将逻辑给修改了,比如修改了光线的逻辑判定,这里你就可以透视了等等...

cpu是怎么构成的?

门电路 -- 半加器 -- 全加器 -- 加法器 -- ALU计算器 -- CPU

即使你不了解这些设备,你也要知道这些内存硬盘这些重要的设备是由门电路所构成的

而门电路又是由一个一个晶体管构成的,之所以现在这些设备那么厉害,也是因为现在的工艺能使得这些东西足够小,比如现在的4nm工艺,其实这个东西越小,就说明它的集成程度也就越高,对应的算力也就越来越强.

但是这个cpu能无限小吗???

答案是否定的,因为当一个物体足够小的时候,经典物理学就已经失效了,我们这个时候就要考虑量子力学的维度了!

那么能不能把cpu搞大一点??

其实也做不到,因为一旦把cpu搞大了,这样良品率就会降低,这样加工的经济损失也就会很大.

如何解决??

这里intel给出了一个解决方案,"多核cpu",相信大家并不陌生,你们的电脑手机等都是多核的cpu.相当于本来一个人也一个人干,现在好多人一起干活,也就更快了(前提是软件得配合)

现在劳动力也有了,也需要软件将任务合理分配给多个cpu,这就引入了并发编程的概念.

.

能不能让一个cpu核心当成两个用??(我们的这个信息可以在任务管理器里查看到)

现在也可以,有一个超线程技术,就可以让cpu一个顶俩

那有人说了,我的为啥不是两倍的关系呢??

这是因为intel在后面引入了大小核的技术,大核带有超线程技术,小核就没有了

但是这也不是评判cpu的好坏的唯一参数,有可能你核心确实很多,但是单核频率并不高,性能也就没那么强.

同架构下,cpu频率越高越好

这里我们还注意到一个参数:cpu的速度

其实就是cpu核心工作的速度,1GHZ大概就是十亿次"时钟周期",我们也可以近似的认为一秒钟cpu执行了十亿次指令,像这里一秒钟就是执行25.7亿次指令..

除此之外,睿频也可以体现一个cpu的综合实力

CPU的频率会随着任务的多少动态分配资源从而发生变化

所以衡量一个CPU性能也可以看基础频率(下限)和最大睿频(上限)...

3.指令  

下面我们再谈谈cpu一秒钟执行的那么多二进制指令,都是些什么

我们可以简单模拟一下cpu执行指令的过程

首先我们引入一个简单的指令表

默认情况下,cpu执行指令是顺序执行的,除非遇到跳转命令...

指令(instruction)功能说明4位 opcode操作的地址或者寄存器
LOAD_A从 RAM 的指定地址,将
数据加载到 A 寄存器
00104 位 RAM 地址
LOAD_B从 RAM 的指定地址,将
数据加载到 B 寄存器
00014 位 RAM 地址
STORE_A将数据从 A 寄存器写入
RAM 的指定地址
01004 位 RAM 地址
ADD计算两个指定寄存器的
数据的和,并将结果放
入第二个寄存器
10002 位的寄存器 ID
2 位的寄存器 ID

假设我们执行这样一段指令

1.00101110

分为opcode和操作的地址

opcode就是0010 也就是 将14号地址的数据加载到a寄存器

此时a里面就存了 00000011

2.00011111

0001 1111

向b寄存器加载15号地址的数据

b:00001110

3.10000100

1000 0100

就是将两个寄存器的和放到后面一个寄存器中

此时a是000000011 b是00001110 加起来就是 00010001

最后放到A寄存器中,因为后面的操作数是0100后面是00,00是A寄存器

4.01001101

0100 1101

就是将a寄存器里的数据写入1101的内存地址处

这里13号地址就写成了 0001 0001

4.CPU小总结

1.cpu 要执行的指令,是在内存中的(冯诺依曼体系结构,基本设定,是让存储和执行单元解耦)

2.cpu要想执行指令,就得去没存中取指令,再解析指令,再执行指令

3.取指令需要从内存中读取指令到cpu的寄存器中,取指令相对来说是非常耗时间的,因为读取内存操作相比于cpu执行的操作来说,开销要大得多.(这就引进了流水线,缓存来缓和他们之间的速度差)

4.cpu解析指令的时候,就需要使用'指令表',不同架构的cpu指令表不同,指令表是写死到cpu里的

5.指令在执行的时候,会带有一些操作数,不同的指令,操作数个数的含义都有所不同

6.cpu的主频可以近似看做一秒钟cpu执行的指令条数

5.操作系统 

这里我首先要说明,操作系统是一个软件!!!

操作系统主要负责:

1.给软件一个良好的运行时环境

2.管理好不同的硬件设备

四个字概括他的功能就是:抽象,封装

我们知道JVM又是对操作系统的抽象封装,所以最终的结果就是我们可以使用JVM提供的api来操作不同的系统,来完成编程.

话又说回来,操作系统也是来应对不同的厂商设计的不同的硬件设备,他站出来,管理不同的硬件设备,给软件提供一些系统api,这样我们写的代码也就是无需面向硬件设备来编程,而是直接调用操作系统提供的api即可,我们也能使用这些api来完成(多线程编程,网络编程等等)

6.进程/任务

进程就是操作系统提供的一种"软件资源".

我们现在使用的系统其实就是属于多任务的操作系统

多任务操作系统,也就是同一时刻可以运行多个任务,这里我们可以打开任务管理器看看,就可以看到我们现在正在运行的任务

与之对应的也就是单任务操作系统,,没有后台执行,向执行这个任务就必须退出上一个任务.这样是非常不方便的,所以现在我们使用的就是多任务的系统.

对于多任务的操作系统,进程的概念就显得尤为重要,每个任务在执行的过程中,就会消耗一定的硬件资源,也就是每个进程在运行的时候都是会消耗硬件资源的,换而言之,进程就是操作系统分配资源的基本单位.

以下表述都是简化版本的

操作系统是如何管理进程的??

1.先描述清楚一个进程(使用类/结构体这样的形式来描述)

表示进程的结构体称为PCB(Process Control Block)

PCB是操作系统学科上的通用概念

在linux上PCB表示为一个叫struct task_struct{}的结构体

2.再进行管理(使用一定的数据结构,将这些进程管理起来)

在linux中使用的是链表将这些结构体管理起来的

当我们看到任务管理器这些进程的时候,其实系统内部就在遍历这个链表,并且打印出来每个节点的相关信息.

如果多运行一个进程,就会出现一个新的PCB,添加到链表上,同理退出也需要删除这个PCB,并且释放资源

注:程序崩溃,操作系统并不一定会崩溃,其实是相当于程序执行过程中,抛出了一些异常,通常系统会使用"try-catch"的方式捕获异常.但是有些程序可能是带有驱动的,实在操作系统的内核中运行的,出现问题可能就会导致操作系统直接蓝屏或者卡死

PCB

这里介绍一下pcb的一些重要的参数

1.pid :此时会通过一个不重复的整数来去问各个进程,系统会保证每个进程的pid都是不同的.

比如要结束一个任务,任务管理器就会获取你选中的pid,调用一个系统api,传入pid为参数,进而杀死进程.

2.内存指针:内存指针是描述说你这个进程都能使用哪些内存的,一个进程跑起来的时候,需要有指令和数据,这些资源都是先加载到内存中去的.进程也需要知道哪里是指令,哪里是数据.指令和数据都是在进程跑起来之间加载到内存中去的.

3.文件操作符表:描述了一个进程所涉及到的硬盘资源

我们的进程其实经常要访问硬盘这样的硬件设备,操作系统对硬盘进行了"封装"操作,使得其是以文件的形式展示的.这里的文件操作符表其实是一个数组,里面存放的是结构体指针,指向对应的需要访问的硬盘资源文件的结构体

这里我们都知道内存硬盘这些在pcb中都好描述,那么CPU呢,下面我们接着说,一个进程消耗CPU资源是什么意思呢?就是一个cpu可能是单核的,也可能是多核的,每个核心同一时间只能执行一个指令,那么假如我是16核的cpu,我现在同时进行20个进程,不能满足一对一的关系了怎么办??

这里其实就引出了分时复用的概念(并发),也就是多个进程分别进行,你执行一下我执行一下,这样只要速度足够快,人眼是分辨不出来是否是"同时的".

再举一个场景,现在有四个核心,4个进程,就可以实现并行执行,这个才是真正意义上的同时进行,现在的计算机往往是分时复用+并行执行一块使用的,主要还是看系统如何调度

4.状态

状态是描述某个进程是否可以在cpu上去执行,有的时候可能是不是不太方便去执行...

这里只说两个状态(其实有很多)

就绪状态:随时准备好去cpu上执行

阻塞状态:此时不应该去调度这个进程(比如此时在进行等待I/O,控制台的输入等等)

5.优先级

多个进程在等待系统调度,其中这些进程调度的先后关系是可以设置的

比如可以通过系统api来设置

6.记账信息

针对每个进程,占用了多少cpu时间进行一个统计,会根据统计来调整调度的策略来避免有进程使用不上cpu的资源

后续还有接着本文的补充,希望大家多多支持 

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

2023年腾讯云服务器限时特惠,2023年腾讯云服务器最新优惠汇总

亲爱的朋友们,如果你正在考虑购买腾讯云服务器,那么你一定需要了解近期腾讯云服务器的限时特惠活动。本文将为你提供2023年腾讯云服务器的最新优惠汇总,并详细介绍几款值得购买的优惠云服务器。 首先为大家介绍的是轻量2核2G3M服务器&#x…

Web前端—移动Web第一天(平面转换、渐变、综合案例--播客网页设计)

版本说明 当前版本号[20231117]。 版本修改说明20231117初版 目录 文章目录 版本说明目录移动 Web 第一天01-平面转换简介示例 平移定位居中案例-双开门旋转转换原点案例-时钟多重转换缩放案例-播放特效倾斜 02-渐变线性渐变案例-产品展示径向渐变 03-综合案例导航-频道箭头…

openssl1.0.2版本Windows安装问题

之前安装过1.1版本,Windows环境下C 安装OpenSSL库 源码编译及使用(VS2019)_vs2019安装openssl_肥宝Fable的博客-CSDN博客 后来发现linux编译不过,以为是版本问题,相差太大,所以降一下版本,以免…

2024年山东省职业院校技能大赛中职组“网络安全”赛项竞赛试题-B

2024年山东省职业院校技能大赛中职组 “网络安全”赛项竞赛试题-B 一、竞赛时间 总计:360分钟 二、竞赛阶段 竞赛阶段 任务阶段 竞赛任务 竞赛时间 分值 A、B模块 A-1 登录安全加固 180分钟 200分 A-2 本地安全策略设置 A-3 流量完整性保护 A-4 …

el-table固定表头(设置height)出现内容过多时不能滚动问题

主要原因是el-table没有div包裹 解决&#xff1a;加一个div并设置其高度和overflow 我自己的主要代码 <div class"contentTable"><el-tableref"table":data"tableData"striperow-dblclick"onRowDblclick"height"100%&q…

WPF创建自定义控件编译通过但是找不到资源

报错&#xff1a; 原因: 路径写错了&#xff1a; 不是这样&#xff1a; Source"pack://application:,,,/Controls/Styles/xTabControl.xaml" 而是这样&#xff1a; Source"pack://application:,,,/项目名;component/Controls/Styles/xTabControl.xaml …

给openlab搭建web网站

网站需求&#xff1a; 1、基于域名 www.openlab.com 可以访问网站内容为 welcome to openlab!!! 2、给该公司创建三个子界面分别显示学生信息&#xff0c;教学资料和缴费网站 1&#xff09;基于 www.openlab.com/student 网站访问学生信息 2&#xff09;基于 www.openlab.com/…

Kafka学习笔记(二)

目录 第3章 Kafka架构深入3.3 Kafka消费者3.3.1 消费方式3.3.2 分区分配策略3.3.3 offset的维护 3.4 Kafka高效读写数据3.5 Zookeeper在Kafka中的作用3.6 Kafka事务3.6.1 Producer事务3.6.2 Consumer事务&#xff08;精准一次性消费&#xff09; 第4章 Kafka API4.1 Producer A…

PyTorch

正常界面 创建环境 conda create -n env_test python3.6进入环境 conda activate env_testpycharm中&#xff0c;创建项目&#xff0c;选择环境

删除链表的倒数第N个结点(双指针)

19. 删除链表的倒数第 N 个结点 - 力扣&#xff08;LeetCode&#xff09; 题目描述 给你一个链表&#xff0c;删除链表的倒数第 n 个结点&#xff0c;并且返回链表的头结点。 样例输入 输入&#xff1a;head [1,2,3,4,5], n 2 输出&#xff1a;[1,2,3,5]示例 2&#xff1…

微电影分销付费短剧小程序开发

微电影系统分销管理付费软件是一款面向微电影制作公司和影视产业的付费软件&#xff0c;它的出现旨在帮助微电影制作公司和影视产业实现分销管理&#xff0c;提高产业的效率和竞争力。本文将介绍微电影系统分销管理付费软件的背景、特点和开发方法。 一、背景 微电影作…

红黑树的插入与验证

红黑树&#xff0c;是一种二叉搜索树&#xff0c;但在每个结点上增加一个存储位表示结点的颜色&#xff0c;可以是Red或 Black。 通过对任何一条从根到叶子的路径上各个结点着色方式的限制&#xff0c;红黑树确保没有一条路 径会比其他路径长出俩倍&#xff0c;因而是接近平衡的…

搭建大型分布式服务(三十六)SpringBoot 零代码方式整合多个kafka数据源

系列文章目录 文章目录 系列文章目录前言一、本文要点二、开发环境三、创建项目四、测试一下五、小结 前言 让我们来看一下网上是怎样使用SpringBoot整合kafka数据源的&#xff0c;都存在哪些痛点&#xff1f; 痛点一&#xff1a; 手撸kafka配置代码&#xff0c;各种硬编码&a…

一键免费去除视频水印和字幕的AI工具

最近有学员经常让我分享好用的智能抹除视频水印字幕AI工具&#xff0c;今天就给大家分享一个我经常用到的这款工具——腾讯智影&#xff0c;这个平台提供的智能抹除功能&#xff0c;借助这个工具我们可以将视频中不需要的字幕或者水印删除掉。 不过这款工具每天有三次免费次数…

暖阳脚本_ 定制企业软件开发的4个趋势:AI、RPA、云应用、边缘计算

根据 Statista 的统计数据显示&#xff0c;企业级软件市场在全球范围内占据了领先地位&#xff0c;预测到2028年&#xff0c;市场规模将接近3760亿美元。企业应用软件市场的稳健增长&#xff0c;甚至在经济不景气的时候也能持续&#xff0c;这充分表明软件解决方案对于提升企业…

【Linux】第十八站:进程等待

文章目录 一、进程等待的必要性1.进程等待是什么2.进程等待的必要性3.为什么要进程等待呢&#xff1f; 二、进程等待的方法1.问题2.wait3.waitpid4.status的原理5.等待失败6.与status有关的两个宏7.options 一、进程等待的必要性 1.进程等待是什么 通过系统调用wait/waitpid&a…

在listener.ora配置文件中配置listener 1527的监听并且使用tnsnames连接测试

文章目录 前言&#xff1a;一、命令语句实现1、监听介绍2、编辑 listener.ora 文件&#xff1a;寻找配置文件对配置文件进行配置 3、重启监听4、配置TNS 二、图形化界面实现1、listener.ora文件配置2、tnsnames.ora文件配置 三、测试连接 前言&#xff1a; 命令实现和图形化实…

某60区块链安全之51%攻击实战学习记录

区块链安全 文章目录 区块链安全51%攻击实战实验目的实验环境实验工具实验原理攻击过程 51%攻击实战 实验目的 1.理解并掌握区块链基本概念及区块链原理 2.理解区块链分又问题 3.理解掌握区块链51%算力攻击原理与利用 4.找到题目漏洞进行分析并形成利用 实验环境 1.Ubuntu1…

Neo4j安装(Docker中安装Neo4j)

天行健&#xff0c;君子以自强不息&#xff1b;地势坤&#xff0c;君子以厚德载物。 每个人都有惰性&#xff0c;但不断学习是好好生活的根本&#xff0c;共勉&#xff01; 文章均为学习整理笔记&#xff0c;分享记录为主&#xff0c;如有错误请指正&#xff0c;共同学习进步。…

Android File Transfer(安卓文件传输工具)

Android File Transfer 是一款安卓文件传输工&#xff0c;它允许在Mac操作系统和Android设备之间进行文件传输。 该软件通过USB连接将文件从Mac电脑传输到连接的Android设备&#xff0c;或者反过来从Android设备传输文件到Mac电脑。这包括照片、视频、音乐、文档和其他文件类型…