当前位置: 首页 > news >正文

【JavaEE】认识计算机(二)

碎碎念: 对于本文所涉及的知识点,作者暂时只做了解,不算完整,会补的会补的(咯咯咯)~~

一、CPU执行程序(指令)过程

指令就是CPU能够理解并执行的“命令”,是软件与硬件之间的沟通语言
例如:妈妈让你去买瓶可乐做鸡翅,对你来说买可乐这就是一条指令

指令包含操作码和操作数,也就是
指令 = 操作码 + 操作数

那么CPU是如何执行指令的呢?

CPU对于一条指令的处理过程可以简要描述为以下四个步骤

  • 读取指令——从内存中读取下一条要执行的指令,送入 CPU 的指令寄存器暂存
  • 译码指令——指令译码器解析指令的含义,确定要执行的操作及操作对象
  • 执行指令——运算器根据译码结果,执行具体操作
  • 写回指令——将执行结果保存到指定的寄存器或内存中,为下一条指令做准备

还是上面的例子,妈妈给你十块钱让你去买瓶可乐(读取指令),你接过这十块钱并准备去买可乐(译码指令),去楼下超市拿了瓶可乐并付钱,老板找还六块钱(执行指令),你拿着可乐和零钱回家(写回指令)

二、操作系统

操作系统是计算机中最重要的软件,抽象来说,它是一个搞管理的软件
操作系统有两个基本功能

  1. 管理各种硬件设备(通过驱动程序间接管理)
  2. 给应用程序提供一个稳定的运行环境

稳定的运行环境就是指,计算机中的各种应用程序在工作过程中是互不干扰的,即使某一个程序出现问题(比如程序崩溃),也不会影响其他应用程序的运行

2.1 进程

进程,顾名思义,就是一个正在进行的程序

操作系统如何管理进程?
主要分为两步

  1. 定义数据
  2. 组织数据

定义数据:定义一个结构体/对象,通过对象的各种属性,保存进程的各种信息

这里会用到一个进程控制块(PCB),它是一个非常大的结构体,包含很多属性

组织数据:采用数组、链表、哈希等数据结构集中存储,方便后续增删查改

对于LInux系统,它使用链表的形式将很多PCB串到一起

那么如何创建一个新的进程呢?

  • 创建一个PCB,初始化PCB中的各个属性
  • 将创建好的PCB添加到链表上

和链表节点的处理方法相似,要销毁一个进程,就要在链表上把这个PCB找到,然后从链表上删除

同样的,想要查看某个进程的信息,就要先在链表上找到对应的PCB,并将其显示到界面上;若想查看所有进程,则要取出链表上的每个元素并显示到界面上

PCB中主要属性

  1. pid(也叫进程id),是进程的身份标识符
  2. 内存指针(实际上就是一组指针),进程通过这组指针获得执行的指令和以来数据的位置
  3. 文件描述符表,进程运行过程中需要和硬盘进行交互,而硬盘上的数据是以文件的形式来组织的,进程在读写文件的时候,就需要先打开对应文件,每打开一个文件就会把这个文件的信息保存到文件描述符表中,表中的每个项就对应着每一个打开的文件
    *操作系统中,会把很多资源(不一定是硬盘上的资源)都抽象成文件来表示,比如操作系统管理网卡的时候,就是将其当作“文件”一样管理

由上述可见,进程是操作系统中资源分配的基本单位
其实这句话不够严谨,具体内容我们下节揭晓~~

既然CPU中会运行很多不同的进程,那么如何管理这些进程就成了首要问题,这就涉及到另一个概念——进程调度,换句话说,就是如何使用有限的CPU核心,完成远多于核心数的进程

进程调度相关内容也是PCB中的几个重要属性

  1. 进程状态,进程有很多状态,其中两个最为典型,一个是就绪状态(随叫随到),另一个是阻塞状态(说明进程当前不适合到CPU上执行)
    操作系统中一般不区分就绪和执行状态,都是就绪状态
  2. 进程优先级,所有进程在CPU上运行的机会不是均等的,某些进程优先级更高一点,占用更多的CPU资源(进程的优先级与窗口的显示顺序无关)
  3. 进程上下文,由于进程调度,一个进程执行一会后会失去CPU使用权,过一段时间再回到CPU上继续执行,将沿用上次执行到的状态,继续往下执行,上次执行的状态和进展就是进程的上下文
    进程在CPU上运行的过程中,CPU上的各种寄存器,就表示了当前进程运行的中间状态
    保存上下文:把CPU中的这些寄存器的值保存到内存中(PCB的对应属性中)
    恢复上下文:把PCB中保存的属性填写回对应的寄存器中
  4. 进程记账记录,统计功能,统计每个进程在CPU上运行了多久,如果发现某个进程很久没有吃到CPU资源,就会给这个进程倾斜一些资源

与多进程相似的还有一个概念:分时复用
简单来说,就是把一个单位时间分成很多份,
第一份,运行进程1的指令;
第二份,运行进程2的指令;
……
因为CPU运行速度足够快,上述的切换过程也会非常快,快到超出人类的反应时间,使人看起来感觉好像这些进程在“同时执行”一样,当然如果运行的任务实在太多了,人也是有可能感知到这个卡顿的过程


两个常见的概念

并发执行

  • 一个CPU核心上,按照分时复用执行多个进程的方式,因为需要并发执行,所以操作系统需要进行进程的快速切换,也就是进程调度

并行执行

  • 多个CPU核心上,同时执行多个进程的方式

程序员写代码的时候无法判断CPU是并行还是并发执行,因此并行和并发统称为并发
现代CPU运行进程时,并发和并行是同时存在的

http://www.dtcms.com/a/293296.html

相关文章:

  • useOptimistic介绍和使用闭坑
  • 机器学习/归一化
  • MS523NA非接触式读卡器 IC
  • 如何在 Windows 10 下部署多个 PHP 版本7.4,8.2
  • adb的使用
  • Java(Set接口和HashSet的分析)
  • SpringBoot全局异常报错处理和信息返回
  • 米家打印机驱动:Wi-Fi 无线打印丝滑顺畅不卡顿,从此告别对打印机干瞪眼
  • Java基础 7.22
  • 原型模式及优化
  • C++11相关知识点
  • 自动化测试报告生成【Allure】
  • Linux--指令初识
  • 一文读懂DQN改进算法(Double DQN+Dueling DQN)—强化学习(7)
  • Docker实战系列:使用Docker部署AI SSH客户端工具IntelliSSH
  • MCP消息协议和传输协议(Java角度)
  • 航班调度优化策略全局概览
  • TCP day39
  • 帆软实现审批流配置
  • C++ 模板库map数据结构的概念和使用案例
  • Rabbit安装
  • vben ruoyi 数据字典解决方案
  • 16.多生成树MSTP
  • Linux文件系统理解1
  • Selenium+Java 自动化测试入门到实践:从环境搭建到元素操作
  • ubuntu22.04 录视屏软件推荐
  • Three.js 实现梦幻星河流光粒子特效原理与实践
  • Redis 5.0中的 Stream是什么?
  • C语言(20250722)
  • 21. `taskSlotTable`和`jobLeaderService`启动