【JavaEE】计算机是如何工作的

计算机是如何工作的

  • 冯诺依曼体系
  • 操作系统
    • 操作系统的概念与定位
    • 进程和任务
    • 操作系统对进程的管理
      • PCB 的相关信息

冯诺依曼体系

现代的大多数计算机, 都遵循冯诺依曼体系
在这里插入图片描述

  • CPU 中央处理器: 进行算术运算和逻辑判断
  • 存储器: 分为外存和内存, 用于存储数据(使用二进制方式存储)
  • 输入设备: 用户给计算机发号施令的设备
  • 输出设备: 计算机个用户汇报结果的设备.

CPU 内存 磁盘的比较

  • 存储空间上
    • CPU << 内存 < 磁盘
  • 读取速率上
    • CPU >> 内存 > 磁盘

寄存器 和 内存

  • 寄存器是CPU的一部分;
  • 寄存器, 和内存与磁盘相比, 存储空间更小, 访问速度更快, 成本更高, 掉电后数据丢失。
  • 寄存器的速度和内存的速度的差距是极大的,3~4个级别
  • 寄存器的用途,就是辅助 CPU 完成指令的执行;一条指令,不仅仅是指,指令本身,同时还有操作数,操作数就是要在寄存器中保存的

由于 寄存器 和内存之间速度和空间上差异太大了,难以协调工作,CPU往往又引入了“缓存”来调和 寄存器 和 内存之间的速度。

CPU 上要进行一系列运算,在运算过程中,要反复使用到一组内存中的数据,这些数据频繁使用,需要频繁访问内存,同时这些数据又比较多,在寄存器里又存不下,就可以放到缓存中了。

缓存的存储空阿金介于 寄存器 和 内存 之间

由于寄存器和内存之间,差距太大了,搞了一个缓存,还不太够用,后来又搞了一个。

在这里插入图片描述

操作系统

操作系统的概念与定位

  • 操作系统是一个软件, 是一个搞管理的软件

    1. 对下,要管理好各种硬件设备
    2. 对上, 要给各种软件提供好一个稳定的运行环境
    • 例如: CPU, 内存, 硬盘, 各种IO设备 … 他们都是需要相互配合才能进行良好的工作的, 操作系统这个软件, 就是总指挥!
  • 计算机如何给我们解决实际问题的?

    • 依靠一些软件, 软件能够在操作系统上运行
      • 硬件千差万别,如果每个写软件的人, 都需要考虑硬件的差别和兼容性, 这个事情门槛就非常搞了, 操作系统, 就把硬件屏蔽起来, 对软件这个里提供出一组API(系统调用), 让软件来进行调用
    • 因此, 操作系统 和 JDBC 这个层面上干的是类似的工作

进程和任务

  • 运行起来的程序叫做进程
    • 程序就是一个可以执行的文件, 只是磁盘上的一个东西
    • 如果双击程序, 此时操作系统, 就会把可执行文件中的数据和指令, 加载到内存中, 并且让 CPU 去执行这里的指令, 完成一系列的相关的工作. 运行起来的(动态的程序) 就是进程了
  • 进程能够干活, 说明进程能够消耗一定的硬件资源.
    • 可执行程序, 只是占用了硬盘空间; 而进程, 会消耗 CPU资源, 内存资源, 硬盘, 网络带宽…
  • 进程是系统分配硬盘资源的基本单位

操作系统对进程的管理

管理的概念

  • 为什么需要管理进程?
    • 一台正在运行的计算机, 一定会存在很多的进程正在运行;
    • 东西多了, 那很定就是需要进行管理, 才能让各个进程发挥自己的能力, 并将这些能力有效的组织起来, 高效的完成指定的工作
  • 如何进行有效的管理?
    • 管理不是"面面俱到" 不是"手把手", 这样会不仅累, 还低效
    • 高效管理的两大步骤: 先描述, 在组织
        1. 先描述: 提取要管理对象的基本信息与属性, 使用结构体或者类将其描述起来
        1. 在组织: 选用合适的数据结构, 对于新来的对象, 就通过 add 方法, 将新来的对象添加到数据结构中, 此时对于对象的管理, 就转化成对数据结构的增删改查操作了。

