JavaEE---计算机是如何工作的?
1.了解冯诺依曼体系结构
2.CPU的核心概念,CPU的两个重要指标(核心数和频率)
3.CPU执行指令的流程(指令表,一条一条指令,取指令,解析指令,执行指令)
4.操作系统核心概念(管理硬件,给软件提供稳定的运行环境)
5.进程的概念(运行起来的程序和可执行文件的区别)
6.进程的管理(PCB,链表)
7.进程的调度(状态,优先级,上下文,记账信息)==>并发,并行
1.冯诺依曼体系结构
冯诺依曼体系结构由:输入设备,存储器,CPU,输出设备构成
现在的计算机大都遵循冯诺依曼体系结构
CPU中央处理器:进行算术运算和逻辑运算
存储器:分为外存和内存,用于存储数据(使用二进制方式存储)
输入设备:用户给计算机发号施令的设备
输出设备:计算机给用户汇报结果的设备
针对于储存空间来说:
硬盘>内存>CPU
对于数据访问速度来说:
CPU>内存>硬盘
对于价格来说:
CPU>内存>硬盘
对于掉电后数据丢失来说,
CPU,内存都会丢失
硬盘不会丢失数据
2.CPU的核心概念
上面我们说了CPU用于算术运算和逻辑判断.
CPU市面上的常见架构有:
1.X86/X64(桌面端/服务器)
2.arm(移动端/嵌入式)
3.Risc-V
CPU的核心参数有核心数和频率
核心数有各种名词,比如大小核,四核八线程(超线程技术)等等
多任务处理能力会随着核心数的数量而提高,随之功耗会提高,对散热有一定的需求
任务管理器中可以查看,图上的一个个小块就是每个核心
频率也可以在上图看出
基准速度就是标准的频率,可以模糊理解为一秒钟可以执行24亿条指令
这个是当前实际的频率
指令可以称为机器语言(二进制语言)也可以称为是汇编语言
不同的CPU支持的指令是不同的,X86上的指令和arm是不互通的(兼容性问题)
(m1后,Mac用的是arm架构,为了更长的续航)
寄存器是CPU内部存储数据的部分
成本高,访问速度比内存快,空间小,断电后会丢失数据
CPU中存在缓存,如果需要用的数据但寄存机空间不够或者常用的数据会存放在缓存中
可以看出缓存是三级结构
L1缓存空间小,读取数据速度最快
L3缓存空间大,读取数据速度最慢
3.CPU执行指令的流程
CPU存在一个特殊的寄存器---"程序计数器"
保存了接下来要从哪个内存位置来执行指令,默认从0开始,一般执行结束会自增(没有循环条件判断等)会自动+1,遇到数据为0000000就停止,这些都是系统自动设置好的
指令集的三过程:
1.取指令
2.解析指令
3.执行指令
这里给大家简单分析下上面图片
第一步:
刚开始,程序计数器默认从0开始读取,读到的数据为00101110(取指令)
0010是将1110这个地址的数据存入A寄存器中(上图有操作数的详情),1110代表的地址是14(解析指令)
而第14的地址数据为00000011,转化为十进制是3,所以是将3存入到A寄存器中(执行指令)
第二步:
程序计数器自增到1,读取的数据为00011111(取指令)
0001是将1111这个地址的数据存入B寄存器中,1111代表的地址是15(解析指令)
而第15的地址数据为00001110,转化为十进制是14,所以是将14存入到B寄存器中(执行指令)
第三步
程序计数器自增到2,读取的指令为10000100(取指令)
1000是将两个寄存器的数据相加,结果放在第二个寄存器中,(解析指令)
0100表示将寄存器A和B的值相加,00表示A,01表示B结果放在A中(执行指令)
第四步程序计数器自增到3,读取的指令为01001101(取指令)
0100表示将数据从A寄存器放入内存地址中(解析指令)
1101的数据是7,也就是将3和14相加的结果放入到7号地址中(执行指令)
第五步,读取到00000000,结束指令
以上的步骤就是很简单的两个数据相加的过程
指令集开发的场景一个是写外挂(违法行为),一个是给程序打"热补丁"
因为程序运行时,除了重启时间,大部分是没法强制重启的,这时候需要打一个热补丁将对程序数值或者错误的地方进行修改
4.操作系统核心概念
操作系统,常见的操作系统有:Windows,Linux,MacOS,Android,Unix,iOS,鸿蒙等
操作系统的分层视图
操作系统的功能:
1.管理不同的硬件
2.为软件提供稳定的运行环境
操作系统通过程序驱动间接的操作硬件
操作系统=内核+配套的应用程序
操作系统的内核=操作系统核心功能集合
5.进程的概念
进程是操作系统对一个正在运行的程序的一种抽象,换言之,可以把进程看做程序的一次运行过程
在操作系统内部,进程又是操作系统进行资源分配的基本单位
C语言编写的exe文件是可执行文件,当它被打开后被读取到内存中了才被称为进程
6.进程的管理(PCB,链表)
进程控制块抽象(PCB/Process Control Block)
7.进程的调度(状态,优先级,上下文,记账信息)==>并发,并行
4.进程的状态
进程状态有就绪状态和阻塞状态等:
1.就绪状态:进程是可以随时被调度到CPU上执行指令的
2.阻塞状态:进程是无法被调度到CPU上执行,之所以阻塞是因为要做一些其他的工作,比如进行IO操作(读取硬盘/读写网卡)
除了上面之外,进程还有其他的状态,此处暂时不展开这么多
已经过的代码中,大部分不会产生阻塞的,有一个典型的代码会引起阻塞
从控制台读取输入(等待IO产生的阻塞),代码执行到这样的语句时,代码就"卡住了"
分时复用:
单核处理器下,这个时候CPU运行进程1,运行一会cpu运行进程2,过一会运行进程3
由于CPU运行的速度非常快,使上述的切换速度也非常快,肉眼察觉不到
站在宏观角度上(人),同时执行,"并发执行"
现在有了多核心CPU,此时每个核心之间,微观上能同时执行不同的进程
"并行执行"
并发/并行,都是操作系统内核统一调度的,程序员/普通用户,站址不到
因此,平时把并行和并发统称为"并发",对应的编程手法也就称为"并发编程"
5.进程的优先级
有的进程先执行,有的进行后执行
6.进程的上下文
把之前执行的中间结果(各种CPU寄存器中的值)保存起来,以备下次使用
7.进程的记账信息
操作系统统计每个进程在CPU上执行的时间,根据这个来进一步调整调度的策略
相关文章:
JavaEE---计算机是如何工作的?
1.了解冯诺依曼体系结构 2.CPU的核心概念,CPU的两个重要指标(核心数和频率) 3.CPU执行指令的流程(指令表,一条一条指令,取指令,解析指令,执行指令) 4.操作系统核心概念(管理硬件,给软件提供稳定的运行环境) 5.进程的概念(运行起来的程序和可执行文件的区别) 6.进程的管理(…...
数据结构(Java版)第五期:ArrayList与顺序表(下)
目录 一、用数组实现顺序表 一、用数组实现顺序表 我们提到过,顺序表是基于数组的封装,这次我们以int为例,用数组去实现一个顺序表。 public class MyArrayList {private int[] arr;public MyArrayList(int capacity){//指定初始容量arr n…...
Docker和Docker Compose部署方式的区别以及各自适用的场景(ChatGPT-4o回答)
prompt: 请详细介绍和解释一下docker和docker compose部署两者之间的区别和使用场景 Docker和Docker Compose是用于容器化应用程序的两个重要工具,它们在功能和使用场景上有一些关键区别。 Docker Docker是一个开源平台,用于开发、运输和运行应用程序。…...
JavaSE---异常
1.异常的体系结构 Thorwable是异常类顶层类,派生出了Error和Exception Error:指的是JVM层面无法解决的问题,如JVM内部错误,资源耗尽等..一旦发生很难解决。 Exception:异常发生后可以通过代码处理,使程序继…...
大模型的认知记录:一次与4o讨论道德经的对话 - “我无法触碰“真实的花草树木”(无名),但通过语言(有名),我可以靠近人类的认知方式。”
因为其它人都去放假了,我比较悠闲,于是想再强化下认知和正念方面的东西。对于世界的感知,只要不强迫训练,很容易被现实世界给侵蚀了。记得去年有幸悟到点什么,感受点什么,但慢慢那种感受变得虚无起来了&…...
std::srand(static_cast<unsigned int>(std::time(0)));每一部分都是啥意思
std::srand(static_cast<unsigned int>(std::time(0))); 这行代码在C中用于初始化随机数生成器的种子。下面我将逐一解释这行代码中的每个部分: std::time(0): std::time 是C标准库中的一个函数,它返回当前时间(自1970年1月1日以来…...
云计算之elastaicsearch logstach kibana面试题
1.ELK是什么? ELK 其实并不是一款软件,而是一整套解决方案,是三个软件产品的首字母缩写 Elasticsearch:负责日志检索和储存 Logstash:负责日志的收集和分析、处理 Kibana:负责日志的可视化 这三款软件都是开源软件,通常是配合使用,而且又先后归于 Elastic.co 公司名下,…...
汽车免拆诊断案例 | 2017款捷豹F-PACE车发动机偶尔怠速不稳
故障现象 一辆2017款捷豹F-PACE车,搭载2.0 L GTDi发动机,累计行驶里程约为16万km。车主反映,车辆组合仪表上发动机故障灯点亮(图1),且发动机偶尔怠速不稳。 图1 发动机故障灯点亮 故障诊断 接车后试车…...
20241124 Typecho 视频插入插件
博文免不了涉及到视频插入这些,网上的插件都或多或少的比较重,和Typecho的风格不搭配 后面就有了DPlay插件精简而来的VideoInsertion插件 VideoInsertion: Typecho 视频插入插件 目录结构 rockhinlink-ht2:/var/www/html/typecho/usr/plugins/VideoInsertion$ tree -h [4.…...
【接口调试】OpenAI ChatGPT API
【接口调试】AbortController 发出请求finish_reason 参数细节 – Openai ChatGPT 文档 发出请求 可以将以下命令粘贴到终端中以运行第一个API请求。 请确保用您的秘密API密钥替换$OPENAI_API_KEY。 curl https://api.openai.com/v1/chat/completions \-H "Content-Ty…...
ubuntu安装chrome无法打开问题
如果在ubuntu安装chrome后,点击chrome打开没反应,可以先试着在terminal上用命令打开 google-chrome 如果运行命令显示 Chrome has locked the profile so that it doesnt get corrupted. If you are sure no other processes are using this profile…...
【R安装】VSCODE安装及R语言环境配置
目录 VSCODE下载及安装VSCODE上配置R语言环境参考 Visual Studio Code(简称“VSCode” )是Microsoft在2015年4月30日Build开发者大会上正式宣布一个运行于 Mac OS X、Windows和 Linux 之上的,针对于编写现代Web和云应用的跨平台源代码编辑器&…...
什么是 Token 和 MD5 ?
目录 一:Token和MD5分别是什么 1:Token 2:MD5 二:简易Token的实现 1:Base64。 2:验证Token 三:MD5的使用 一:Token和MD5分别是什么 1:Token Token 的中文有人翻译成…...
Kubernetes(k8s)1.30.7简单快速部署对外部开放的有状态服务MYSQL8(快速有效)
如何在Kubernetes集群中快速创建部署一个单节点的有状态(即将数据文件挂载到宿主机,防止重新部署mysql服务,数据文件丢失)的对外开放的MYSQL服务。 通过创建一个 Kubernetes Deployment 并使用 PersistentVolumeClaim 将其连接到…...
基于Linux的repmgr搭建
第一部分 说明 repmgr是一个开源工具套件,用于管理 PostgreSQL 服务器集群中的复制和故障转移。它通过设置备用服务器、监控复制和执行管理任务(例如故障转移或手动切换操作)的工具增强了 PostgreSQL 的内置热备用功能。 PostgreSQL在9.0后引…...
Diff差异算法
目录 虚拟DOM Diff算法 Diff过程 示例 总结 在Vue.js中,虚拟DOM(Virtual DOM)是其核心特性之一,它极大地提高了DOM更新的效率。Vue.js使用虚拟DOM的diff算法来比较新旧虚拟DOM树,从而确定最小的DOM更新操作。这种…...
visionpro官方示例分析(一) 模板匹配工具 缺陷检测工具
1.需求:找出图像中的这个图形。 2.步骤 使用CogPMAlignTool工具,该工具是模板匹配工具,见名知意,所谓模板匹配工具就是说先使用该工具对一张图像建立模板,然后用这个模板在其他图像上进行匹配,匹配上了就说…...
字符串分割转换(Java Python JS C++ C )
题目描述 给定一个非空字符串S,其被N个‘-’分隔成N+1的子串,给定正整数K,要求除第一个子串外,其余的子串每K个字符组成新的子串,并用‘-’分隔。 对于新组成的每一个子串,如果它含有的小写字母比大写字母多,则将这个子串的所有大写字母转换为小写字母; 反之,如果它…...
第33章 - Go语言 云原生开发
第33章 - 云原生开发将深入探讨云原生技术及其在现代软件开发中的应用。我们将从云原生的基本概念开始,逐步介绍Kubernetes的基本使用方法,并结合具体的云服务提供商实例,通过Go语言编写的应用程序来展示如何实现云原生开发。 33.1 云原生的…...
springboot配置多数据源mysql+TDengine保姆级教程
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言一、pom文件二、yamlDataSourceConfigServiceMapper.xml测试总结 前言 Mybatis-plus管理多数据源,数据库为mysql和TDengine。 一、pom文件 <de…...
RocketMQ负载均衡机制解析
消费者在消费消息的时候,需要知道从Broker的哪一个消息队列中去获取消息。 ❝ 所以,在消费者端必须要做负载均衡,即Broker端中多个消费队列分配给同一个消费者组中的哪些消费者消费。 在RocketMQ中,在消费者端有一个:R…...
PyTorch 模型转换为 ONNX 格式
PyTorch 模型转换为 ONNX 格式 在深度学习领域,模型的可移植性和可解释性是非常重要的。本文将介绍如何使用 PyTorch 训练一个简单的卷积神经网络(CNN)来分类 MNIST 数据集,并将训练好的模型转换为 ONNX 格式。我们还将讨论 PTH …...
大数据-234 离线数仓 - 异构数据源 DataX 将数据 从 HDFS 到 MySQL
点一下关注吧!!!非常感谢!!持续更新!!! Java篇开始了! 目前开始更新 MyBatis,一起深入浅出! 目前已经更新到了: Hadoop࿰…...
【人工智能】使用Python实现序列到序列(Seq2Seq)模型进行机器翻译
解锁Python编程的无限可能:《奇妙的Python》带你漫游代码世界 序列到序列(Sequence-to-Sequence, Seq2Seq)模型是解决序列输入到序列输出任务的核心架构,广泛应用于机器翻译、文本摘要和问答系统等自然语言处理任务中。本篇文章深入介绍 Seq2Seq 模型的原理及其核心组件(…...
elasticsearch安装ik分词器
本文主要记录如何安装ik分词器,如果你刚好刷到了这篇文章,希望对你有所帮助。 IKAnalyzer是一个开源的,基于java语言开发的轻量级的中文分词工具包。采用了特有的“正向迭代最细粒度切分算法“,支持细粒度和最大词长两种切分模式&…...
QT6之主站freemodbus1.6移植
本次使用的QT是6.8 下载1.6的freemodbus资源包:至少以上的吧 随便下载:官网也可以这个是STM芯片的教程,移植基本一样,略有不同; STM32 移植FreeModbus详细过程-CSDN博客 移植freemodbus: 添加资源文件&a…...
【错误❌】——槽函数定义好但未初始化
public slots:void onClose(); 初始化即可成功:...
数据结构(理解)
探索数据结构:计算机世界的基石 在计算机科学的领域中,数据结构就如同建筑中的基石,它们支撑着整个软件世界的运行。无论是简单的应用程序,还是复杂的大型系统,数据结构都在其中起着至关重要的作用。 一、什么是数据结…...
ROS2 细节知识学习
1. rosidl_generate_interfaces() 在 ROS2 中,rosidl_generate_interfaces是一个关键的构建工具功能。它主要用于从接口定义文件(如.msg消息文件、.srv服务文件和.action动作文件)生成不同编程语言(如 C、Python 等)可…...
SQL进阶——JOIN操作详解
在数据库设计中,数据通常存储在多个表中。为了从这些表中获取相关的信息,我们需要使用JOIN操作。JOIN操作允许我们通过某种关系(如相同的列)将多张表的数据结合起来。它是SQL中非常重要的操作,广泛应用于实际开发中。本…...
Android studio 签名加固后的apk文件
Android studio打包时,可以选择签名类型v1和v2,但是在经过加固后,签名就不在了,或者只有v1签名,这样是不安全的。 操作流程: 1、Android studio 对项目进行打包,生成有签名的apk文件ÿ…...
Mybatis-基础操作
Mybatis的基础操作就是通过Mybatis完成对数据的增删改查。我们通过例子来引入这些操作,之前的项目较久远,因此我们从零开始进行准备工作: 搭建项目 一、创建数据库user_list并插入数据: -- 创建数据库 create table user_list …...
【工具】JS解析XML并且转为json对象
【工具】JS解析XML并且转为json对象 <?xml version1.0 encodingGB2312?> <root><head><transcode>hhhhhhh</transcode></head><body><param>ccccccc</param><param>aaaaaaa</param><param>qqqq<…...
软件测试技术面试题及参考答案整理
一、什么是兼容性测试?兼容性测试侧重哪些方面? 参考答案: 兼容测试主要是检查软件在不同的硬件平台、软件平台上是否可以正常的运行,即是通常说的软件的可移植性。 兼容的类型,如果细分的话,有平台的兼容,网络兼…...
Python学习36天
面向对象编程综合 # 创建父类 class Employee:# 创建私有属性__name None__salary None# 创建构造器初始化属性def __init__(self, __name, __salary):self.__name __nameself.__salary __salarydef get_annual(self):# 返回员工年薪return self.__salary * 12# 创建公共方…...
C语言——海龟作图(对之前所有内容复习)
一.问题描述 海龟作图 设想有一只机械海龟,他在C程序控制下在屋里四处爬行。海龟拿了一只笔,这支笔或者朝上,或者朝下。当笔朝下时,海龟用笔画下自己的移动轨迹;当笔朝上时,海龟在移动过程中什么也不画。 …...
关于如何在k8s中搭建一个nsfw黄图鉴定模型
随着现在应用内图片越来越多,安全审查也是必不可少的一个操作了 下面手把手教你如何将huggingface中的黄图检测模型部署到自己的服务器上去 1.找到对应的模型 nsfw_image_detection 2.在本地先验证如何使用 首先安装transformers python库 pip install transform…...
istio结合wasm插件的实际应用
在 Istio 中,WASM 插件的常见使用场景和功能包括以下几个方面: 1. 流量管理与请求修改 请求与响应头处理:动态添加、删除或修改 HTTP 请求或响应头。URL 重写:根据特定规则调整请求的路径或参数。请求路由增强:实现复…...
日志logrus
https://blog.csdn.net/m0_70982551/article/details/143095729 https://blog.csdn.net/wslyk606/article/details/81670713 https://www.bilibili.com/opus/1002468521099132928 地鼠文档:https://www.topgoer.cn/docs/goday/goday-1crg2adjknouc 极客文档…...
11.29 代码随想录Day45打卡(动态规划)
115.不同的子序列 题目:给你两个字符串 s 和 t ,统计并返回在 s 的 子序列 中 t 出现的个数。 题解: class Solution:def numDistinct(self, s: str, t: str) -> int:dp [[0] * (len(t) 1) for _ in range(len(s) 1)]for i in range…...
springboot336社区物资交易互助平台pf(论文+源码)_kaic
毕 业 设 计(论 文) 社区物资交易互助平台设计与实现 摘 要 传统办法管理信息首先需要花费的时间比较多,其次数据出错率比较高,而且对错误的数据进行更改也比较困难,最后,检索数据费事费力。因此ÿ…...
【Maven】Nexus私服
6. Maven的私服 6.1 什么是私服 Maven 私服是一种特殊的远程仓库,它是架设在局域网内的仓库服务,用来代理位于外部的远程仓库(中央仓库、其他远程公共仓库)。一些无法从外部仓库下载到的构件,如项目组其他人员开发的…...
【python量化教程】如何使用必盈API的股票接口,获取最新分时KDJ数据
分时KDJ数据简介 股票分时 KDJ 数据是用于分析股票盘中短期走势的指标。它由未成熟随机指标 RSV 计算出 K 值、D 值、J 值。取值范围上,K 和 D 是 0 - 100,J 值可超出此范围。20 以下为超卖区、80 以上是超买区。关键信号有金叉(预示上涨&am…...
DI依赖注入详解
DI依赖注入 声明了一个成员变量(对象)之后,在该对象上面加上注解AutoWired注解,那么在程序运行时,该对象自动在IOC容器中寻找对应的bean对象,并且将其赋值给成员变量,完成依赖注入。 AutoWire…...
mysql sql语句 between and 是否边界值
在 MySQL 中,使用 BETWEEN 运算符时,边界值是包括在内的。这意味着 BETWEEN A AND B 查询会返回 A 和 B 之间的所有值,包括 A 和 B 自身。 示例 假设有一个表 employees,其中有一个 salary 列,您可以使用以下查询&am…...
飞塔防火墙只允许国内IP访问
飞塔防火墙只允许国内IP访问 方法1 新增地址对象,注意里面已经细分为中国内地、中国香港、中国澳门和中国台湾 方法2 手动新增国内IP的对象组,目前好像一共有8632个,每个对象最多支持600个IP段...
宠物之家:基于SpringBoot的领养平台
第1章 绪论 1.1 课题背景 二十一世纪互联网的出现,改变了几千年以来人们的生活,不仅仅是生活物资的丰富,还有精神层次的丰富。时代进步的标志,就是让人们过上更好的生活。在互联网诞生之前,地域位置往往是人们思想上不…...
golang 实现比特币内核:如何接入 RPC 后端获得特定交易的二进制数据
我们非常关注解析比特币的二进制数据,这使得我们的工作看起来是可行的。比特币是一个分布式网络系统,这意味着它需要全球各地的节点协同工作,甚至比特币核心库也需要连接其他节点来帮助它,就像查询交易费一样。 世界上没有免费的午餐。当你使用比特币系统进行交易时,你需…...
QML学习 —— 34、视频媒体播放器(附源码)
效果 说明 您可以单独使用MediaPlayer播放音频内容(如音频),也可以将其与VideoOutput结合使用以渲染视频。VideoOutput项支持未转换、拉伸和均匀缩放的视频演示。有关拉伸均匀缩放演示文稿的描述,请参见fillMode属性描述。 播放可能出错问题 出现的问题: DirectS…...
宝塔Linux面板上传PHP文件或者修改PHP文件,总是转圈圈,其他文件正常,解决办法
目录 问题描述 寻找解决方案 1.重启宝塔面板 2.清理宝塔缓存 3.升级面板 4.ssh远程 5.清空回收站 6.换网络 7. IDE远程编辑 总结: 问题描述 一直用宝塔linux面板,感觉非常好用,点点就能搞定,环境也很好配置。 公司搬家&…...