【JavaEE精炼宝库】计算机是如何工作的

目录

前言:

一、冯诺依曼体系

二、CPU基本知识

2.1 硬盘|内存|CPU关系:

2.2 指令:

2.3 CPU是如何执行指令的(重点):

2.4 小结:

三、编程语言

3.1 程序:

3.2 编程语言发展(了解):

四、操作系统

五、进程

5.1 进程的概念:

5.2 进程控制块抽象(Process Control Block):

5.2.1 PCB的核心属性:

5.2.2 操作系统管理进程:

5.3 并行与并发的区别:

六、总结


前言:

今天我们终于来到了JavaEE的舞台,在这之前我们学习了JavaSE,数据结构和数据库。接下来的JavaEE就正式宣告我们对后端的学习踏出了一大步,计算机是如何工作的内容是学习JavaEE的内功也可是说是前置知识,学习它有利用我们后续的学习,所以写下了这篇博客希望可以帮助到您。

现在的计算机大体分成以下几个大类:

• 终端设备(笔记本,台式机,手机.....)

• 服务器

• 嵌入式设备

上面的三个大类都遵守冯诺依曼体系结构

一、冯诺依曼体系

现代的计算机,基本都遵守冯诺依曼体系结构。

• CPU中央处理器:进行算术运算逻辑判断

• 存储器:分为外存和内存,用于存储数据(使用二进制方式存储)。

• 输入设备:用户给计算机发号施令的设备。

• 输出设备:计算机给用户汇报结果的设备。

二、CPU基本知识

2.1 硬盘|内存|CPU关系:

• 针对存储空间:

硬盘 > 内存 >> CPU

• 针对数据访问速度:

CPU >> 内存 > 硬盘

• 针对价格:

CPU >> 内存 > 硬盘

2.2 指令:

• 指令概念:指导CPU进行工作的命令(可以近似理解成CPU提供给程序员的API),主要有操作码+被操作数组成。

其中操作码用来表示要做什么动作,被操作数是本条指令要操作的数据,可能是内存地址,也可能是寄存器编号等。

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

下面我将给出一张简单的指令表(大体都是这样的),如下图:

2.3 CPU是如何执行指令的(重点):

所谓的指令都是要先加载到内存中,然后才能被CPU读取并执行。比如一个Java 程序写出来就是一个.java源代码文件。编译得到.class 二进制文件(此时还是在硬盘上),运行程序的时候,jvm 就会把这个.class 加载到内存中,再进一步的翻译成 CPU 能识别的二进制指令。

冯诺依曼体系结构规定:

一个程序中指令和依赖的数据都是要在存储器中保存的,CPU 如果需要执行都是要自动的从存储器中读取到对应的指令的。

• 寄存器:是 CPU 上的一个模块。

• 存储器:是 内存 + 硬盘。

因此 CPU 执行程序大致经历下面三个阶段:

• 读指令:把内存中的指令数据,读取到 CPU 的寄存器(CPU上也能存储数据,存储数据的模块称为 ”寄存器“ 速度比内存更快,但是存储空间跟小且更贵)中。

• 解析指令:理解当前指令要做啥。

• 执行指令:运行指令。

上述的这三个阶段是”简化版“,实际的 CPU 会更复杂。这些内容是计算机执行程序的基本过程,对于理解计算机可以说是非常有意义,虽然面试一般不会直接考这个。

2.4 小结:

• CPU中的PC寄存器,是决定CPU要执行哪条指令的关键。

• 指令是由动作 + 操作对象组成。

• CPU眼中只有指令,没有其他的概念。

三、编程语言

3.1 程序:

所谓程序,就是⼀组指令以及这组指令要处理的数据。狭义上来说,程序对我们来说,通常表现为一组文件。

• 程序 = 指令 + 指令要处理的数据。

3.2 编程语言发展(了解):

