JavaEE——计算机工作原理
冯诺依曼体系(VonNeumannArchitecture)
现代计算机,大多遵守冯诺依曼体系结构

CPU中央处理器:进行算术运算与逻辑判断
存储器:分为外存和内存,用于存储数据(使用二进制存储)
输入设备:用户给计算机发号施令的设备
输出设备:计算机给用户汇报结果的设备
针对存储空间:硬盘 > 内存 >> CPU
针对数据访问速度:CPU >> 内存 > 硬盘
CPU基本工作流程
指令(Instruction)
主要有操作码 + 操作数组成,其中操作码用来表示要做什么动作,操作数是本条指定要操作的数据,可能是内存地址,也可能是寄存器编号等
一个CPU能执行哪些指定,可以认为是CPU最初设计的时候,就已经确定好了,存在一个“表格”描述了都有哪些指令
下面是一个简化的指令表(Instruction Table):
| 指令(instruction) | 功能说明 | 4位 opcode | 操作的地址或者寄存器 |
| LOAD_A | 从 RAM 的指定地址,将数据加载到 A 寄存器 | 0010 | 4 位 RAM 地址 |
| LOAD_B | 从 RAM 的指定地址,将数据加载到 B寄存器 | 0001 | 4 位 RAM 地址 |
| STORE_A | 将数据从 A 寄存器写入RAM 的指定地址 | 0100 | 4 位 RAM 地址 |
| ADD | 计算两个指定寄存器的数据的和,并将结果放入第二个寄存器 | 1000 | 2 位的寄存器 ID 2 位的寄存器 ID |
tips:
AB名字是虚拟的,真实的cpu寄存器的名字,如:eax、ebx、esp、ebp....)
此处假设每个指令只有 8 bit ,实际一个指定很长
8 bit 的指令,分成两部分,前4 bit 是操作码表示指定是干啥的;后4 bit 是操作数(类似于参数)
执行指令的三个重要阶段
1. 取指令:cpu从内存中读取到指令内容到cpu内部(有专门的寄存器保存读到的指令)
2. 解析指令:识别出这个指令是干啥的,以及对应的功能和操作数
3. 执行指令
执行示例:
给一段内存空间,以及里面的数据

cpu中存在一个特殊的寄存器“程序计数器”,保存了接下来要从哪个内存位置来执行指令,本例可以认为程序计数器被设为0,接下来从0号内存地址开始执行指令,同时随着指令的执行,该处的值会自增更新(这是顺序执行的情况,若遇到“跳转类语句”(if、while、for、函数调用...)会被设为其他的值,本例不考虑)
1. 初始情况下,程序计数器是0值
a. 读取指令:00101110
b. 解析指令:

c. 执行指令:把14地址的内存数据读出来,放到寄存器A中

第一条指令执行完毕,系统自动将程序计数器中的值++,从0 -> 1
2. 执行地址为1的指令
a. 读取指令:00011111
b. 解析指令:0001 1111
查看指令表可知,该指令是LOAD_B,把1111地址上的数据读取到寄存器B中
c. 执行指令:把15地址的内存数据读取出来,放到寄存器B中

第二条指令执行完毕,系统自动将程序计数器中的值++,从1 -> 2
3. 执行地址为2的指令
a. 读取指令:100000100
b. 解析指令:

c. 执行指令:
将17的二进制存储到寄存器A中

第三条指令执行完毕,系统自动将程序计数器中的值++,从2 -> 3
4. 执行地址为3的指令
a. 读取指令:01001101
b. 解析指令:
查看指令表可知,该指令是STORE_A,将数据从A寄存器写入1101地址的内存中
c. 执行指令:

