javaEE初阶————计算机是如何工作的

今天给大家带来javaEE初阶的知识,相信大家已经学完javaSE了吧,我们从本期博客开始为大家一一讲解,我们现在开始吧

我们作为程序员,大概了解这部分即可嗷

1,计算机的组成

祖师爷提出的:

冯诺依曼体系结构;

1,cpu

2,存储器

3,输入设备

4,输出设备

一台计算机由啥构成:

1,CPU:CPU是人类科技的巅峰制作,是电脑上最核心的部分,也叫中央处理器,计算机上进行各种逻辑判断,算数运算都是由CPU负责的,我们代码里写的内容都是CPU负责的。

2,主板:一个巨大的插座

3,内存:存储数据的主要模块

4,硬盘:存储数据的主要模块

这里玩意有啥区别呢,不知道大家学没学过数据库,我们使用数据库的目的是高效的将硬盘中持久化的数据拿出来,“持久化”,这个词描述的就是硬盘,内存的读写速度快,硬盘反之内存的造价也高,硬盘就要便宜很多,内存的存储空间小,硬盘的存储空间大,还有就是内存存储数据不是持久的,断电就没有了,硬盘不一样,断电也在

我们将内存和硬盘统称为存储器

5,电源

6,散热器

7,机箱

8,显卡

9,GPU

10,键盘.....................

显卡,GPU,CPU都是很相似的,都能进行算术运算和逻辑判断

CPU是“通用计算器”,而GPU是“专用计算器”,可能一些CPU能算的东西GPU不能算,但是GPU专用计算的赛道,就远远比CPU要快了。GPU就是用来处理,运算虽然简单,但是运算量非常大的场景比如:

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

2,挖矿(加密货币)

不知道大家听没听过比特币这个东西,一个可贵了,还有以太坊,和狗狗币等。挖矿就是赚佣金,比特币这样的区块链网络能够运行需要一些系统来辅助,你的电脑参与辅助工作,就能分一些比特币,区块链给你出题,你如果有好的显卡你就能抢到这个任务,赚取到佣金。

说完这些,冯诺依曼体结构中的输入设备和输出设备是啥呢,我们是在CPU视角上来讨论的,数据来到CPU我们叫做输入,从CPU走我们叫做输出。

触摸屏既是输入设备也是输出设备,还有网卡,上网的时候和网线连接的部分对应的硬件,也是集成在主板上的,下载数据的时候是输入,上传数据的时候是输出;

2,CPU

1>   cpu关心的指标

1,我们下面来讲讲现代CPU关心的指标,我们打开任务管理器,

看到这有一个速度和,基准速度,

基准速度也叫基频,默频,G是10亿,HZ是一秒钟多少次,3.20GHZ就是一秒能进行32亿次计算

速度又叫睿频和加速频率(有加速上限)

现代CPU的特性,动态的根据任务量变更自己的频率,

2>   cpu和核心

2,CPU和核心数

CPU核心数越多,CPU就越牛,(CPU干活效率越高)

我们通常说的8核,16线程,就8个物理核心,16个逻辑核心(能同时干16个活)

这里还有大小核,超线程的概念;

3>   CPU执行指令的过程

编程语言分为3大类

1,机器语言(二进制形式)

2,汇编语言

3,高级语言(java......)

CPU上都支持那些指令,每个指令怎么表示,有那些意义,在CPU被设计的时候就确定了;

我们可以根据指令表来查看CPU的每一步操作

这里是咱们简化的指令表,正常的指令表是64个bit,8个字节,

一条指令 = 4位操作码 + 4位操作数   (简化版);

RAM是内存,LOAD_A指令的功能是把内存数据提取到CPU寄存器A中,STORE_A指令是把A寄存器的数据写入到内存中,ADD指令是将两个寄存器的数据的和相加放到第二个寄存器中,内存地址就理解为指针;

寄存器:

存储数据的模块,长在CPU身上的,CPU的寄存器,访问速度比内存还要快,存储空间也更小,造价也更高,寄存器主要在CPU执行指令进行各种运算的时候存储临时数据,起到一定的辅助作用;

 

CPU执行指令的过程

1,读取指令

2,解析指令(对照指令表,理解指令的含义)

3,执行指令

开始了嗷,

1)读取指令(从0地址开始执行)

00101110

2)解析指令

0010(opcode)     1110(操作数)

