当前位置: 首页 > news >正文

计算机是如何执行指令的

你好,我是 shengjk1,多年大厂经验,努力构建 通俗易懂的、好玩的编程语言教程。 欢迎关注!你会有如下收益:

  1. 了解大厂经验
  2. 拥有和大厂相匹配的技术等

希望看什么,评论或者私信告诉我!

文章目录

    • 一、计算机组成
    • 二、程序是如何加载的
    • 三、程序在计算机中如何执行


一、计算机组成

现在所说的计算机基本上都是冯诺依曼体系的计算机。其核心原理:

冯·诺依曼计算的核心思想是将程序指令和数据以二进制形式存储存储在同一存储器中,并使用相同的数据格式和处理方式来处理它们。这种存储程序的设计理念使得计算机能够以可编程的方式执行不同的任务,而不需要对硬件进行物理修改。

在冯·诺依曼计算中,计算机由以下几个主要组件组成:控制器、运算器、存储器、输入设备、输出设备。

存储器(Memory):用于存储程序指令和数据。存储器被划分为地址单元,每个单元存储一个字节的数据。程序和数据按照地址的顺序存储在存储器中,并通过地址来访问。算术逻辑单元(Arithmetic Logic Unit,ALU)用于执行算术和逻辑操作控制器(Controller):协调各个组件的操作,控制指令的执行和数据的传输。输入/输出设备(Input/Output Devices):用于与外部世界进行交互,例如键盘、鼠标、显示器、磁盘驱动器等。

二、程序是如何加载的

由 冯诺依曼体系,我们知道程序想要执行,必需先加载到计算机的内存中。首先来看一下程序加载过程。这里以 Java 程序为例。

在IDE或者文本编辑器中写 java 程序,如:

/**

  • @author shengjk1

  • @date 10/21/23
    */
    public class HelloWorld {
    public static void main(String[] args) {
    System.out.println(“HelloWorld!”);
    }
    }

    编译,编译成 Java 二进制的字节码

    javac HelloWorld.java

编译后的文件

加载 JVM 中并执行java HelloWorld

借助 JVM 的类加载器,将 HelloWorld.Class 加载到 JVM 中

JVM 的内存区域会分为两种:数据区和指令区

数据区包括:

堆(Heap):堆是 Java 程序运行时动态分配对象的区域。所有通过 new 关键字创建的对象都存储在堆中。堆是 JVM 中最大的一块内存区域,被所有线程共享。方法区(Method Area):方法区用于存储类的元数据信息,包括类的结构、常量池、静态变量、编译器优化后的代码等。方法区也被称为永久代(Permanent Generation)或元空间(Metaspace)。栈(Stack):栈用于存储方法执行时的局部变量、方法参数、方法调用和返回的信息。每个线程在运行时都有自己的栈,称为线程栈。栈的大小是固定的,并且栈中的数据是按照后进先出(LIFO)的顺序进行操作。本地方法栈(Native Method Stack):本地方法栈类似于栈,但用于执行本地方法(Native Method)的数据和调用信息。PC 寄存器(Program Counter Register):PC 寄存器存储着当前线程执行的字节码指令地址。当线程切换时,PC 寄存器的值会保存和恢复。

指令区包括:

指令区用于存储 Java 程序的字节码指令。字节码是 Java 程序的中间表示形式,由编译器生成。JVM 在指令区中解释和执行字节码指令。

如下:

三、程序在计算机中如何执行

程序计数器(Program Counter,PC)的初始化:JVM通过将程序计数器(PC)的值设置为程序的入口点( 通常就是main方法 )来初始化。程序计数器是一个特殊的寄存器,它存储下一条要执行的指令的地址。取指:CPU根据程序计数器中存储的地址,从存储器中获取下一条要执行的指令。译码:CPU对获取的指令进行解码,确定其操作类型和所需的操作数。操作数获取:如果指令需要操作数,CPU从存储器或寄存器中获取操作数的值。指令中的地址或寄存器标识符确定操作数的位置。执行:CPU根据指令的操作类型和操作数执行相应的操作。这可能涉及算术运算、逻辑运算、内存访问等。结果存储:执行操作后,CPU将结果存储在存储器或寄存器中,以供后续指令使用或输出到外部设备。更新程序计数器:CPU根据指令的执行情况更新程序计数器的值,以指示下一条要执行的指令的地址。重复执行:重复执行第2步到第7步,直到程序的所有指令都被执行完毕。这样,程序中的指令按照顺序逐条执行,实现了整个程序的功能。

