【JavaEE初阶 -- 计算机核心工作机制】
这里写目录标题
- 1.冯诺依曼体系
- 2.CPU是怎么构成的
- 3.指令表
- 4.CPU执行代码的方式
- 5.CPU小结:
- 6.编程语言和操作系统
- 7. 进程/任务(Process/Task)
- 8.进程在系统中是如何管理的
- 9. CPU分配 -- 进程调度
- 10.内存分配 -- 内存管理
- 11.进程间通信
1.冯诺依曼体系
- CPU中央处理器:进行算术运算和逻辑判断。
- 存储器:分为外存和内存,用于存储数据(二进制存储)
- 输入设备:用户给计算机发送指令的设备
- 输出设备:计算机给用户汇报结果的设备
针对存储空间访问速度:硬盘>内存>>CPU
针对数据访问速度:CPU>>内存>硬盘
2.CPU是怎么构成的
门电路 => 半加速 => 全加速 => 加法器 => ALU运算器(ALU是计算机中进行算数,逻辑运算的核心部件,是计算机的数学大脑)。
CPU以及其他的内存、硬盘等重要的设备都是由 门电路构成的。
3.指令表
- 指令(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
寄存器:是CPU上存储数据的单元。CPU上能直接存的数据比较少,这些寄存器主要是为了支持CPU完成一些计算,保存中间结果的。
4.CPU执行代码的方式

上面一段指令,其实就是内存中的一段数据;写好的代码最终要运行的话都需要让操作系统,先把写好并编译好的指令加载到内存中,然后CPU才能执行。
-
假如从0号地址开始执行程序:CPU就会从0号地址读取数据,到CPU寄存器里,并且对这个指令进行解析(即查指令表,看指令的具体操作)。
前4位(0010)是opcode参数(即查指令表):LOAD A:从内存中读取数据到A寄存器中。后4位(1110)是内存地址,十进制的14。 -
CPU 接着从内存中,读取指令并解析:
0001:LOAD B,1111:就是15号内存地址。

- CPU接着从3地址读取指令:
1000:为add,01为B,00为A,A寄存器的编号是00,B的编号是01,而这些都是指令表里提前约定好的。把**这两个寄存器的内容进行相加,结果保存到第二个操作数(A)的寄存器中

- CPU接着读取3号地址的指令,
** 0100:STORE A,1101:13地址;把A寄存器中的值,写入到13这个地址上。**
5.CPU小结:
- CPU要执行的指令,是在内存中的(冯诺依曼结构的基本设定让执行单元和存储单元进行了 解耦合)
- ** CPU想要执行指令,必须先读取指令,再解析指令,然后才能执行指令**
- 取指令需要从内存中读取指令到CPU的寄存器中(上面CPU读取解析和执行指令没有体现出存储指令的寄存器,只体现了AB用来计算数据的寄存器);因为读取内存操作相对于CPU执行计算,开销大很多,所以读取指令的操作,是非常耗时的,因此,CPU通过缓存,流水线等技术来优化这里的效率。
- CPU解析指令的时候,需要用到指令表,而不同架构的CPU支持的指令表不同(x86和arm等是不同的);指令表细节已经写死到CPU中了,CPU是可以很容易识别的
- 指令在执行过程中,可能会带有一些操作数,不同的指令,操作数的个数含义都有所不同
- CPU重要的参数,主频:表示的含义就可以近似看成一秒中之内,CPU能够执行的指令个数
6.编程语言和操作系统
- 编程语言:高级语言经过编译、链接 =》汇编语言 经过汇编 =》机器语言。
高级语言的一条语句往往对应多条指令才能完成。
- 操作系统:是一组做计算机资源管理的软件的统称。
- 计算机系统的分层视图:

7. 进程/任务(Process/Task)
- 进程就是操作系统提供的一种“软件资源”,比如我们电脑正在运行的程序,就可以称为是”任务“,也叫进程,而我们现在所用的系统,都属于多任务操作系统,即同一时刻可以运行多个任务。
- 而单任务操作系统,同一时刻只能运行一个程序,比如以前的山寨机,单任务系统就是没有后台运行,要执行另一个程序,就需要先退出前一个程序。
- 每个任务在执行过程中,都需要消耗一定的硬件资源,计算机中的每个进程在运行的时候,都需要给他分配一定的系统资源,进程是系统分配资源的基本单位。
8.进程在系统中是如何管理的
操作系统的进程管理:
- 先描述,即使用类/结构体这样的方式,把实体属性给列出来,表进程信息的结构体,PCB(进程控制块,Process Control Block),PCB是操作系统中的通用概念,比如Windows上表进程的结构和Linux也都可以称为PCB。
- 再组织,即使用一定的数据结构,把这些结构体/对象串到一起。在Linux中,使用链表这样的数据结构来把若干个task_struct串起来。
PCB中的一些核心属性:
- pid,进程的身份标识。此处通过一个简单的不重复的整数来进行区分的,系统会保证,同一个机器上,同一个时刻,每个进程pid都是唯一的。
- 内存指针,描述了进程使用,内存资源的详细情况。进程运行过程中,需要消耗一些系统资源的,其中内存就是一种重要的资源。而整个系统中,内存这么多,并不是可以随意使用的,只有先从系统这里申请,系统给你分配一块才能使用。每个内存,都必须使用自己申请到的内存。
- 列如双击一个exe,就会运行进程,这个过程中,就是系统先把exe这个文件的内容(包含了指令和数据,先加载到内存中)然后再创建进程,让进程开始执行。
- 文件描述符表:描述了这个进程所涉及的硬盘相关的资源。存储器 = 内存+外存(硬盘、软盘、光盘、U盘。。),操作系统,不管什么盘都是按照”文件“的方式来进行操作的。一个进程想要操作文件,需要先打开文件,即让进程在文件描述符表中分配一个表项(构造一个结构体)表示这个文件的相关信息。
注意:进程,是系统分配资源的基本单位。
一个进程,消耗CPU资源:就好比CPU是个大舞台,进程要执行的指令,就是演员;一个CPU可能有一个核心,也可能有多个核心,每个核心都是舞台,演员进行表演登上舞台才能表演,同一时刻,一个舞台,只能有一个演员,让多个演员轮流登台,即引出分时复用。即某电脑的CPU有16个逻辑核心,系统上的进程不止16个,其他进程分不到CPU资源,通过分时复用(并发)。
- 分时复用:当CPU核心只有一个,先执行进程1的代码,执行一会后,让进程1下来,执行进程2的代码,以此类推。
- 并发:多核CPU下,四个不同的进程在各自舞台上执行,同时执行,称为并行执行。每个核心仍要分时复发。当代的计算机执行过程中,往往是并行+并发同时存在。而两个进程是并发执行还是并行执行要看系统的调度。
9. CPU分配 – 进程调度
PCB中就需要提供一些属性来支持系统完成对这些进程的调度。
- 状态:描述进程的是否能够去CPU上执行 。有时候某个进程不方便,比如通过Scanner等待用户输入内容。
1.就绪状态:随时准备好去CPU上执行。2,阻塞状态:这个进程不方便去CPU上执行,调度不了该进程(如进程等待IO,来自控制台等设备的输入输出),。 - 优先级:多个进程等待系统调度,调度的先后不一样。如电脑运行了游戏和qq,此时游戏的优先级大于qq。
- 记账信息:针对每个进程,占据了多少CPU的时间,进行一个统计,会根据这个统计结果来进一步的调整调度的策略。因此需要在下一轮的调度下进行调整,确保每个进程都不至于出现完全捞不着CPU的情况。
- 上下文:支撑进程调度的重要属性,相当于游戏里面的存档和读档。每个进程在运行过程中,就会有很多的中间结果,在CPU的寄存器中。1.存档:因此,就需要在进程调度出CPU之前,把当前寄存器中的这些信息,给单独保存到一个地方。2.存档:在该进程下次去CPU执行的时候,再把这些寄存器里的信息给恢复回来。
- 所谓的保存上下文就是:把CPU的关键寄存器中的数据,保存到内存中(PCB的上下文属性中)。
- 恢复上下文:把内存中的关键寄存器中的数据,加载到CPU的对应寄存器。
10.内存分配 – 内存管理
每个进程的内存,是彼此独立的,互不干扰的。
- 通常情况下,进程A不能直接访问进程B的内存;为了系统的稳定性,如果某个进程代码出bug出错的,只是影响到自己这个进程,不会影响到其他进程,这种情况也称为进程的独立性。而如果系统上的一个进程崩溃,会影响了其他进程,那将非常恐怖。
11.进程间通信
虽然有进程的独立性,但是有时候也需要,多个进程相互配合,完成某个工作。
- 进程间通信和进程的‘独立性’ 并不冲突,系统提供一些 公共的空间(多个进程可以访问到的),让两个进程借助这个公共空间来交互数据。
- 进程通信的方式:
- 管道
- 共享内存
- 文件
- 网络
- 信号量
- 信号
其中,在Java中主要使用的进程通信方式:文件和网络。网络,是可以支持同一个主机的不同进程,也能支持不同主机的不同进程适用性更高。
相关文章:
【JavaEE初阶 -- 计算机核心工作机制】
这里写目录标题 1.冯诺依曼体系2.CPU是怎么构成的3.指令表4.CPU执行代码的方式5.CPU小结:6.编程语言和操作系统7. 进程/任务(Process/Task)8.进程在系统中是如何管理的9. CPU分配 -- 进程调度10.内存分配 -- 内存管理11.进程间通信 1.冯诺依曼…...
springcloud:3.6测试信号量隔离
服务提供者【test-provider8001】 Openfeign远程调用服务提供者搭建 文章地址http://t.csdnimg.cn/06iz8 相关接口 测试远程调用:http://localhost:8001/payment/index 服务消费者【test-consumer-resilience4j8004】 Openfeign远程调用消费者搭建 文章地址http://t…...
AI化未来:智能科技的新纪元
AI化未来:智能科技的新纪元 我们正处在一个前所未有的科技革新时期,人工智能(AI)的发展正日益渗透到我们生活的方方面面,预示着AI化未来的到来。这是一场前所未有的科技革命,其深度和广度超越了历史上的任…...
Unity 整体界面淡入淡出效果
在Unity中,如果我们要实现控制多个组件同时淡出,同时淡入的效果,可以使用DOTween插件实现。 如图,一个页面中带有背景,一张图片,一个文本,一个滑动条。 要实现以上界面的整体淡入淡出ÿ…...
反序列化逃逸 [安洵杯 2019]easy_serialize_php1
打开题目 题目源码: <?php$function $_GET[f];function filter($img){$filter_arr array(php,flag,php5,php4,fl1g);$filter /.implode(|,$filter_arr)./i;return preg_replace($filter,,$img); }if($_SESSION){unset($_SESSION); }$_SESSION["user&qu…...
JavaScript中的包装类型详解
JavaScript中的包装类型详解 在 JavaScript 中,我们有基本类型和对象类型两种数据类型。基本类型包括 String,Number,Boolean,null,undefined 和 Symbol。然而,当我们需要在这些基本类型上调用方法时&…...
如何向各大媒体网站投稿 海外媒体发稿平台有哪些
在数字化时代,各大媒体网站是企业推广和个人展示的重要平台。通过在媒体网站上发布文章,可以有效地扩大影响力和提升知名度。但是,如何投稿到各大媒体网站呢?以下是一些常用的方法和步骤。 1. 研究目标媒体 在投稿之前࿰…...
基于SpringBoot的论坛系统(附项目源码+论文)
摘要 如今的时代,是有史以来最好的时代,随着计算机的发展到现在的移动终端的发展,国内目前信息技术已经在世界上遥遥领先,让人们感觉到处于信息大爆炸的社会。信息时代的信息处理肯定不能用之前的手工处理这样的解决方法…...
堆以及堆的实现
文章目录 堆的概念堆的实现HeapPushHeapPop HeapTop HeapSize HeapEmpty堆的应用 堆的概念 堆是一颗完全二叉树每个结点的值都小于子结点的值,这颗二叉树为小根堆每个结点的值都大于子结点的值,这颗二叉树为大根堆堆的定义如下:n个元素的序列…...
使用RabbitMQ实现延时消息自动取消的简单案例
一、流程图 二、导包 <!--消息队列 AMQP依赖,包含RabbitMQ--> <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-amqp</artifactId> </dependency> 三、配置文件 #消息队列 …...
Docker部署(ruoyi案例接上篇Docker之部署前后端分离项目)实施必会!!!!
文章目录 Docker部署前端 Docker部署前端 接上篇博主已经部署好后端Docker部署后端,现在来讲解怎么部署前端 MySQL和redis是不依赖其他任何一个东西的, ruoyi-admin是因为你启动项目的时候是必须连接数据库的 现在去单独启动它 docker start ruoyi-a…...
电脑中已经有多个模组压缩文件,如何通过小火星露谷管理器批量安装
如果已经下载了很多的星露谷模组压缩文件(zip包),可以通过【添加模组】功能,将模组批量解压到Mods文件夹中。 名词解释 为了避免这篇文章的内容看不懂,先解释两个名词。 直装型模组:直接解压到Mods就能生…...
[Linux]如何理解kernel、shell、bash
文章目录 概念总览kernelshell&bash 概念总览 内核(kernel) ,外壳(shell) ,bash kernel kernel是指操作系统中的核心部分,用户一般是不能直接使用kernel的。它主要负责管理硬件资源和提供系统服务,如内存管理、进程管理、文件…...
C++:Vector的使用
一、vector的介绍 vector的文档介绍 1. vector是表示可变大小数组的序列容器。 2. 就像数组一样,vector也采用的连续存储空间来存储元素。也就是意味着可以采用下标对vector的元素进行访问,和数组一样高效。但是又不像数组,它的大小是可以…...
Redis之事务(详细解析)
请直接看原文:不能回滚的Redis事务还能用吗 - 知乎 (zhihu.com) ------------------------------------------------------------------------------------------------------------------------------ 1、Redis事务的概念: Redis 事务的本质是一组命令的集合。…...
Java项目:39 springboot007大学生租房平台的设计与实现
作者主页:源码空间codegym 简介:Java领域优质创作者、Java项目、学习资料、技术互助 文中获取源码 项目介绍 系统有管理员、房东和用户 【主要功能】 1、后台:房源管理、信息审批管理、订单信息管理、房东管理、用户管理 2、前台࿱…...
安卓内存信息查看
目录 前言一、Android查看内存相关信息的方法1.1 通过 adb shell 获取内存信息1.2 通过编程方式获取内存信息1.3 adb shell 获取应用程序内存使用情况1.4 free指令 二、总结 前言 一、Android查看内存相关信息的方法 1.1 通过 adb shell 获取内存信息 C:\Users\henry.xue>…...
Positional Encoding 位置编码
Positional Encoding 位置编码 flyfish Transformer模型没有使用循环神经网络,无法从序列中学习到位置信息,并且它是并行结构,不是按位置来处理序列的,所以为输入序列加入了位置编码,将每个词的位置加入到了词向量中…...
MySql、Navicat 软件安装 + Navicat简单操作(建数据库,表)
一、MySql、Navicat 软件安装 及正常使用 MySql下载+安装: 检查安装情况: 配置环境变量: 搞定了!!! 可以登陆试哈哈哈 连接navicat 开始创建数据库 二、 商品种类表 - commoditytype int …...
逆向案例五、爬取b站评论,表单MD5加密
1.便捷写爬虫网站: Convert curl commands to code 使用流程:又点击想要抓的包,复制URL(base)格式复制 在上面链接中粘贴即可 2.找到含有评论的包(即main?oid):观察表单发现两处参数在变化&…...
CVPR 2025 MIMO: 支持视觉指代和像素grounding 的医学视觉语言模型
CVPR 2025 | MIMO:支持视觉指代和像素对齐的医学视觉语言模型 论文信息 标题:MIMO: A medical vision language model with visual referring multimodal input and pixel grounding multimodal output作者:Yanyuan Chen, Dexuan Xu, Yu Hu…...
Java 语言特性(面试系列1)
一、面向对象编程 1. 封装(Encapsulation) 定义:将数据(属性)和操作数据的方法绑定在一起,通过访问控制符(private、protected、public)隐藏内部实现细节。示例: public …...
反向工程与模型迁移:打造未来商品详情API的可持续创新体系
在电商行业蓬勃发展的当下,商品详情API作为连接电商平台与开发者、商家及用户的关键纽带,其重要性日益凸显。传统商品详情API主要聚焦于商品基本信息(如名称、价格、库存等)的获取与展示,已难以满足市场对个性化、智能…...
06 Deep learning神经网络编程基础 激活函数 --吴恩达
深度学习激活函数详解 一、核心作用 引入非线性:使神经网络可学习复杂模式控制输出范围:如Sigmoid将输出限制在(0,1)梯度传递:影响反向传播的稳定性二、常见类型及数学表达 Sigmoid σ ( x ) = 1 1 +...
LeetCode - 199. 二叉树的右视图
题目 199. 二叉树的右视图 - 力扣(LeetCode) 思路 右视图是指从树的右侧看,对于每一层,只能看到该层最右边的节点。实现思路是: 使用深度优先搜索(DFS)按照"根-右-左"的顺序遍历树记录每个节点的深度对于…...
DingDing机器人群消息推送
文章目录 1 新建机器人2 API文档说明3 代码编写 1 新建机器人 点击群设置 下滑到群管理的机器人,点击进入 添加机器人 选择自定义Webhook服务 点击添加 设置安全设置,详见说明文档 成功后,记录Webhook 2 API文档说明 点击设置说明 查看自…...
Python+ZeroMQ实战:智能车辆状态监控与模拟模式自动切换
目录 关键点 技术实现1 技术实现2 摘要: 本文将介绍如何利用Python和ZeroMQ消息队列构建一个智能车辆状态监控系统。系统能够根据时间策略自动切换驾驶模式(自动驾驶、人工驾驶、远程驾驶、主动安全),并通过实时消息推送更新车…...
人工智能--安全大模型训练计划:基于Fine-tuning + LLM Agent
安全大模型训练计划:基于Fine-tuning LLM Agent 1. 构建高质量安全数据集 目标:为安全大模型创建高质量、去偏、符合伦理的训练数据集,涵盖安全相关任务(如有害内容检测、隐私保护、道德推理等)。 1.1 数据收集 描…...
Java数组Arrays操作全攻略
Arrays类的概述 Java中的Arrays类位于java.util包中,提供了一系列静态方法用于操作数组(如排序、搜索、填充、比较等)。这些方法适用于基本类型数组和对象数组。 常用成员方法及代码示例 排序(sort) 对数组进行升序…...
boost::filesystem::path文件路径使用详解和示例
boost::filesystem::path 是 Boost 库中用于跨平台操作文件路径的类,封装了路径的拼接、分割、提取、判断等常用功能。下面是对它的使用详解,包括常用接口与完整示例。 1. 引入头文件与命名空间 #include <boost/filesystem.hpp> namespace fs b…...