操作系统对进程的管理的组织过程

  1. 描述: 会用使用一个专门的结构体, 来记录一个进程里面的各个属性
    • PCB (进程控制块) --> 通用叫法, 各种系统里面描述的进程部分都可以称为PCB
      • 在Linux中PCB, 源码中是一个 task_struct 结构体
  2. 组织: 会使用一系列的数据机构, 把多个进程进行一个有效的组织, 随时方便进行遍历, 查找, 汇总数据 …
    • 通常是使用双链表这样的方式来进行组织的 – 这个是对Linux来说的
    • 当使用双链表来组织的时候:
      • a) 查看进程的列表, 本质就是在遍历这个链表
      • b) 创建一个进程, 就是创建了一个 PCB结构体,并且插入到链表上
      • c) 销毁一个进程, 本质就是把这个PCB结构体从链表上删除并释放

PCB 的相关信息

  1. pid 进程的标识
    • 同一个系统上, 统一时刻中, 每个进程的 pid 一定都是不同的
  2. 内存指针
    • 表示了该进程, 对于的内存资源是什么样的
    • 主要存储的就是从 exe 可执行文件中加载过来的指令(二进制的指令, 都是在程序员开发这个程序的时候, 最终编译生成的结果,也就是程序员写代码的逻辑) 和 数据
      • 指令相当于剧本, 进程就相当于表演的舞台
    • 还需要保存一些运行过程中的中间结果之类的的数据
  3. 文件描述符表
    • 和磁盘资源相关了
    • 磁盘是硬件, 应用程序一般是没法直接接触到 “硬件” 这一层的.
    • 实际上是操作系统抽象"文件"这样的概念, 程序操作的是文件, 文件实际上是存储在磁盘上的
    • 每个进程就会一个 “文件描述符表” 来记录 当前这个进程在使用哪些文件
      • 操作系统在打开一个文件, 就会产生一个 “文件描述表”(就像文件的身份表示一样, 当然只是在进程内部生效的)
      • 同时会使用文件描述符表(类似数组), 包文件描述符组织起来

CPU 与 进程 之间的联系

  • 进程是需要在CPU上来执行指令的
    • 每个进程, 要想执行里面的指令, 完成对应的任务, 都需要在 CPU 上执行!

    • 问题提出: 一台机器上, 进程同一时刻, 有百八十个, 但CPU只有一个? 怎么办?

      • 轮着用就可以了, 进程的调度
  • CPU的发展历程
    • CPU一开始是单核的, 只能运行同时一个进程在上面运行
    • 摩尔定律: 芯片的集成程度会成倍增长, 算力会提供一倍, 成本会减半
    • 但是随着时间的增长, 摩尔定律就失效了, 因为芯片再小, 经典物理学就失效了, 量子物理学此时就生效了 – 所以芯片的继承程度不会一直增加
    • 集成程度失效了, 那就靠数量来凑 – 多核CPU
    • 又提出来超线程概念: 一个CPU可以同时跑两个进程
    • 现在的CPU就是多核多线程 – 例如六核十二线程

