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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【pyspark学习从入门到精通21】机器学习库_4

目录 评估模型的性能 保存模型 参数超参数调整 网格搜索 评估模型的性能 显然,我们现在想测试我们的模型表现得如何。PySpark 在包的 .evaluation 部分提供了一些分类和回归的评估方法: import pyspark.ml.evaluation as ev 我们将使用 BinaryClas…

788页页大型集团财务集中管控平台项目总体规划方案全文深入解读

“大型集团公司财务集中管控平台项目”的总体规划方案,内容全面且详细,主要涵盖以下几个方面: 1. 项目概述:介绍了项目的背景、目标、预期收益、设计思路与方法及原则。项目旨在全面提升财务集中管控能力,提高财务价值…

mac下安装Ollama + Open WebUI + Llama3.1

本文介绍mac下安装Ollama Open WebUI Llama3.1 8b具体步骤。 目录 推荐配置Ollama Open WebUI Llama3.1简介安装Ollama安装Open WebUI 推荐配置 m1以上芯片,16g内存,20g以上硬盘空间 Ollama Open WebUI Llama3.1简介 Ollama: 下载,管理…

C 语言函数递归探秘:从基础概念到复杂问题求解的进阶之路

我的个人主页 我的专栏:C语言,希望能帮助到大家!!!点赞❤ 收藏❤ 目录 什么是函数递归递归的基本组成递归的工作原理递归的优缺点递归的经典案例 5.1 阶乘计算5.2 斐波那契数列5.3 汉诺塔问题5.4 二分查找 递归的高级…

Rust语言俄罗斯方块(漂亮的界面案例+详细的代码解说+完美运行)

tetris-demo A Tetris example written in Rust using Piston in under 500 lines of code 项目地址: https://gitcode.com/gh_mirrors/te/tetris-demo 项目介绍 "Tetris Example in Rust, v2" 是一个用Rust语言编写的俄罗斯方块游戏示例。这个项目不仅是一个简单…

Web开发:使用stackexchange.redis库对redis进行增删改查

一、安装第三方库 二、官网 StackExchange.Redis |通用型 redis 客户端 三、连接示例 private static string redisConnectionString "localhost:6379,passwordyourpassword,defaultDatabase0,syncTimeout10000";private static string redisConnectionString &q…

3分钟快速掌握—— 进制转换,二进制计算【零基础】

1、计算机中的进制 1.1进制的三要素 进制 数码 基数 位权 十进制 0 1 2 3 4 5 6 7 8 9 10 .......10^2 10^1 10^0 10^-1 10^-2 10^-3..... 二进制 0 1 2 .......2^2 2^1 2^0 2^-1 2^-2 2^-3..... 八进制 0 1 2 3 4 5 6 7 8 .......8^2 8^1 8^0 8^-1 8^-2 8^-3.…

HDMI转VGA方案 LT8612UX(HDMI2.0) LT8612SX LT8511EX LT8522EX LT8612EX_e(HDMI1.4)

一、产品概述 LT8612UX是一款高性能的HDMI至HDMI&VGA转换器,由龙迅半导体公司推出。它能够将HDMI2.0数据流转换为HDMI2.0信号和模拟RGB信号,同时输出8通道I2S和SPDIF信号,实现高质量的7.1声道音频。该转换器采用最新的ClearEdge技术&…

华三(HCL)和华为(eNSP)模拟器共存安装手册

接上章叙述,解决同一台PC上同时部署华三(HCL)和华为(eNSP)模拟器。原因就是华三HCL 的老版本如v2及以下使用VirtualBox v5版本,可以直接和eNSP兼容Oracle VirtualBox,而其他版本均使用Oracle VirtualBox v6以上的版本,…

滚动的轮胎css3动画案例

目录 一、介绍 二、思路分析 三、轮胎制作 1.HTML代码 2.css 3.运行结果 四、轮胎动画 五、路的制作 1.HTML 2.css 六、运行结果 七、结束语 一、介绍 本节内容我们来制作一个轮胎滚动的案例,可以当作一个loading,其中我们的轮胎是纯css完成的,…

PointNet++论文复现