相关文章:

计算机是如何执行指令的

你好,我是 shengjk1,多年大厂经验,努力构建 通俗易懂的、好玩的编程语言教程。 欢迎关注!你会有如下收益: 了解大厂经验拥有和大厂相匹配的技术等 希望看什么,评论或者私信告诉我! 文章目录 一…...

Jetson Orin NX L4T35.5.0平台相机stop导致系统死机问题调试

1. 环境 硬件:国产OrinNX套件 系统版本: L4T35.5.0 相机: SDI 相机,1080P50fps 2. 问题描述 移植驱动已经开始正常采集相机图像,但是会出现以下问题: 采集流程如下: (1)start SDI camera (2)gst-launch-1.0采集图像 gst-launch-1.0 v4l2src device=/dev/vide…...

【个人博客搭建】(18)使用Quartz.NET 定时备份数据库

Quartz.NET在系统主要承担的一些关键功能: 任务调度:Quartz.NET 允许开发人员创建、调度和管理定时任务,支持简单触发器和Cron表达式等多样化的触发策略。灵活性:Quartz.NET 提供了灵活的任务安排机制,不仅支持基于时间…...

【python】MVC架构

在Python中,Model-View-Controller (MVC) 是一种软件设计模式,常用于构建可维护性和可扩展性高的应用程序,尤其是在Web开发中。以下是 MVC 模式在 Python 中的组成部分和它们的主要职责: Model(模型)&…...

SVM单类异常值检测