CPU虽然可以让多个进程同时在一起跑来了, 但是还是不能满足所有进程, 因为CPU是有限的, 进程的数量远大与CPU的数量, 解决方法就是轮着来, 以下是解决方案:

  1. 并行: 同一时刻, 两个进程, 同时运行在两个 CPU 逻辑核心上
  2. 并发: 两个进程, 在同一个舞台上, 轮着上
  • 由于 CPU 切换进程速度极快, 微观上, 这两进程是串行执行的; 宏观上, 看起来就是这两个进程在 “同时” 执行的
  • 操作系统, 在调度这些进程的时候, 可能是按照并行的方式来调度, 也可能按照并发的方式来调度, 在应用程序这一层, 感知不到~
  • 由于感知不到是哪种方式调度, 并且这两种的调度方式, 宏观上的体现效果都是一样的, 通常也会用 “并发” 这个词来代指 “并行” 和 “并发”
  1. PCB 中关于进程调度相关的属性(这些属性也就描述了 进程 对于的 CPU 资源的使用情况) – 需要重点掌握
    1. 状态
    • 就绪状态: 一个进程已经随时做好了在CPU上执行的的准备
      • 就绪状态的意思是: 可能在CPU上跑, 也可能没有在CPU上, 而是已经做好了被CPU调度的准备
    • 阻塞状态 / 睡眠状态 : 有时候, 进程没有准备好呗调度到CPU上
    • 状态是可以相互转换的
    • 进程还有许多状态, 但是就绪和阻塞是最重要的两种状态
    1. 优先级
    • 系统给进程进行调度的时候, 也是不完全公平的, 也会根据优先级的不同, 来决定事件的分配权衡 – 这样就可以把系统资源调配给更重要的进程上了
    1. 上下文
    • 因为进程是轮着上的 – 所以一次执行, 大概率是无法完成指定的任务的, 这就需要保证下次上 CPU运行的时候, 能够找到上次运行的位置, 继续向后运行

    • 就好像存档 读档一样

    • 对于操作系统来说, 所记录的上下文是啥? 就是该进程在执行过程中, CPU寄存器中对应的数据
      • 这些寄存器, 有的是存一些中间结果, 有的是存一些特定含义的数据(比如下一条指令时在哪里, 比如当前的函数调用关系…)
      • 这些寄存器中的数据就需要在进程离开 CPU之间, 都保存好
      • 保存到对应进程的 PCB 的上下文字段中(内存中)
      • 下次该进程回到 CPU 执行, 就可以把PCB中的上下文里的数据恢复到对应的寄存器中, 这个时候就是和上次执行的状态一模一样了
    1. 记账信息
    • 相当于一个统计信息, 会统计每个进程在 CPU 上都执行了多久, 执行了多少指令.
    • 是对于进程调度工作的一个"兜底"
    • 用来调整如何分配给进程的调度时间

进程地址空间(虚拟地址空间)

  • 进程地址空间提出的原因
    • 每个进程都需要分配到系统资源, 内存也需要分配给进程; 如果内存直接分配给进程, 此时别的进程就可能看到其他进程的相关信息,并将其修改, 导致其他的进程崩溃;

    • 并且, 直接分配内存空间, 会存在分配地址范围的不同, 且是未知的, 每个进程就需要对不同的地址进行不同的处理, 这样的代码编写会变得复杂.

    • 所以为了解决上述的问题, 在进程和内存之间提出了一个进程地址空间的概念

  • 进程地址空间的解决原理:
    • 对于非法访问地址空间的问题: 进程现在只能找进程地址空间上的地址, 操作系统在对该进程地址空间上的地址进行判断, 如果是该进程的–也就是合法的, 那操作系统在通过该虚拟地址找到所对应的物理内存的地址, 如果虚拟地址是非法的, 那么操作系统就不会允许该进程使用该地址, 并直接向该进程发送中断信号.
    • 对于地址不统一, 编写代码复杂的问题: 每个进程得到都是用同样的进程地址空间, 进程地址空间设计的时候是一样的, 所以每一个进程看到自己的进程地址空间, 结构上都是一样的, 所以代码就可以统一对该进程地址空间进行编码, 对应实际物理内存空间就交给操作系统来分配了

进程间通信

  • 进程地址空间将进程独立开来, 每个进程只能看到自己的资源, 无法看到别人的资源, 也就无法影响别的进程, 但是, 两个进程也就无法进行信息交流了
  • 但是, 有时候, 我们需要两个进程之间进行通信 – 所以, 我们就提出了进程间通信的概念
  • 进程间通信核心: 让两个不同的进程看到同一份资源!
  • 进程间通信方案:
      1. 基于文件
      1. 基于网络

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

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

相关文章

竞赛 深度学习乳腺癌分类

文章目录 1 前言2 前言3 数据集3.1 良性样本3.2 病变样本 4 开发环境5 代码实现5.1 实现流程5.2 部分代码实现5.2.1 导入库5.2.2 图像加载5.2.3 标记5.2.4 分组5.2.5 构建模型训练 6 分析指标6.1 精度&#xff0c;召回率和F1度量6.2 混淆矩阵 7 结果和结论8 最后 1 前言 &…