为了提升编程效率,最早创造了汇编语言的概念。其实汇编语言和机器语言(也就是指令)直接是完全⼀⼀对应的,只是相对于0、1这些数字,发明了⼀些帮助人类记忆和理解的符号将其对应起来,也就是我们上⾯看到的类似LOAD_A、LOAD_B等。程序员完成编程之后,需要使用汇编器 (assembler)将汇编语言翻译成机器语言。

虽然汇编降低了程序员的记忆成本,但要求程序还是必须掌握计算机硬件的所有知识,而且随着计算机厂商越来越多,⼀次编写的程序往往只使用于⼀类计算机。这个是远远不够的,所以更为高级的语言诞生了,高级语言屏蔽了硬件细节,让程序员可以站在更高的层面上思考自己的业务。这里以C语言为例,程序员完成程序的编写之后,需要使用编译器(compiler)和连接器(linker)将程序翻译成汇编语言,再借助汇编器变成最终的机器语言。

借助封装的思想,我们学习编程变得越来越容易。不过有利则有弊,高度的抽象,导致很多的程序员把计算机视为⼀个黑箱,完全无法理解自己的程序是如何工作起来的,希望我们大家不要做这种程序员。

注意:高级语言的⼀条语句(Statement)往往对应很多条指令(Instruction)才能完成。

四、操作系统

操作系统是⼀组做计算机资源管理的软件的统称。目前常见的操作系统有:Windows系列、Unix系 列、Linux系列、OSX系列、Android系列、iOS系列、鸿蒙等。

• 操作系统的定位:

操作系统的两个基本功能:

1. 防止硬件被应用程序滥用。

2. 向应用程序提供简单⼀致的机制来控制复杂而又通常大相径庭的低级硬件设备。

五、进程

5.1 进程的概念:

每个应用程序运行于现代操作系统之上时,操作系统会提供⼀种抽象,好像系统上只有这个程序在运行,所有的硬件资源都被这个程序在使用。这种假象是通过抽象了⼀个进程的概念来完成的,进程可以说是计算机科学中最重要和最成功的概念之一。

进程是操作系统对⼀个正在运行的程序的⼀种抽象,换言之,可以把进程看做程序的⼀次运行过程。同时,在操作系统内部,进程又是操作系统进行资源分配的基本单位。

除了上述自己运行的程序时进程之外,还有一些系统自带的(对于我们系统能够稳定运行有很重要的意义)。

5.2 进程控制块抽象(Process Control Block):

简写:PCB

计算机内部要管理任何现实事物,都需要将其抽象成⼀组有关联的、互为⼀体的数据。在Java语言中,我们可以通过类/对象来描述这⼀特征。

// 以下代码是 Java 代码的伪码形式,重在说明,⽆法直接运⾏ 
class PCB {
// 进程的唯⼀标识 —— pid; 
// 进程关联的程序信息,例如哪个程序,加载到内存中的区域等 
// 分配给该资源使⽤的各个资源 
// 进度调度信息(留待下⾯讲解) 
}

在操作系统中,通常使用 PCB 这样的数据结构来描述进程。

5.2.1 PCB的核心属性:

1. pid进程标识符:进程的id / 标识符。

2. 内存指针:该进程依赖的指令和数据都在哪里。

3. 文件描述符表:记录该进程打开了那些文件。

4. 状态,优先级,上下文,记账信息等。

5.2.2 操作系统管理进程:

• 先描述:通过 PCB 结构体来把进程的各种属性都表示出来。

• 再组织:通过链表数据结构把多个 PCB 串起来。

5.3 并行与并发的区别:

• 并行:在宏观时间上是同时执行,在微观时间上也是同时执行。

• 并发:在宏观时间上时同时执行,在微观时间上是串行执行(一条一条执行)。

由于操作系统内核内部管理好了,所以在编写应用程序的时候,无法干预,普通用户也感知不到,因此现在往往把 并行并发 统称为” 并发 “。把编写解决并发问题的程序称为”并发编程“。

六、总结

重点记住指令的操作流程进程的相关内容, 掌握好进程后,在下一章多线程我们会详细讲解进程和线程的区别和各自的优缺点,这也是面试的高频考点。