SVM是一种广泛使用的分类器,通常用于二分类或多分类问题。然而,在异常点检测的场景中,我们通常会将数据视为一个类别(即正常数据点),并尝试找到那些与正常数据点显著不同的点(即异常点&#xff…...

前端动画总结

前端动画 一、css动画 transition 过渡 transition:transiton-property,transition-duration,transition-timing-function,transition-delay相关属性说明 属性默认值其他说明property过渡的属性all不是所有css属性都支持过渡duration动画完成时间0s单位是秒timing-functio…...

【源码阅读】 Golang中的database/sql库源码探究

文章目录 前言一、整体目录结构二、driver包1、驱动相关driver.Driver2、驱动连接:driver.Conn3、预处理结构:Stmt4、执行结果 driver.Result5、查询结果:driver.Rows6、driver.RowsAffected7、driver.Value8、Value定义转换相关 三、sql包1、…...

什么是容器微隔离 - 容器微隔离技术有哪些

如果您对容器安全有任何问题可以联系安全狗对您的容器进行安全防护。 容器微隔离是一种在容器化环境中实现安全隔离的技术。随着云计算和容器化技术的广泛应用,容器已成为企业IT架构中的重要组成部分。然而,随着容器数量的增加,容器之间的交…...

(成品论文22页)24深圳杯数学建模A题1-4问完整代码+参考论文重磅更新!!!!

论文如下: 基于三球定位的多个火箭残骸的准确定位 针对问题一:为了进行单个残骸的精确定位,确定单个火箭残骸发生音爆 时的精确位置和时间,本文基于三球定位模型,考虑到解的存在性和唯一性, 选取了四个监测…...

ThreeJs模拟工厂生产过程八

这节算是给这个车间场景收个尾,等了几天并没有人发设备模型给我,只能自己找了一个凑合用了。加载模型之前,首先要把货架上的料箱合并,以防加载模型之后因模型数量多出现卡顿,方法和之前介绍的合并传送带方法相同&#…...

[Unity实战]热更新如何预防过度裁剪

情景再现 假设你现在有一个游戏客户端,客户端只打包了入口场景,游戏场景都存放在了AB包。 你打的热更包里使用了协程中的waituntil修复游戏场景中空投补给资源加载时机问题,但是打出来的热更在真机跑报如下错误: TypeLoadExcep…...

任务修复实例(8)

Quest Name Counterattack! | 人马无双! Quest ID 4021 -- Adjust Conditions UPDATE world.conditions SET ConditionValue2 8, Comment Regthar Deathgate - On Quest State - Gossip Menu Option Available WHERE SourceTypeOrReferenceId 15 AND Source…...

torch.flatten(x, 1)”和“x.view(x.size(0), -1)”有什么区别?

这两个操作在 PyTorch 中都用于将张量展平为一维。它们的主要区别在于实现方式和适用情况: torch.flatten(x, 1): 这是一个函数调用,其中 x 是输入张量,1 是指定要展平的起始维度。此函数会将张量 x 从指定的起始维度开始展平&…...

达梦主从数据库实例恢复

测试环境:实时主备数据库 1、在节点1向测试表aaa插入数据 如图可见,会话139695153554808向aaa表插入了10000行数据。事务id460520。 2、提交前在另一个窗口kill掉dmserver进程。 3、查看节点2的数据库日志 上图可见,系统执行alter database…...

JAVA:jsp+springboot 配置maven兼容版本

Java17 maven依赖&#xff1a;如果中央库和其他镜像找不到包&#xff0c; 可以访问下面的网址找替代包 <!-- Maven Repository: Search/Browse/Explore (mvnrepository.com) -->spring-boot版本号3.2.51.无需配置驱动&#xff0c;有内置数据库驱动 2.能自动扫描配置类。b…...

【Docker】docker部署lnmp和搭建wordpress网站

环境准备 docker&#xff1a;192.168.67.30 虚拟机&#xff1a;4核4G systemctl stop firewalld systemctl disable firewalld setenforce 0 安装docker #安装依赖包 yum -y install yum-utils device-mapper-persistent-data lvm2 #设置阿里云镜像 yum-config-manager --add…...

C#装箱拆箱是怎么回事

代码如下&#xff1a; int i 123; object o i; // Boxing int j (int)o; // Unboxing 缺点&#xff1a; 当装箱和拆箱发生时&#xff0c;该技术允许将值类型视为对象。虽然非常有益&#xff0c;但它们会带来性能开销。值类型和引用类型之间的转换过多可能会导致垃圾回收…...

JavaEE 初阶篇-深入了解 Junit 单元测试框架和 Java 中的反射机制(使用反射做一个简易版框架)

&#x1f525;博客主页&#xff1a; 【小扳_-CSDN博客】 ❤感谢大家点赞&#x1f44d;收藏⭐评论✍ 文章目录 1.0 Junit 单元测试框架概述 1.1 使用 Junit 框架进行测试业务代码 1.2 Junit 单元测试框架的常用注解&#xff08;Junit 4.xxx 版本&#xff09; 2.0 反射概述 2.1 获…...

人力资源管理新视野:挖掘员工潜力,共筑卓越未来

在21世纪的商业环境中&#xff0c;企业的成功不再仅仅依赖于资本、技术和市场策略&#xff0c;而更多地依赖于其人力资源的有效管理。人力资源管理的新视野正致力于挖掘员工的潜力&#xff0c;为企业创造持续的价值&#xff0c;共筑卓越的未来。 一、员工潜力的挖掘 员工是企业…...

rust语言tokio库spawn, blocking_spawn等的使用

目录 tokio的spawn以及spawn_blocking的使用tokio::task::spawn方法解析tokio::task::spawn_blocking()方法解析 时间会遗忘一切 最后更新时间2024.04.29 tokio版本&#xff1a; tokio的spawn以及spawn_blocking的使用 tokio::task::spawn方法解析 tokio的实现原理以及源码…...

5年java开发经验总结面试题-内含完整答案

1、讲讲IO里面的常见类&#xff0c;字节流、字符流、接口、实现类、方法阻塞。 文件字节输入输出流 FileInputStream/FileOutputStream&#xff0c; 文件字符流 FileReader/FileWriter 包装流PrintStream/PrintWriter/Scanner 字符串输入输出流StringReader/StringWriter 转换流…...

在Windows和RV1126上部署ONNX肺部分割模型:一份OpenCV DNN与RKNN的完整对比实践

跨平台肺部分割模型部署实战&#xff1a;OpenCV DNN与RKNN技术选型指南 当医疗影像分析遇上边缘计算&#xff0c;开发者们常常面临一个关键抉择&#xff1a;如何在保证精度的前提下&#xff0c;将训练好的深度学习模型高效部署到不同计算平台&#xff1f;本文将以肺部分割模型为…...

nli-distilroberta-base代码实例:Python调用DistilRoBERTa实现Entailment识别

nli-distilroberta-base代码实例&#xff1a;Python调用DistilRoBERTa实现Entailment识别 1. 项目概述 自然语言推理(Natural Language Inference, NLI)是自然语言处理中的一项重要任务&#xff0c;用于判断两个句子之间的逻辑关系。nli-distilroberta-base是基于DistilRoBER…...

手把手教你用LVGL特殊符号打造炫酷UI界面

手把手教你用LVGL特殊符号打造炫酷UI界面 在嵌入式设备开发中&#xff0c;UI设计往往面临资源受限的挑战。LVGL&#xff08;Light and Versatile Graphics Library&#xff09;作为一款轻量级开源图形库&#xff0c;通过其丰富的特殊符号系统&#xff0c;让开发者能够在有限资…...

ai辅助stm32开发,向快马描述需求即可获得精准的f103c8t6引脚配置代码

最近在做一个基于STM32F103C8T6的小项目&#xff0c;需要用到UART、I2C、PWM、ADC和GPIO等多种外设。作为嵌入式开发新手&#xff0c;最头疼的就是引脚分配和初始化代码的编写。好在发现了InsCode(快马)平台的AI辅助开发功能&#xff0c;用自然语言描述需求就能得到专业的代码解…...

扩散模型实现:从环境搭建到图像生成的全流程指南

扩散模型实现&#xff1a;从环境搭建到图像生成的全流程指南 【免费下载链接】Diffusion-Models-pytorch Pytorch implementation of Diffusion Models (https://arxiv.org/pdf/2006.11239.pdf) 项目地址: https://gitcode.com/gh_mirrors/di/Diffusion-Models-pytorch …...

SignalAcquisition:嵌入式高精度信号采集与二进制串行传输框架

1. SignalAcquisition 库深度解析&#xff1a;面向嵌入式信号采集的高精度时序控制与二进制串行传输框架1.1 库定位与工程价值SignalAcquisition 是一个专为 Arduino IDE 设计的轻量级、高确定性信号采集库&#xff0c;其核心目标并非提供通用传感器驱动&#xff0c;而是构建一…...

【大模型工程实践③】RAG 基础架构与完整实现

【大模型工程实践③】RAG 基础架构与完整实现:从0到1跑通 作者:AI学习者 | 来源:大模型工程实践学习系列 | 更新:2026年3月 【理论要点速览】 学习本篇前,建议先掌握以下核心理论(点击跳转): ① 为什么需要RAG? ② RAG vs Fine-tuning vs Long Context的决策框架 ③ …...

水库调度员必看:动态规划在月度发电计划中的5个避坑指南

水库调度员实战指南&#xff1a;动态规划在月度发电计划中的5个关键避坑策略 在水利工程领域&#xff0c;水库调度是一项集科学性、技术性和艺术性于一体的复杂工作。作为水库调度员&#xff0c;我们每天都在与时间、水量和电力需求进行着精妙的博弈。而动态规划作为一种强大的…...

Redis 的核心机制

Redis 作为高性能内存数据库&#xff0c;在现代架构中早已超越了单纯的“缓存”角色&#xff0c;成为了支撑高并发、分布式系统的基石。深入理解其核心场景、持久化机制、内存管理及集群原理&#xff0c;是构建稳定、高效系统的关键。 以下结合具体业务场景&#xff0c;深度解析…...