竞赛选题 深度学习YOLO抽烟行为检测 - python opencv

文章目录 1 前言1 课题背景2 实现效果3 Yolov5算法3.1 简介3.2 相关技术 4 数据集处理及实验5 部分核心代码6 最后 1 前言 &#x1f525; 优质竞赛项目系列&#xff0c;今天要分享的是 &#x1f6a9; 基于深度学习YOLO抽烟行为检测 该项目较为新颖&#xff0c;适合作为竞赛课…

简单测试一下 展锐的 UDX710 性能

最近在接触 联通5G CPE VN007 &#xff0c;发现使用的是 展锐的Unisoc UDX710 CPU&#xff0c;正好简单的测试一下这颗CPU CPU信息 UDX710 是一颗 双核 ARM Cortex-A55 处理器&#xff0c;主频高达 1.35GHz processor : 0 BogoMIPS : 52.00 Features : fp…

Django中ORM框架的各个操作

我们会好奇&#xff0c;python这么简洁的语言&#xff0c;数据查询是如何做的呢&#xff1f;我将进一步详细和深入地介绍Django中ORM框架的各个方面&#xff0c;包括MySQL的增删改查和复杂查询。让我们分步骤进行。 ORM框架介绍 Django的ORM框架是一个用于与数据库进行交互的工…

Spring Boot项目中使用 TrueLicense 生成和验证License(附源码)

1、Linux 在客户linux上新建layman目录&#xff0c;导入license.sh文件&#xff0c; [rootlocalhost layman]# mkdir -p /laymanlicense.sh文件内容&#xff1a; #!/bin/bash # 1.获取要监控的本地服务器IP地址 IPifconfig | grep inet | grep -vE inet6|127.0.0.1 | awk {p…

【LeetCode】 412. Fizz Buzz

题目链接 文章目录 Python3 【O(n) O(1)】C.emplace_back() 【C 11 之后】 Python3 【O(n) O(1)】 初始版本 class Solution:def fizzBuzz(self, n: int) -> List[str]:ans []for i in range(1, n1):if i % 5 0 and i % 3 0:ans.append("FizzBuzz")elif i % …

07 创建型模式-单例模式

1.单例模式介绍 单例模式&#xff08;Singleton Pattern&#xff09;是 Java 中最简单的设计模式之一&#xff0c;此模式保证 某个类在运行期间&#xff0c;只有一个实例对外提供服务&#xff0c;而这个类被称为单例类。 2.使用单例模式要做的两件事 保证一个类只有一个实例…

【API篇】五、Flink分流合流API

文章目录 1、filter算子实现分流2、分流&#xff1a;使用侧输出流3、合流&#xff1a;union4、合流&#xff1a;connect5、connect案例 分流&#xff0c;很形象的一个词&#xff0c;就像一条大河&#xff0c;遇到岸边有分叉的&#xff0c;而形成了主流和测流。对于数据流也一样…

GitHub-使用 Git工具 创建密钥id_rsa.pub

快速导航 步骤1 打开Git Bash步骤2 输入指令【ssh-keygen】步骤3 打开创建的公钥文件步骤4 复制其中所有内容步骤5 打开GitHub中的Setting界面步骤6 添加SSH keys 步骤1 打开Git Bash 打开Git Bash 工具 步骤2 输入指令【ssh-keygen】 输入指令【ssh-keygen】&#xff0c;并…

【四:httpclient的使用】

目录 1、Demo案例2、请求一个带cookies的get请求3、请求一个带cookies的post请求案例一&#xff0c;案例二的properties的配置 1、Demo案例 public class MyHttpClient {Testpublic void test1() throws IOException {//用来存放我们的结果String result;HttpGet get new Htt…

安装VSCode,提升工作效率!iPad Pro生产力进阶之路