我们看到LOAD_A的opcode是0010,所以我们这一步的操作是将操作数读取到寄存器中,1110是14,14地址上的数是3

3)执行指令

此时CPU中的A寄存器就出现了数据3;

我们假设CPU是顺序执行指令表的

1)读取指令

00011111

2)解析指令

0001(opcode)       1111(操作数)

LOAD_B的opcode是0001,将操作数15的地址上的数读取到寄存器B中

3)执行指令

CPU

寄存器A:3

寄存器B:14

1)读取指令

10000100

2)解析指令

1000(opcode)        0100(操作数)

ADD的opcode, 01为B,00为A,两个寄存器的编号,数据相加,结果放到00中

3)执行指令

CPU:

A:17

B:14

1)读取指令

01001101

2)解析指令

0100(opcode)     1101(操作数)

0100是STORE_A的opcode,1101是13,

我们就要把寄存器中的数据存到地址为13的数据中

这样就把地址为13的数据改为我们刚刚的17了。

这就是模拟CPU进行加法的过程;

大家有没有听过一个东西,热补丁,这个就是在指令的层面实现的,我们在服务器遇到严重bug的时候,有时候我们有不能重启的需求,我们就需要指令来修复,因为服务器本神也是一段指令;

3,操作系统

1,简介

计算机中最重要的“软件”

不同的操作系统之间是不兼容的,一个软件在Linux能运行但是在Windows就不行了,但是我们java怎么说来着,一次运行,到处运行?还是啥来着,反正因为java的虚拟机,java给各种主流系统都开发了一个虚拟机,jvm牛批(后面再舔)哈哈哈哈哈。

我们来介绍主流的操作系统

Windows

Linux

Mac 

IOS

Android

还有不断完善的鸿蒙操作系统;

大家了解过驱动程序没有,我们有的时候买鼠标,一堆按键,刚拿回来是不生效的,我们会去官方下对应的东西,这个就是驱动程序,操作系统通过驱动程序间接来控制硬件,显卡也是一样;

操作系统就是一个搞管理的软件

1,管理各种硬件设备

2,为各种应用环境提供各种稳定的运行环境,这里我们就要引出进程了;

操作系统中的一个重要概念:进程(process)

一个运行起来的程序就是进程

这些打开了的,全都是进程

一个计算机可能有上百来个进程,那么操作系统是怎么去管理这些呢,

1,使用结构体来描绘出进程的属性,PCB进程控制块,一个非常大的结构体

2,把多个进程组织起来,用数据结构,比如链表啊之类的,来把进程一个一个串起来;

大概的流程就是

1)创建一个新的进程

创建PCB,初始PCB中的各个属性,把PCB加到链表上

2)查看进程表

遍历进程链表,取出链表上的每个元素,把关键信息显示到界面是上;

3)销毁进程

把这个进程的PCB在链表上找到,删除

大家有没有注意到一个问题,操作系统操作CPU来驱动各种程序,但是操作系统本身也是个程序呀,也就是一段指令,CPU不是去执行指令的吗,那到底是CPU操作操作系统还是操作系统操作CPU呢,其实还是操作系统操作CPU,我们的电脑在打开时,CPU醒了运行一些指令来唤醒操作系统,操作系统在操作CPU进行更多的操作;

2,PCB的属性

进程是操作系统资源分配的基本单位

1,pid(进程的ID)

2,内存指针(一组指针)

3,文件描述符表

进程在运行的过程中会消耗内存分配,同时也会和硬盘去交互,硬盘是上的数据是以文件的形式来组织的,进程读取硬盘的文件的时候就会打开文件,我们会把这个文件的信息保存到文件描述符表中,表里的每一项,对应打开了哪个文件

进程的运行还会依赖到CPU,网卡等资源

4,状态

5,优先级

6,上下文

7,记账信息

我们把4,5,6,7统称为进程的调度

大家思考一个问题,我们早期的计算机是单进程的,在运行一个软件1,在想要运行软件2就要把软件1关掉,我们现在虽然引入了多进程的概念,但是一个电脑可能核心只有12个,那么上百个进程,12个核心怎么做到一起运行的呢,其实并没有,还记得计算机一秒能运算32亿甚至更多次吗,大家学没学过微分,我们在切换软件的时候,其实进程一直在交替的运行,先运行这个在运行那个,只不过是太快太快了,我们无法感知到,我们遇到过的卡顿,就是进程太多了,速度降下来了,我们感知到一点了,这样把单位时间分为很多份,第一份运行进程1的指令,第二份运行进程2的指令,超高速的切换,我们就管他叫分时复用