第四条指令执行完毕,系统自动将程序计数器中的值++,从3 -> 4
5. 执行地址为4的指令
a. 读取指令:00000000
b. 解析指令:程序执行结束
上例就是CPU完成 3 + 14 的过程
操作系统(OperatingSystem)
操作系统是⼀组做计算机资源管理的软件的统称。⽬前常⻅的操作系统有:Windows系列、Unix系 列、Linux系列、OSX系列、Android系列、iOS系列、鸿蒙等。
一个操作系统要做很多事,其中最重要的就是“管理”:
1. 管理不同的硬件设备:键盘、显示器、打印机、医疗设备...
2. 给软件提供稳定的运行环境,现代操作系统上要同时运行很多程序,希望这些程序之间不能相互干扰
操作系统 = 内核 + 配套的应用程序
对于操作系统内核来说,其包含的功能是非常多的,其中有一个功能和日常开发息息相关,那就是进程管理
进程/任务(Process/Task)
进程就是正在执行的应用程序,进程是操作系统进行资源分配的基本单位
由于一个系统上进程比较多,需要管理,分为两部分:
1. 描述:通过 结构体/类 ,把进程的各种属性表示出来(对于Linux操作系统来说,使用“PCB(继承控制块)”这样的结构体来描述进程信息
2. 组织:通过数据结构,把多个结构体穿起来,并进行增删查改操作(可以简单的认为,是通过链表的方式,把上述多个PCB串到一起,实际情况会更复杂)
PCB中的关键信息
1. PID进程的标识符
同一时刻,一个机器上的多个进程之间,PID是唯一的,不会重复的,系统内部很多操作都是通过PID找到对应的进程的

2. 内存指针(一组)
描述进程依赖的指令和数据都在内存的哪个区域
操作系统运行exe就会读取exe中的指令和数据,加载到内存中(侧面表示出,进程的执行需要一定的内存资源)
3. 文件描述符表(顺序表/数组)
描述了进程打开了哪些文件(对应到硬盘上的数据,侧面表示出,进程的执行,需要一定的硬盘资源)
进程中,打开了某个文件,就会在顺序表中添加一项
tip:进程的调度
操作系统进程调度的关键:分时复用
并发执行:只有一个核心的cpu,一会运行进程1,一会运行进程2,一会运行进程3...由于cpu运算速度非常快,使得切换速度也非常快,肉眼察觉不到,站在宏观角度(人的角度),同时执行,称为并发执行
并行执行:现在有了多核心的cpu,此时,每个核心和核心之间,微观上也能同时执行不同的进程,称为并行执行
并发和并行都是操作系统内核同意调度的,程序员/普通用户,感知不到
因此,平时把并发和并行统称为“并发”,对应的编程手法也成为并发编程
以下4点均属于进程的调度
4. 进程状态
就绪状态:随时可以被调度到cpu上执行指令
阻塞状态:无法调度到cpu上执行,之所以阻塞,是因为要做一些其他的工作,比如:IO操作(读写硬盘/读写网卡...)
像C中的scanf和Java中的Scanner执行到这样的语句都会发生阻塞
除了上两种状态,进程还有其他的状态,此处不展开
5. 进程优先级
根据进程情况,给与相应的优先级
6. 进程的上下文
分时复用,一个进程执行一会之后,就从cpu上调度走,过一段时间,会调度回cpu,沿着上次执行的结果继续往后执行,将上次执行的中间结果(各种cpu寄存器中的值)保存起来,以备下次使用,此为进程的上下文
7. 进程的记账信息
在优先级的加持下,使得不同进程吃到的资源擦会议越来越大,操作系统统计每个进程在cpu上执行的时间,根据这个来进一步的调整调度的策略
以上7中属性相互配合,共同构成了进程调度的核心逻辑
上述的调度过程均为系统内核负责完成
相关文章:
JavaEE——计算机工作原理
冯诺依曼体系(VonNeumannArchitecture) 现代计算机,大多遵守冯诺依曼体系结构 CPU中央处理器:进行算术运算与逻辑判断 存储器:分为外存和内存,用于存储数据(使用二进制存储) 输入…...
并发、多线程和HTTP连接之间有什么关系?
一、并发的概念 并发是系统同时处理多个任务或事件的能力。在计算中,这意味着系统能够在同一时间段内处理多个任务,而不是严格按照顺序一个接一个地执行它们。并发提高了系统的效率和资源利用率,从而更好地满足用户的需求。在现代应用程序中&…...
展开说说:Android服务之startService源码解析
通过上一篇文章我们掌握了Android四种的基本使用,本篇从源码层面总结一下startService的执行过程。 本文依然按着是什么?有什么?怎么用?啥原理?的步骤来分析。 1、是什么 上一篇总结了“Service是Android系统中的四…...
Java + MySQL 实现存储完整 Json
Java MySQL 实现存储完整 Json 一、应用场景二、数据库配置三、后端代码配置1、maven 依赖2、实体类3、Service 实现类4、xml 文件 四、测试1、新增接口2、查询接口3、数据表内容 一、应用场景 将前端传过来的 Json 完整存储到 MySQL 中,涉及技术栈为 Java、MyBat…...
解决刚申请下来的AWS EC2,无法用finalshell连接的问题
在AWS的命令页面创建一个root用户 切换到root 模式,输入密码 su root 不知道密码的可以使用一下命令来设置root用户的密码: su passwd root 再切换到root用户 su 修改配置文件 输入 vim /etc/ssh/sshd_config进入文件,键入’i’ ,进行…...
如何在PD虚拟机中开启系统的嵌套虚拟化功能?pd虚拟机怎么用 Parallels Desktop 19 for Mac
PD虚拟机是一款可以在Mac电脑中运行Windows系统的应用软件。使用 Parallels Desktop for Mac 体验 macOS 和 Windows 的最优性能,解锁强大性能和无缝交互。 在ParallelsDesktop(PD虚拟机)中如何开启系统的嵌套虚拟化功能?下面我们…...
vue中实现button按钮的重复点击指令
// 注册一个全局自定义指令 v-debounce Vue.directive(debounce, {// 当被绑定的元素插入到 DOM 中时...inserted: function (el, binding) {let timer;el.addEventListener(click, () > {clearTimeout(timer);timer setTimeout(() > {binding.value(); // 调用传给指令…...
智能与伦理:Kimi与学术道德的和谐共舞
学境思源,一键生成论文初稿: AcademicIdeas - 学境思源AI论文写作 Kimi,由月之暗面科技有限公司开发的智能助手,擅长中英文对话,能处理多种文档和网页内容。在论文写作中,Kimi可提供资料查询、信息整理、语…...
mac有什么解压软件 mac怎么解压7z软件 苹果电脑好用的压缩软件有哪些
众所周知,macOS集成解压缩软件归档实用工具,可直接解压zip格式的压缩包。但对于其他比较常见的格式,诸如RAR、7z、TAR等,则无能为力,不过,我们可以选择大量第三方解压缩软件,帮助我们更好地完成…...
C语言_练习题
求最小公倍数 思路:假设两个数,5和7,那么最小至少也要7吧,所以先假定最小公倍数是两个数之间较大的,然后看7能不能同时整除5和7,不能就加1继续除 int GetLCM(int _num1, int _num2) {int max _num1>_n…...
Type-C接口快充取电技术的实现
Type-C接口快充取电技术的实现 Type-C接口快充取电技术主要通过USB PD(Power Delivery)协议实现。这种技术利用了Type-C接口的物理特性和PD协议的智能性,实现了高效、安全、快速的充电过程。具体实现过程如下: 接口连接与检测&a…...
压测工具---Ultron
压测工具:Ultron 类型:接口级和全链路 接口级 对于接口级别的压测我们可以进行 http接口压测、thrift压测、redis压测、kafka压测、DDMQ压测、MySQL压测等,选对对应的业务线、选择好压测执行的时间和轮数就可以执行压测操作了 全链路 对…...
Kubernetes 负载均衡器解决方案 MetalLB实践
Kubernetes 负载均衡解决方案 MetalLB实践 MetalLB 是一个用于在 Kubernetes 集群中提供外部 IP 地址的负载均衡器实现。 准备工作 1. 安装需知 安装 MetalLB 有一些前置条件: Kubernetesv1.13.0 或者更新的版本 集群中的 CNI 要能兼容 MetalLB,最新…...
力扣爆刷第159天之TOP100五连刷61-65(翻转单词、对称二叉树、遍历求和)
力扣爆刷第159天之TOP100五连刷61-65(翻转单词、对称二叉树、遍历求和) 文章目录 力扣爆刷第159天之TOP100五连刷61-65(翻转单词、对称二叉树、遍历求和)一、151. 反转字符串中的单词二、129. 求根节点到叶节点数字之和三、104. 二…...
(七)[重制]C++命名空间与标准模板库(STL)
引言 在专栏C教程的第六篇C中的结构体与联合体中,介绍了C中的结构体和联合体,包括它们的定义、初始化、内存布局和对齐,以及作为函数参数和返回值的应用。在专栏C教程的第七篇中,我们将深入了解C中的命名空间(nam…...
Elasticsearch:Runtime fields - 运行时字段(一)
目录 使用运行时字段带来的好处 激励 折衷 映射运行时字段 定义运行时字段而不使用脚本 忽略运行时字段上的脚本错误 更新和删除运行时字段 在搜索请求中定义运行时字段 创建使用其他运行时字段的运行时字段 运行时字段(runtime fields)是在查询…...
03:C语言运算符
C语言运算符 1、常见运算符2、赋值运算符3、判断运算符4、与- - 1、常见运算符 数学运算符号。常见数学运算符号,跟数学中理解相同 加号 - 减号 * 乘号 / 除号,相除以后的商 % 取余符号,相除以后余数是几 ()括号括起来优先级最高࿰…...
JAVA每日作业day7.4
ok了家人们今天学习了Date类和simpleDateformat类,话不多说我们一起看看吧 一.Date类 类 java.util.Date 表示特定的瞬间 ( 日期和时间 ) ,精确到毫秒。 1.2 Date类的构造方法 public Date(): 用来创建当前系统时间对应的日期对象。 public Date(long …...
WordPress网站违法关键词字过滤插件下载text-filter
插件下载地址:https://www.wpadmin.cn/2025.html 插件介绍 WordPress网站违法关键词字过滤插件text-filter由本站原创开发,支持中英文关键字自动替换成**号,可以通过自定义保存修改按钮增加“预设关键字”,也可以导入定义好的txt文本形式的关…...
ros1仿真导航机器人 navigation
仅为学习记录和一些自己的思考,不具有参考意义。 1navigation导航框架 2导航设置过程 (1)启动仿真环境 roslaunch why_simulation why_robocup.launch (2)启动move_base导航、amcl定位 roslaunch why_simulation nav…...
UE5 学习系列(二)用户操作界面及介绍
这篇博客是 UE5 学习系列博客的第二篇,在第一篇的基础上展开这篇内容。博客参考的 B 站视频资料和第一篇的链接如下: 【Note】:如果你已经完成安装等操作,可以只执行第一篇博客中 2. 新建一个空白游戏项目 章节操作,重…...
docker详细操作--未完待续
docker介绍 docker官网: Docker:加速容器应用程序开发 harbor官网:Harbor - Harbor 中文 使用docker加速器: Docker镜像极速下载服务 - 毫秒镜像 是什么 Docker 是一种开源的容器化平台,用于将应用程序及其依赖项(如库、运行时环…...
(二)TensorRT-LLM | 模型导出(v0.20.0rc3)
0. 概述 上一节 对安装和使用有个基本介绍。根据这个 issue 的描述,后续 TensorRT-LLM 团队可能更专注于更新和维护 pytorch backend。但 tensorrt backend 作为先前一直开发的工作,其中包含了大量可以学习的地方。本文主要看看它导出模型的部分&#x…...
实现弹窗随键盘上移居中
实现弹窗随键盘上移的核心思路 在Android中,可以通过监听键盘的显示和隐藏事件,动态调整弹窗的位置。关键点在于获取键盘高度,并计算剩余屏幕空间以重新定位弹窗。 // 在Activity或Fragment中设置键盘监听 val rootView findViewById<V…...
3-11单元格区域边界定位(End属性)学习笔记
返回一个Range 对象,只读。该对象代表包含源区域的区域上端下端左端右端的最后一个单元格。等同于按键 End 向上键(End(xlUp))、End向下键(End(xlDown))、End向左键(End(xlToLeft)End向右键(End(xlToRight)) 注意:它移动的位置必须是相连的有内容的单元格…...
Unity | AmplifyShaderEditor插件基础(第七集:平面波动shader)
目录 一、👋🏻前言 二、😈sinx波动的基本原理 三、😈波动起来 1.sinx节点介绍 2.vertexPosition 3.集成Vector3 a.节点Append b.连起来 4.波动起来 a.波动的原理 b.时间节点 c.sinx的处理 四、🌊波动优化…...
【生成模型】视频生成论文调研
工作清单 上游应用方向:控制、速度、时长、高动态、多主体驱动 类型工作基础模型WAN / WAN-VACE / HunyuanVideo控制条件轨迹控制ATI~镜头控制ReCamMaster~多主体驱动Phantom~音频驱动Let Them Talk: Audio-Driven Multi-Person Conversational Video Generation速…...
网站指纹识别
网站指纹识别 网站的最基本组成:服务器(操作系统)、中间件(web容器)、脚本语言、数据厍 为什么要了解这些?举个例子:发现了一个文件读取漏洞,我们需要读/etc/passwd,如…...
华为OD机试-最短木板长度-二分法(A卷,100分)
此题是一个最大化最小值的典型例题, 因为搜索范围是有界的,上界最大木板长度补充的全部木料长度,下界最小木板长度; 即left0,right10^6; 我们可以设置一个候选值x(mid),将木板的长度全部都补充到x,如果成功…...
土建施工员考试:建筑施工技术重点知识有哪些?
《管理实务》是土建施工员考试中侧重实操应用与管理能力的科目,核心考查施工组织、质量安全、进度成本等现场管理要点。以下是结合考试大纲与高频考点整理的重点内容,附学习方向和应试技巧: 一、施工组织与进度管理 核心目标: 规…...