文章目录 前言1. 本地环境配置2. 内网穿透2.1 安装cpolar内网穿透(支持一键自动安装脚本)2.2 创建HTTP隧道 3. 测试远程访问4. 配置固定二级子域名4.1 保留二级子域名4.2 配置二级子域名 5. 测试使用固定二级子域名远程访问6. iPad通过软件远程vscode6.1 创建TCP隧道 7. ipad远…

模型量化笔记--KL散度量化

KL散度量化 前面介绍的非对称量化中&#xff0c;是将数据中的min值和max值直接映射到[-128, 127]。 同样的&#xff0c;前面介绍的对称量化是将数据的最大绝对值 ∣ m a x ∣ |max| ∣max∣直接映射到127。 上面两种直接映射的方法比较粗暴&#xff0c;而TensorRT中的int8量化…

openGauss学习笔记-102 openGauss 数据库管理-管理数据库安全-客户端接入之查看数据库连接数

文章目录 openGauss学习笔记-102 openGauss 数据库管理-管理数据库安全-客户端接入之查看数据库连接数102.1 背景信息102.2 操作步骤 openGauss学习笔记-102 openGauss 数据库管理-管理数据库安全-客户端接入之查看数据库连接数 102.1 背景信息 当用户连接数达到上限后&#…

小黑子—Maven基础

Maven基础 一 小黑子的Maven学习1. Mavn的介绍2. Maven基础概念2.1 仓库2.2 坐标2.3 仓库配置 3. 手动写一个maven项目3.1 Maven项目构建命令3.2 插件创建工程 4. IDEA下的maven项目5. 依赖管理5.1 依赖配置5.2 依赖传递5.3 可选依赖&#xff08;不透明&#xff09;5.4 排除依赖…

【一:实战开发testng的介绍】

目录 1、主要内容1.1、为啥要做接口测试1.2、接口自动化测试落地过程1.3、接口测试范围1.4、手工接口常用的工具1.5、自动化框架的设计 2、testng自动化测试框架基本测试1、基本注解2、忽略测试3、依赖测试4、超时测试5、异常测试6、通过xml文件参数测试7、通过data实现数据驱动…

UWB十个知识点

UWB是一直被基于厚望的高精度定位技术 1&#xff1a;定位技术及UWB特点 位置空间感知技术包括了GNSS、RFID、蓝牙和UWB&#xff0c;在室内和区域空间测量最具技术优势的技术是UWB。 GNSS是广域定位技术&#xff0c;室内以及建筑物旁边等场景&#xff0c;GNSS无法实现定位&am…

【微服务 SpringCloud】实用篇 · Ribbon负载均衡

微服务&#xff08;4&#xff09; 文章目录 微服务&#xff08;4&#xff09;1. 负载均衡原理2. 源码跟踪1&#xff09;LoadBalancerIntercepor2&#xff09;LoadBalancerClient3&#xff09;负载均衡策略IRule4&#xff09;总结 3. 负载均衡策略3.1 负载均衡策略3.2 自定义负载…

企业IT资产设备折旧残值如何计算

环境&#xff1a; 企业/公司 IT资产 问题描述&#xff1a; 企业IT设备折旧残值如何计算&#xff1f; 解决方案&#xff1a; 1.按三年折旧 净值原值-月折旧额折旧月份 &#xff0c; 月折旧额原值(1-3%)/36 折旧月份ROUND(E2*(1-3%)/36,2) 2.净值E2-F2*G2

vue使用pdf 导出当前页面,(jspdf, html2canvas )

需要安装两个插件 npm install html2canvas jspdfyarn add html2canvas jspdf<div class"app-container" id"pdfPage">我是内容 </div><el-button size"mini" click"onExportPdf">导出数据</el-button>onexp…

代码随想录算法训练营第23期day24|回溯算法理论基础、77. 组合

目录 一、回溯算法基础 回溯法模板 二、&#xff08;leetcode 77&#xff09;组合 剪枝 一、回溯算法基础 1.回溯的本质是穷举&#xff0c;穷举所有可能&#xff0c;然后选出想要的答案&#xff08;为了提升效率&#xff0c;最多再加一个剪枝&#xff09; 2.回溯法解决的…