JavaEE---计算机是如何工作的?

news2024/11/29 15:54:45

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 进⾏⼯作的命令,主要有操作码 + 被操作数组成
其中操作码⽤来表⽰要做什么动作,被操作数是本条指令要操作的数据,可能是内存地址,也可能是寄存器编号等。
指令本⾝也是⼀个数字,⽤⼆进制形式保存在内存的某个区域中。
这里展示的指令为8bit位的
前4bit位为opcode,操作码,后4位为操作数

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)

计算机内部要管理任何现实事物,都需要将其抽象成⼀组有关联的、互为⼀体的数据。描述的时候需要有以下信息
进程之间是通过链表结构穿起来的,方便对进程实现增删改查
1.pid进程标识符
        同一时刻,应该机器上的多个进程之间,PID唯一的,不会重复,操作系统内部的很多操作都是通过PID找到对应的进程的
2.内存指针(一组)  侧面表示出,进程的执行需要一定的内存资源
        描述进程依赖的指令和数据都在内存的哪个区域
        操作系统运行exe,就会读取exe中的指令和数据,加载到内存中,(内存地址)
3.文件描述符表(顺序表/数组)    侧面表示出,进程的执行需要一定的硬盘资源
        描述了进程打开了哪些文件(对应硬盘上的数据)
        进程中打开了某个文件,就会在顺序表中添加一项

7.进程的调度(状态,优先级,上下文,记账信息)==>并发,并行

4.进程的状态

进程状态有就绪状态和阻塞状态等:

1.就绪状态:进程是可以随时被调度到CPU上执行指令的

2.阻塞状态:进程是无法被调度到CPU上执行,之所以阻塞是因为要做一些其他的工作,比如进行IO操作(读取硬盘/读写网卡)

除了上面之外,进程还有其他的状态,此处暂时不展开这么多

已经过的代码中,大部分不会产生阻塞的,有一个典型的代码会引起阻塞

从控制台读取输入(等待IO产生的阻塞),代码执行到这样的语句时,代码就"卡住了"

分时复用:

单核处理器下,这个时候CPU运行进程1,运行一会cpu运行进程2,过一会运行进程3

由于CPU运行的速度非常快,使上述的切换速度也非常快,肉眼察觉不到

站在宏观角度上(人),同时执行,"并发执行"

现在有了多核心CPU,此时每个核心之间,微观上能同时执行不同的进程

"并行执行"

并发/并行,都是操作系统内核统一调度的,程序员/普通用户,站址不到

因此,平时把并行和并发统称为"并发",对应的编程手法也就称为"并发编程"

5.进程的优先级

有的进程先执行,有的进行后执行

6.进程的上下文

把之前执行的中间结果(各种CPU寄存器中的值)保存起来,以备下次使用

7.进程的记账信息

操作系统统计每个进程在CPU上执行的时间,根据这个来进一步调整调度的策略

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

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

相关文章

gitee:创建仓库,存入本地文件至仓库

一、git下载 git:下载与安装-CSDN博客https://blog.csdn.net/weixin_46001736/article/details/144107485?sharetypeblogdetail&sharerId144107485&sharereferPC&sharesourceweixin_46001736&spm1011.2480.3001.8118 二、创建仓库 1、主页面->右上角新增…

Flink 安装与入门:开启流式计算新时代

在当今大数据蓬勃发展的时代,数据处理的时效性愈发关键。传统基于先存储再批量处理的数据方式,在面对诸如网站实时监控、异常日志即时分析等场景时,显得力不从心。随着 5G、物联网等技术的兴起,海量数据如潮水般涌来,且…

使用 Jina Embeddings v2 在 Elasticsearch 中进行后期分块

作者:来自 Elastic Gustavo Llermaly 在 Elasticsearch 中使用 Jina Embeddings v2 模型并探索长上下文嵌入模型的优缺点。 在本文中,我们将配置和使用 jina-embeddings-v2,这是第一个开源 8K 上下文长度嵌入模型,首先使用 semant…

XTuner 微调个人小助手认知 -- 书生大模型实训营第4期基础岛第五关

目录 基础任务 任务要求 算力要求 环境配置与数据准备 使用 conda 先构建一个 Python-3.10 的虚拟环境 安装 XTuner 验证安装 修改提供的数据 创建一个新的文件夹用于存储微调数据 ​编辑 创建修改脚本 执行脚本 查看数据 训练启动 复制模型 修改 Config 启动…

使用vcpkg自动链接tinyxml2时莫名链接其他库(例如boost)

使用vcpkg自动链接tinyxml2时莫名链接其他库(例如boost) vcpkg的自动链接功能非常方便,但在某些情况下会出现过度链接的问题。 链接错误症状 以tinyxml2为例,程序中调用tinyxml2的函数后,若vcpkg中同时存在opencv和…

06_数据类型

数据类型 数据类型分类 JavaScript 语言的每一个值,都属于某一种数据类型。JavaScript 的数据类型,共有六种。(ES6 又新增了第七种 Symbol 类型的值和第八种 BigInt类型,当前课程暂不涉及) 据类型分类 原始类型(基础类型) var age = 20, var name = 尚学堂"; var le…

GitLab 使用过程中常见问题及解决方案

开发人员常见问题及解决方案 合并请求被拒绝 原因:代码质量问题、安全漏洞或流水线失败。解决方案: 使用 Code Quality 工具检查代码质量。查看流水线日志,修复单元测试、编译错误或扫描问题。优化静态分析(SAST)结果&…