结语:

其实写博客不仅仅是为了教大家,同时这也有利于我巩固知识点,和做一个学习的总结,由于作者水平有限,对文章有任何问题还请指出,非常感谢。如果大家有所收获的话还请不要吝啬你们的点赞收藏和关注,这可以激励我写出更加优秀的文章。

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

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

相关文章

Java中HashSet、LinkedHashSet和TreeSet的底层原理

HashSet Java中的HashSet的底层原理主要基于哈希表(HashMap)来实现。以下是HashSet底层原理的简要总结: 数据结构: HashSet内部使用哈希表(实际上是一个HashMap的实例)来存储元素。哈希表由一个数组&#…

C#面:解释什么是WCF?目前最新的版本是多少

WCF(Windows Communication Foundation)是微软提供的一种用于构建分布式应用程序的框架。它提供了一种统一的编程模型,使开发人员能够使用多种通信协议(如HTTP、TCP、MSMQ等)在不同的平台上进行通信。 WCF的主要目标是…

线程传参、线程ID

传递临时对象作线程参数 #include<ioatream> #include<thread> using namespace std; void nowork(const int& a) {cout<<huyanluanyu<<endl; } int main() {int a677;thread newdozer(nowork,a);newdozer.detach(); } 向新创建的线程中传递参数…

【人工智能】博弈搜索(极小极大值、α-β剪枝)

1. 极小极大值算法 人工智能中 “博弈” 通常专指博弈论专家们称为有完整信息的、确定性的、轮流行动的、两个游戏者的零和游戏&#xff08;如国际象棋)。术语中&#xff0c;这是指在确定的、完全可观察的环境中两个 Agent必须轮流行动&#xff0c;在游戏结束时效用值总是相等并…

Python 进阶(十九):解析命令行参数(argparse 模块)

大家好&#xff0c;我是水滴~~ 当处理命令行参数时&#xff0c;Python 的 argparse 模块是一个强大而灵活的工具。它提供了一个简单且一致的方式来定义命令行参数、选项和子命令&#xff0c;并帮助你解析和验证用户提供的输入。本教程将详细介绍 argparse 模块的使用方法和常见…

Ansys电力变压器解决方案

电力变压器设计挑战 目前面临的挑战&#xff1a; 1、磁场 • 非线性材料 • 涡流电流 • 磁场随时间的变化 • 瞬态激励源下的磁场变化 • 空间磁场分布 2、电场 • 介电常数的变化 • 电极的尺寸和形状 • 空间电场分布 变压器的两个类别 变压器可以分为两类进行F…

springboot项目中引入Xxl-Job并部署和使用

目录 模块划分 配置调度中心 配置执行器 添加执行器 写一个简单的定时任务 XxlJobHelper xxl-job是分布式任务调度平台&#xff0c;部署为独立的调度服务平台 github地址&#xff1a;xuxueli/xxl-job: A distributed task scheduling framework.&#xff08;分布式任务调度…

视频怎么去水印?这三款工具助你轻松搞定

在视频处理的过程中&#xff0c;水印常常成为我们的一大难题。它不仅影响了视频的美观度&#xff0c;还可能涉及版权问题。那么&#xff0c;如何高效去除视频中的水印呢&#xff1f;接下来&#xff0c;我将为大家推荐三款国内外备受好评的视频去水印工具&#xff1a;水印云、In…

Jmeter性能测试(五)

