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.mzph.cn/pingmian/62263.shtml

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

相关文章

【C++】简单数据类型详解

博客主页: [小ᶻ☡꙳ᵃⁱᵍᶜ꙳] 本文专栏: C 文章目录 💯前言💯字符型(char)1.1 ASCII 码表 💯整型(int)2.1 整型的分类2.2 有符号和无符号整型2.3 跨平台差异2.4 整型数据类型…

Vue构建错误解决:(error TS6133)xxx is declared but its value is never read.

TypeScript会检查代码中未使用的变量,如果vscode安装了Vue的语法检查工具,会看到告警提示,再npm run build的时候,这个警告会变成错误 解决方案1:删除定义了未使用的变量 推荐使用这种方案,能保证代码的质…

泷羽sec---shell作业

作业一 写计算器 使用bc命令 需要进行安装bc 代码如下: #!/bin/bash echo "-----------------------------------" echo "输入 f 退出" echo "可计算小数和整数" echo "用法如:1.12.2" echo "------…

混淆零碎知识点

minifyEnabled true //混淆开关 zipAlignEnabled true // Zipalign优化 shrinkResources true // 移除无用的resource文件 (必须要混淆开了之后才才可以设置为true) proguard-rules.pro 为混淆文件 //整个文件保留 不被混淆 -keep class com.cn…

DeSTSeg: Segmentation Guided Denoising Student-Teacher for Anomaly Detection

DeSTSeg: Segmentation Guided Denoising Student-Teacher for Anomaly Detection 清华、苹果 个人感觉 Introduction 很自然的让读者理解作者问题的提出,也有例子直接证明了这个问题的存在,值得借鉴!! Related work写的也很不…

第T9周:Tensorflow实现猫狗识别(2)

🍨 本文为🔗365天深度学习训练营 中的学习记录博客🍖 原作者:K同学啊 具体实现 (一)环境 语言环境:Python 3.10 编 译 器: PyCharm 框 架: Tensorflow 2.10.0 (二)具体…

分布式锁的实现原理

作者:来自 vivo 互联网服务器团队- Xu Yaoming 介绍分布式锁的实现原理。 一、分布式锁概述 分布式锁,顾名思义,就是在分布式环境下使用的锁。众所周知,在并发编程中,我们经常需要借助并发控制工具,如 mu…

搭建帮助中心到底有什么作用?

在当今快节奏的商业环境中,企业面临着日益增长的客户需求和竞争压力。搭建一个有效的帮助中心对于企业来说,不仅是提升客户服务体验的重要途径,也是优化内部知识管理和提升团队效率的关键。以下是帮助中心在企业运营中的几个关键作用&#xf…

深入浅出剖析典型文生图产品Midjourney

2022年7月,一个小团队推出了公测的 Midjourney,打破了 AIGC 领域的大厂垄断。作为一个精调生成模型,以聊天机器人方式部署在 Discord,它创作的《太空歌剧院》作品,甚至获得了美国「数字艺术/数码摄影」竞赛单元一等奖。 这一事件展示了 AI 在绘画领域惊人的创造力,让人们…

python+docx:(二)页眉页脚、表格操作

目录 页眉页脚 表格 表格样式 插入表格 插入行/列 合并单元格 单元格 页眉页脚 页眉页脚操作需要访问文件的section,可通过添加页脚来添加页码。 from docx import Document from docx.enum.text import WD_PARAGRAPH_ALIGNMENT, WD_ALIGN_PARAGRAPH, WD_CO…

Matlab Simulink 电力电子仿真-单相电压型半桥逆变电路分析

目录 一、单相电压型半桥逆变电路仿真模型 1.电路模型 2.电路模型参数 二、仿真分析 三、总结 1.优缺点 2.应用场景 一、单相电压型半桥逆变电路仿真模型 1.电路模型 单相电压型半桥逆变电路是一种常见的逆变电路,主要用于将直流电源转换为交流电源。 &…

C++入门——“C++11-lambda”

引入 C11支持lambda表达式,lambda是一个匿名函数对象,它允许在函数体中直接定义。 一、初识lambda lambda的结构是:[ ] () -> 返回值类型 { }。从左到右依次是:捕捉列表 函数参数 -> 返回值类型 函数体。 以下是一段用lam…

如何保护LabVIEW程序免遭反编译

在正常情况下,LabVIEW程序(即编译后的可执行文件或运行时文件,如 .exe 或 .llb)无法直接被反编译出源码。然而,有一些需要特别注意的点: 1. LabVIEW的编译机制 LabVIEW编译器会将源码(.vi文件&a…

提升76%的关键-在ModelMapper中实现性能提升的几种方法

目录 前言 一、ModelMapper基础知识 1、深入ModelMapper 2、深入Configuration配置 3、深入MappingEngineImpl 二、默认加载模式 1、基础测试代码 三、持续优化,慢慢提升 1、增加忽略字段 2、设置忽略空值模式 3、设置命名模式 4、采用精准匹配模式 四、…

【C语言】结构体、联合体、枚举类型的字节大小详解

在C语言中,结构体(struct)和联合体(union) 是常用的复合数据类型,它们的内存布局和字节大小直接影响程序的性能和内存使用。下面为大家详细解释它们的字节大小计算方法,包括对齐规则、内存分配方…

【优选算法】位运算

目录 常见位运算总结1、基础位运算2、给一个数n,确定它的二进制位的第x位上是0还是13、将一个数n的二进制位的第x位改成14、将一个数n的二进制位的第x位改成05、位图的思想6、提取一个数n的二进制位中最右侧的17、将一个数n的二进制位中最右侧的1变为08、位运算的优…

jQuery九宫格抽奖,php处理抽奖信息

功能介绍 jQuery九宫格抽奖是一种基于jQuery库的前端抽奖效果。通过九宫格的形式展示抽奖项,用户点击抽奖按钮后,九宫格开始旋转,最终停在一个随机位置上,此位置对应的抽奖项为用户的中奖结果。 本文实现九宫格的步骤为&#xf…

AI界的信仰危机:单靠“规模化”智能增长的假设,正在面临挑战

每周跟踪AI热点新闻动向和震撼发展 想要探索生成式人工智能的前沿进展吗?订阅我们的简报,深入解析最新的技术突破、实际应用案例和未来的趋势。与全球数同行一同,从行业内部的深度分析和实用指南中受益。不要错过这个机会,成为AI领…

Unity类银河战士恶魔城学习总结(P149 Screen Fade淡入淡出菜单)

【Unity教程】从0编程制作类银河恶魔城游戏_哔哩哔哩_bilibili 教程源地址:https://www.udemy.com/course/2d-rpg-alexdev/ 本章节实现了进入游戏和死亡之后的淡入淡出动画效果 UI_FadeScreen.cs 1. Animator 组件的引用 (anim) 该脚本通过 Animator 控制 UI 元…

【C语言篇】探索 C 语言结构体:从基础语法到数据组织的初体验

我的个人主页 我的专栏:C语言,希望能帮助到大家!!!点赞❤ 收藏❤ 目录 什么是结构体结构体的定义与使用结构体内存布局嵌套结构体与指针结构体数组的操作结构体与函数结构体内存对齐机制位域与结构体的结合动态内存分…