✨✨ 欢迎大家来访Srlua的博文(づ ̄3 ̄)づ╭❤~✨✨ 🌟🌟 欢迎各位亲爱的读者,感谢你们抽出宝贵的时间来阅读我的文章。 我是Srlua小谢,在这里我会分享我的知识和经验。&am…

基础入门-Web应用架构类别源码类别镜像容器建站模版编译封装前后端分离

知识点: 1、基础入门-Web应用-搭建架构上的技术要点 2、基础入门-Web应用-源码类别上的技术要点 一、演示案例-架构类别-模版&分离&集成&容器&镜像 1、套用模版型 csdn / cnblog / github / 建站系统等 安全测试思路上的不同: 一般…

【JMeter性能测试框架篇】Win10下搭建JMeter+Influxdb+Grafana可视化性能测试监控平台

一、前言 平常使用jmeter进行性能测试时,工具自带的监控方式无法清晰直观的查看结果,给我们性能测试带来很多不便。因此我们需要搭建一个可视化性能测试监控平台来实时监控性能测试结果,这里我们采用JMeterInfluxdbGrafana开源免费框架来实现…

Qt桌面应用开发 第八天(综合项目一 飞翔的鸟)

目录 1.鸟类创建 2.鸟动画实现 3.鼠标拖拽 4.自动移动 5.右键菜单 6.窗口透明化 项目需求: 实现思路: 创建项目导入资源鸟类创建鸟动画实现鼠标拖拽实现自动移动右键菜单窗口透明化 1.鸟类创建 ①鸟类中包含鸟图片、鸟图片的最小值下标和最大值…

【Linux庖丁解牛】—软件安装vim!

目录 1、Linux中的软件安装 a、源码安装 b、软件包安装——rpm c、包管理器安装 包管理器的使用演示(Ubuntu) 2、Linux编辑器——vim 2.1 vim的基本概念 2.2 vim的基本操作 2.3 vim正常模式命令集 2.4 vim末行模式命令集 3、vim编辑器环境的一…

【数据结构与算法】排序算法总结:冒泡 / 快排 / 直接插入 / 希尔 / 简单选择 / 堆排序 / 归并排序

1 排序 1.1 冒泡 内排序的交换排序类别 1.1.1 普通实现 public class BubbleSort {/*** 基本的 冒泡排序*/public static void bubbleSort(int[] srcArray) {int i,j; // 用于存放数组下标int temp 0; // 用于交换数值时临时存放值for(i0;i<srcArray.length-1;i){// j …

如何构建SAAS项目

在后台使用JDBC方式动态创建用户输入的数据库信息&#xff08;库名、地址、用户名、密码&#xff09; 执行预先写好的sql文件&#xff08;如mybatis的scriptRunner)执行建表语句及插入基础数据&#xff08;管理员用户、普通用户&#xff09;

MQ高级2:MQ的可靠性

欢迎来到“雪碧聊技术”CSDN博客&#xff01; 在这里&#xff0c;您将踏入一个专注于Java开发技术的知识殿堂。无论您是Java编程的初学者&#xff0c;还是具有一定经验的开发者&#xff0c;相信我的博客都能为您提供宝贵的学习资源和实用技巧。作为您的技术向导&#xff0c;我将…

transformer学习笔记-神经网络原理

在深度学习领域&#xff0c;transformer可以说是在传统的神经网络的基础上发展而来&#xff0c;着重解决传统神经网络长距离关联、顺序处理、模型表达能力等问题。 在学习transformer之前&#xff0c;我想&#xff0c;有必要先对传统的神经网络做简要的了解。 一、神经网络基本…

【前端】JavaScript中的字面量概念与应用详解

博客主页&#xff1a; [小ᶻ☡꙳ᵃⁱᵍᶜ꙳] 本文专栏: 前端 文章目录 &#x1f4af;前言&#x1f4af;字面量1. 数字字面量2. 字符串字面量3. 布尔字面量4. 空值字面量&#xff08;null&#xff09;5. 对象字面量6. 数组字面量7. 正则表达式字面量8. 特殊值字面量9. 函数字…