一、Jmeter参数化常用方式 1、CSV 数据文件设置 2、查询数据库(JDBC Connection Configuration) 二、CSV 数据文件设置 1、准备一个txt文件(不需要写表头&#xff0c;直接写你要用的数据就行了&#xff0c;多个字段用英文逗号隔开) 2、添加一个CSV 数据文件设置(放全局最上…

让《行列视》解放数据力量,提升业务洞察

在当今信息化浪潮下&#xff0c;数据已经成为企业发展的核心驱动力之一。如何更好地管理和利用数据&#xff0c;已成为企业发展过程中亟需解决的问题之一。而报表工具作为数据可视化和分析的利器&#xff0c;正逐渐受到企业的重视和青睐。 一、《行列视》作为报表工具的重要性…

RabbitMQ基础入门

初识MQ 微服务间通讯有同步和异步两种方式&#xff1a; 同步通讯&#xff1a;就像打电话&#xff0c;需要实时响应。 异步通讯&#xff1a;就像发邮件&#xff0c;不需要马上回复。 两种方式各有优劣&#xff0c;打电话可以立即得到响应&#xff0c;但是你却不能跟多个人同…

栈的2道面试题【有效的括号】【用栈实现队列】

栈的面试题&#xff1a; 1.有效的括号 题目&#xff1a; 有效的括号 给定一个只包括 (&#xff0c;)&#xff0c;{&#xff0c;}&#xff0c;[&#xff0c;] 的字符串 s &#xff0c;判断字符串是否有效。 有效字符串需满足&#xff1a; 左括号必须用相同类型的右括号闭合…

560. 和为 K 的子数组 974. 和可被 K 整除的子数组 【前缀和】

题目链接 ​​​​​​​974. 和可被 K 整除的子数组 560. 和为 K 的子数组 今天刷题的时候&#xff0c;刷了这两题&#xff0c;感觉挺有意思的。代码写起来挺简单的&#xff0c;但是思路和其中的细节以及涉及到的知识点确实让我挺意外的。这里写个博客解析一波&#xff0c;也是…

一个月速刷leetcodeHOT100 day02

今天的三道题 移动零 在双指针分组里的简单题 给定一个数组 nums&#xff0c;编写一个函数将所有 0 移动到数组的末尾&#xff0c;同时保持非零元素的相对顺序。 请注意 &#xff0c;必须在不复制数组的情况下原地对数组进行操作。 输入: nums [0,1,0,3,12] 输出: [1,3,12,0…

Python自动化下载指定公开页面文件

示例代码如下&#xff0c;但你拿到本地之需要做两件事才能运行 from selenium import webdriver from selenium.webdriver.chrome.service import Service from selenium.webdriver.common.by import By from selenium.webdriver.common.keys import Keys import time# 设置Se…

计算机组成原理(超详解!!) 第七节 中央处理器(上)

1.CPU的功能和组成 CPU的功能&#xff1a; 指令控制&#xff1a;程序的顺序控制。 操作控制&#xff1a;管理并产生每条指令的操作信号&#xff0c;并把它们送到相应部件&#xff0c;控制这些部件按要求进行动作。 时间控制&#xff1a;对各种操作实施…

MySQL表分区深入指南

MySQL的表分区功能允许将一个表的数据分散存储在多个物理子表中&#xff0c;但在逻辑上仍表现为一个单独的表。这可以帮助提高大型数据库表的查询和维护效率。本文将详细介绍如何在MySQL中实施和管理表分区&#xff0c;包括分区类型、创建分区表的步骤&#xff0c;以及分区表的…

Day_3

1. HttpClient HttpClient是Apache的一个子项目&#xff0c;是高效的、功能丰富的支持HTTP协议的客户端编程工具包 作用&#xff1a;发送HTTP请求&#xff0c; 接受相应数据 <dependency><groupId>org.apache.httpcomponents</groupId><artifactId>…

ES集群搭建、身份认证配置

虚机搭建 添加es用户 elasticsearch 默认不允许root用户启动&#xff0c;所以需要创建es用户 useradd elasticsearch passwd elasticsearch解压安装包 #解压es tar -xvzf elasticsearch-7.14.2-linux-x86_64.tar.gz将文件夹赋予es用户权限 #将文件夹赋予es用户权限 sudo c…

controlnet的preprocessor类型

GitHub - huggingface/controlnet_auxContribute to huggingface/controlnet_aux development by creating an account on GitHub.https://github.com/huggingface/controlnet_aux/https://huggingface.co/lllyasviel/sd_control_collection