网络空间安全之一个WH的超前沿全栈技术深入学习之路(13-2)白帽必经之路——如何用Metasploit 渗透到她的心才不会让我释怀

欢迎各位彦祖与热巴畅游本人专栏与博客 你的三连是我最大的动力 以下图片仅代表专栏特色 [点击箭头指向的专栏名即可闪现] 专栏跑道一 ➡️网络空间安全——全栈前沿技术持续深入学习 专栏跑道二 ➡️ 24 Network Security -LJS ​ ​ ​ 专栏跑道三 ➡️ MYSQL REDIS Advan…

机器学习6_支持向量机_算法流程

最大化: 限制条件: (1) (2) 如何求解这个对偶问题,同时基于对偶问题给出支持向量机算法的统一流程。 (核函数) 只要知道核函数,就可以求个这个最优化的对偶问题。 求解了这个对偶…

DM8 Docker环境部署

1 环境说明 类别 版本 介质 操作系统 CentOS-7-x86_64-DVD-2207-02.iso docker-27.3.1.tgz Dm8 Docker DM8开发版 dm8_20241119_x86_rh6_64_rq_ent_8.1.2.84.tar 备注: 下载docker源码包 下载地址: https://download.docker.com/linux/static/stable/x…

DevOps工程技术价值流:Jenkins驱动的持续集成与交付实践

一、Jenkins系统概述 Jenkins:开源CI/CD引擎的佼佼者 Jenkins,作为一款基于Java的开源持续集成(CI)与持续交付(CD)系统,凭借其强大的插件生态系统,成为DevOps实践中不可或缺的核心…

apache实现绑定多个虚拟主机访问服务

1个网卡绑定多个ip的命令 ip address add 192.168.45.140/24 dev ens33 ip address add 192.168.45.141/24 dev ens33 在linux服务器上,添加多个站点资料,递归创建三个文件目录 分别在三个文件夹下,建立测试页面 修改apache的配置文件http.…

【css实现收货地址下边的平行四边形彩色线条】

废话不多说&#xff0c;直接上代码&#xff1a; <div class"address-block" ><!-- 其他内容... --><div class"checked-ar"></div> </div> .address-block{height:120px;position: relative;overflow: hidden;width: 500p…

启动SpringBoot

前言&#xff1a;大家好我是小帅&#xff0c;今天我们来学习SpringBoot 文章目录 1. 环境准备2. Maven2.1 什么是Maven2.2 创建⼀个Maven项⽬2.3 依赖管理2.3.1 依赖配置2.3.2 依赖传递2.3.4 依赖排除2.3.5 Maven Help插件&#xff08;plugin&#xff09; 2.4 Maven 仓库2.6 中…

ERROR CoarseGrainedExecutorBackend: RECEIVED SIGNAL TERM

如果你的spark on yarn任务正常运行&#xff0c;能得到结果&#xff0c;但是日志中出现了如下的报错 看见这个报错不要慌张&#xff0c;这个是你开启了动态伸缩容器&#xff0c;且当这个容器触发了空闲关闭的阈值&#xff0c;默认是60秒&#xff0c;这时候该容器会被删除掉&a…

SpringBoot实战(三十二)集成 ofdrw,实现 PDF 和 OFD 的转换、SM2 签署OFD

目录 一、OFD 简介1.1 什么是 OFD&#xff1f;1.2 什么是 版式文档&#xff1f;1.3 为什么要用 OFD 而不是PDF&#xff1f; 二、ofdrw 简介2.1 定义2.2 Maven 依赖2.3 ofdrw 的 13 个模块 三、PDF/文本/图片 转 OFD&#xff08;ofdrw-conterver&#xff09;3.1 介绍&#xff1a…

QT6学习第四天 感受QT的文件编译

QT6学习第四天 感受QT的文件编译 使用纯代码编写程序新建工程 使用其他编辑器纯代码编写程序并在命令行运行使用 .ui 表单文件生成界面使用自定义 C 窗口类使用现成的QT Designer界面类 使用纯代码编写程序 我们知道QT Creator中可以用拖拽的方式在 .ui 文件上布局&#xff0c…

C++:用红黑树封装map与set-2

文章目录 前言一、红黑树封装map与set中const迭代器1. 框架的搭建2. set实现const迭代器3. map实现const迭代器 二、operator[ ]1. operator[ ]要达成的样子2. insert的改变 三. 解决insert里set中的问题四. 解决map中的operator[ ]总结用红黑树封装map与set代码 前言 前面我们…

微信小程序下拉刷新与上拉触底的全面教程

微信小程序下拉刷新与上拉触底的全面教程 引言 在微信小程序的开发中,用户体验至关重要。下拉刷新和上拉触底是提高用户交互体验的重要功能,能够让用户轻松获取最新数据和内容。本文将详细介绍这两个功能的实现方式,结合实际案例、代码示例和图片展示,帮助开发者轻松掌握…

【博主推荐】C#中winfrom开发常用技术点收集

文章目录 前言1.打开文件夹并选中文件2.窗体之间传参3.异步调用&#xff1a;让数据处理不影响页面操作4.创建一个多文档界面(MDI) 应用程序5.在WinForms中使用数据绑定6.在WinForms中后台使用控件的事件处理7.在WinForms中窗体跳转的几种方式8.后台处理方法中&#xff0c;调用窗…