这里引出两个概念:
1,并发执行:

把一个CPU上,按分时复用,执行多个进程的方式称为“并发执行”

2,并行执行:

在多个CPU上,同时执行多个进程的方式就是“并行执行”

 一般并发执行和并行执行是同时存在的,我们可以把他俩统称为并发执行;

因为需要并发执行,操作系统需要快速的切换进程,也就是进程调度

4,进程状态

两个最典型的

1)就绪状态————CPU上随叫随到

2)阻塞状态————进程不适合在CPU上运行

5,进程的优先级

打游戏的时候,游戏的优先级一定会比qq,微信的高吧,这个后面在讲

6,进程的上下文

我们可能一个进程执行了一会就暂时不用了,那么他就失去了CPU,我们再使用的时候就能沿着上次的状态执行,CPU上的寄存器就存储了进程运行的“中间状态”

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

回复上下文:把PCB中的属性,填回寄存器中

7,进程中的记账信息

记录了你当前进程分配了多少资源,使用了多久,如果你好就没吃到资源了,还会给你这个进程分配一些资源

差不多啦,下期给大家带来多线程的知识!

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

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

相关文章

基于AI大模型的医院SOP优化:架构、实践与展望

一、引言 1.1 研究背景与意义 近年来,人工智能(AI)技术取得了迅猛发展,尤其是大模型的出现,为各个领域带来了革命性的变化。在医疗领域,AI 医疗大模型正逐渐崭露头角,展现出巨大的应用潜力。随着医疗数据的海量积累以及计算能力的大幅提升,AI 医疗大模型能够对复杂的…

【论文阅读-思维链的构造方法02】4.1.2 Automatic Construction-01

提示1:本篇博客中涉及4篇相关论文,预计阅读时间10分钟,望各位友友耐心阅读~ 提示2:本篇所有涉及的论文已打包发布,不需要任何积分即可下载,指路 --> 论文集下载地址 大模型技术-思维链CoT …

uniapp——微信小程序,从客户端会话选择文件

微信小程序选择文件 文章目录 微信小程序选择文件效果图选择文件返回数据格式 API文档: chooseMessageFile 微信小程序读取文件,请查看 效果图 选择文件 /*** description 从客户端会话选择文件* returns {String} 文件路径*/ const chooseFile () &g…

Android GameActivity(NativeActivity)读写文件

最近研究native android相关内容,其中最棘手的就是文件读写问题,最主要的是相关的文档很少。这里写下我所知道的方法。 由于本人使用的是Android14[arm64-v8a]版本的设备,能访问的路径相当有限,如果想要访问更多的路径,就不得不申…

YOLO11改进 | 卷积模块 | ECCV2024 小波卷积

秋招面试专栏推荐 :深度学习算法工程师面试问题总结【百面算法工程师】——点击即可跳转 💡💡💡本专栏所有程序均经过测试,可成功执行💡💡💡 本文给大家带来的教程是将YOLO11的Conv替…

从0开始的opencv之旅(1)cv::Mat的使用

目录 Mat 存储方法 创建一个指定像素方式的图像。 尽管我们完全可以把cv::Mat当作一个黑盒,但是笔者的建议是仍然要深入理解和学习cv::Mat自身的构造逻辑和存储原理,这样在查找问题,或者是遇到一些奇奇怪怪的图像显示问题的时候能够快速的想…

【Hadoop】Hadoop安全之Knox网关

目录 一、概述 2.1 knox介绍 2.2 版本信息 二、部署 三、验证Knox网关 3.1 Hdfs RESTFULL 3.2 HDFSUI 3.3 YARNUI 3.4 HBASEUI 一、概述 2.1 knox介绍 Apache Knox网关是一个用于与Apache Hadoop部署的REST api和ui交互的应用程序网关。Knox网关为所有与Apache Hadoop…

走方格(蓝桥杯2020年试题H)

【问题描述】在平面上有一些二维点阵。这些点的编号就像二维数组的编号一样,从上到下依次为第1~n行,从左到右依次为第1~m列,每个点可以用行号和列号表示。 现在有个人站在第1行第1列,他要走到第n行第m列,只能向右或者向…

uniapp Stripe 支付

引入 Stripe npm install stripe/stripe-js import { loadStripe } from stripe/stripe-js; Stripe 提供两种不同类型组件 Payment Element 和 Card Element:如果你使用的是 Payment Element,它是一个更高级别的组件,能够自动处理多种支…

Visual Studio 2022安装教程

1、下载网址 Visual Studio 2022 IDE安装网址借助 Visual Studio 设计,具有自动完成、构建、调试、测试功能的代码将与 Git 管理和云部署融为一体。https://visualstudio.microsoft.com/zh-hans/vs/ 点击图片所示 双击运行 2、安装 点击C桌面开发(右边…

论文笔记PhotoReg: Photometrically Registering 3D Gaussian Splatting Models

1.abstract 最近推出的3D高斯飞溅(3DGS),它用多达数百万个原始椭球体来描述场景,可以实时渲染。3DGS迅速声名鹊起。然而,一个关键的悬而未决的问题仍然存在:我们如何将多个3DG融合到一个连贯的模型中?解决这个问题将使…

数据结构(ing)

学习内容 指针 指针的定义: 指针是一种变量,它的值为另一个变量的地址,即内存地址。 指针在内存中也是要占据位置的。 指针类型: 指针的值用来存储内存地址,指针的类型表示该地址所指向的数据类型并告诉编译器如何解…

Synopsys软件基本使用方法

Synopsys软件基本使用方法 1 文件说明2 编译流程3 查看波形4 联合仿真 本文主要介绍Synopsys软件vcs、verdi的基本使用方法,相关文件可从 GitHub下载。 1 文件说明 创建verilog源文件add.v、mult.v、top.vmodule add (input signed [31:0] dina,input signed [3…

软件测试基础详解

🍅 点击文末小卡片,免费获取软件测试全套资料,资料在手,涨薪更快 “尽早的介入测试,遇到问题的解决成本就越低” 随着软件测试技术的发展,测试工作由原来单一的寻找缺陷逐渐发展成为预防缺陷,…

人工智能知识分享第六天-机器学习_​逻辑回归(Logistic Regression)

简介 在机器学习中,分类问题是一种常见的任务,目标是根据输入特征将数据点分配到不同的类别中。为了实现分类,我们需要训练一个分类器,该分类器能够根据输入数据的特征进行预测。 逻辑回归(Logistic Regression&…

OpenCV-Python实战(11)——边缘检测

一、Sobel 算子 通过 X 梯度核与 Y 梯度核求得图像在,水平与垂直方向的梯度。 img cv2.Sobel(src*,ddepth*,dx*,dy*,ksize*,scale*,delta*,borderType*)img:目标图像。 src:原始图像。 ddepth:目标图像深度,-1 代表…

Docker- Unable to find image “hello-world“locally

Docker- Unable to find image “hello-world“locally 文章目录 Docker- Unable to find image “hello-world“locally问题描述一. 切换镜像1. 编辑镜像源2. 切换镜像内容 二、 检查设置1、 重启dockers2、 检查配置是否生效3. Docker镜像源检查4. Dokcer执行测试 三、自定义…

【UE5 C++课程系列笔记】19——通过GConfig读写.ini文件

步骤 1. 新建一个Actor类,这里命名为“INIActor” 2. 新建一个配置文件“Test.ini” 添加一个自定义配置项 3. 接下来我们在“INIActor”类中获取并修改“CustomInt”的值。这里定义一个方法“GetINIVariable” 方法实现如下,其中第16行代码用于构建配…

互慧-急诊综合管理平台 ServicePage.aspx 任意文件读取漏洞复现

0x01 产品简介 互慧急诊急救快速联动平台,是用于管理门诊急诊病人的系统,主要包括门诊急诊业务和急诊物资管理两部分,其中门诊急诊业务主要包括院前急救、院内抢救、留观监护、绿色通道、预检分诊等;急诊物资管理包括急诊药品管理、急诊设备管理、抢救车管理、急救箱管理、…

【文献精读笔记】Explainability for Large Language Models: A Survey (大语言模型的可解释性综述)(五)

****非斜体正文为原文献内容(也包含笔者的补充),灰色块中是对文章细节的进一步详细解释! 五、 解释评估(Explanation Evaluation) 在前面的章节中,我们介绍了不同的解释技术和它们的用途&#…