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

简单介绍计算机的工作过程

目录

前言

一、CPU的基本工作流程

1. CPU 指令的执行过程

2. CPU指令执行需要关注的细节

二、简单理解操作系统

1. 操作系统的作用

2. 进程

1. 进程在系统中管理的两个步骤

2. PCB 的核心属性

3. 进程的内存管理

4. 进程间通信

 


前言

本文主要介绍了CPU的基本工作原理和操作系统中进程管理的核心概念。CPU执行指令的过程包括取指、译码和执行三个阶段,需要关注指令集、操作数和执行效率等问题。操作系统的作用在于管理硬件设备和提供稳定的软件运行环境。进程作为系统资源分配的基本单位,其管理涉及描述(PCB)和组织(链表)两个步骤。PCB包含PID、内存指针、文件描述符表等核心属性,支持进程调度和并发执行。进程间通过公共空间进行通信,而内存管理则保证各进程内存空间的独立性。文章通过具体示例和概念解析,帮助读者理解计算机系统的基本运行机制。


一、CPU的基本工作流程

1. CPU 指令的执行过程

以面指令表为例:

指令功能说明4位 opcode操作的地址或者寄存器
LOAD_A从RAM的指定地址,将数据加载到A寄存器00104位RAM地址
LOAD_B从RAM的指定地址,将数据加载到B寄存器00014位RAM地址
STORE_A将数据从A寄存器写入到RAM的指定地址01004位RAM地址
ADD计算两个寄存器的数据和,将结果保存到第二个寄存器1000

2位的寄存器ID

2位的寄存器IDID

注意:寄存器 A 为 00,B 为 01;
指令的运行周期:

地址数据
000101110
100011111
210000100
301001101
400000000
500000000
600000000
700000000
800000000
900000000
1000000000
1100000000
1200000000
1300000000
1400000011
1500001110

假设从地址 0 的位置开始执行:

  1. 读取指令:00101110;
  2. 解析指令:opcode 为 0010,内存地址为 1110;
  3. 执行指令:将内存地址 1110 的值(3)放到寄存器 A 中;
  4. 读取指令:00011111;
  5. 解析指令:opcode 为 0001,内存地址为 1111;
  6. 执行指令:将内存地址 1111 的值(14)放到寄存器 B 中;
  7. 读取指令:10000100;
  8. 解析指令:opcode 为 1000,寄存器的 ID 分别为 01 和 00;
  9. 执行指令:将寄存器 01(14) 和 00(3) 的值累加放到寄存器 00 中(17);
  10. 读取指令:01001101;
  11. 解析指令:opcode 为 0100,内存地址为 1101;
  12. 执行指令:将寄存器 A 的值保存到内存地址 1101(17);

2. CPU指令执行需要关注的细节

  1. CPU要执行的指令是在内存中的(冯诺依曼体系结构的基本设定是让执行单元和存储单元解耦合);
  2. CPU要想执行指令,需要先从内存中取指令,再解析指令,之后再执行指令;
  3. 取指令需要从内存中读取指令到 CPU 寄存器中,取指令操作非常耗时,读取内存相对于 CPU 计算,开销大得多,因此 CPU 通过缓存,流水线等技术优化这里的效率;
  4. CPU 解析指令需要用到指令表,不同架构的 CPU 支持的指令表不同(x86 和 arm 是不同的),指令表的细节保存在 CPU 中,CPU 很容易识别;
  5. 指令在执行的过程中会带一些操作数,不同的指令操作数的含义不同;
  6. CPU 的重要参数,主频,可以近似看成一秒钟 CPU 可以执行的指令数个数;

二、简单理解操作系统

1. 操作系统的作用

操作系统的主要作用有两方面:

1. 统一管理硬件设备;

2. 给其它软件提供稳定的运行环境;

由于不同 CPU 的指令集是不同的,操作系统提供的 API 也是不同的,通常程序不能跨平台使用;

但是 JAVA 的虚拟机在操作系统 API 的基础上又进行了封装,能够支持 JAVA 程序跨平台使用;

多任务操作系统:指的是同一个时刻可以运行多个任务;

单任务操作系统:同一时刻只能运行一个程序;

目前所使用的操作系统,大多属于“多任务操作系统”;

2. 进程

进程是操作系统提供的一种软件资源;

进程是系统分配资源的基本单位;

操作系统的任务和进程是等价的,任务就是进程;

1. 进程在系统中管理的两个步骤

1. 描述

通常是使用类或者结构体的形式,把进程的属性都列出来;

操作系统是使用 C/C++ 实现的,因此可以使用结构体来把进程的属性都列出来;

表示进程信息的结构体,也叫做 PCB(Process Control Block);

在 Linux 上,PCB 是一个叫做 task_struct 的一个结构体;

2. 组织数据

使用一定的数据结构,把这些结构体/对象,组织起来;

在 Linux 中,使用链表这样的数据结构把若干个 task_struct 连起来;

当我们看到任务管理器中查看进程的时候,就是操作系统遍历链表,并展示主要信息的过程;

如果运行一个新的程序,系统就会多出一个进程。新增加的这个程序对应一个新的 PCB,并且把这个 PCB 加入到链表中;

如果程序运行结束退出程序,就会把对应的 PCB 从链表上删除,并释放对应的 PCB 资源;

实际中的操作系统,是一个更加复杂的链式结构,不仅仅是一个简单的单链表;

2. PCB 的核心属性

PCB 是一个非常庞大的结构体,每个结构体有上百个属性,下面介绍几个核心的属性;

PCB 中的核心属性:

PID 表示进程的身份标识:

  • PID 是一个简单的不重复的整数,类似数据库中表的自增主键;
  • 同一台机器上,同一时刻,每个进程的 PID 是不重复的;

内存指针:描述进程内存资源使用的详细情况;

  • 进程运行过程中需要消耗一些系统资源,内存是一种重要资源;
  • 内存必须要先分配才能使用,不能随意使用;
  • 内存指针就是描述某个进程都能使用哪些内存;
  • 进程运行起来的时候需要指令和数据;
  • 进程也需要知道,哪个内存地址存的是指令,哪个内存地址存的是数据;
  • 进程创建之前需要在内存中加载指令和数据,再创建进程,开始执行;

文件描述符表:描述了进程所涉及的硬盘相关的资源;

  • 进程也需要经常访问硬盘;
  • 操作系统对于硬盘资源进行了抽象封装,按照文件的方式进行操作;
  • 进程要操作文件,需要先打开文件;
  • 打开文件之后,文件描述符表中会新增一个记录,用于记录文件的相关信息;

进程指令在 CPU 上的执行方式;

  • 一个 CPU 可能有一个核心,也可能有多个核心;
  • 同一时刻,同一个 CPU 核心只能执行一个指令;
  • 实际中操作系统往往都是多任务操作系统,往往需要执行几十个甚至上百个进程,远远大于 CPU 核心数;为了将所有进程都运行起来,采用了分时复用的方式,让多个进程的指令轮流执行,也就是并发;只要进程的切换速度足够快,人无法感知到进程的切换过程,看起来就是同时执行的;但是如果进程的数量过于多,就会出现卡顿的现象;
  • 如果 CPU 有多个核心,就可以同时执行多个进程的指令,是并行执行;
  • 多个进程的指令在一个 CPU 核心上轮流执行,是并发执行;
  • 并发执行和并行执行,统称为并发执行,并行和并发往往是同时存在的;
  • 不同进程指令在 CPU 上执行的时间占比就是占用 CPU 资源的占比;

因此,进程的调度实际上是分时复用,并发执行的;下面继续介绍 PCB 中的核心属性:

进程状态:描述某个进程是否能够去 CPU 上执行:

  • 如果进程是就绪状态,可以随时去 CPU 上执行;
  • 如果进程是阻塞状态,表示目前不能去 CPU 上执行;

优先级:多个进程等待系统的调度,往往多个进程的优先级是不同的;

记账信息:统计不同进程在 CPU 上的执行时间;

  • CPU 会根据记账信息,进一步调整进程的调度策略;
  • 避免出现某一个进程的指令没有去 CPU 上执行,确保每一个进程的指令都能够获取 CPU 资源,指令都能够在 CPU 上执行;

上下文:是支撑进程调度的重要属性,保存了进程上一次执行完时寄存器的值;

  • 保存上下文:把 CPU 的关键寄存器中的数据,保存到内存中(PCB的上下文属性中);
  • 恢复上下文:把内存中关键寄存器中的数据,加载到 CPU 的对应寄存器中;

3. 进程的内存管理

不同的进程使用内存的不同区域,通常来说,进程之间的的内存时彼此独立,互不干扰的;

4. 进程间通信

进程间的通讯往往会借助一些公共空间,借助公共空间来交互数据;

Java 中往往会借助文件和网络进行进程间通讯;


http://www.xdnf.cn/news/1354897.html

相关文章:

  • 激光雷达工作原理
  • 算法训练营day59 图论⑨ dijkstra(堆优化版)精讲、Bellman_ford 算法精讲
  • C++初阶(2)C++入门基础1
  • 第1篇:走进日志框架的世界 - 从HelloWorld到企业级应用
  • 为什么在WHERE子句里使用函数,会让索引失效
  • 复杂工业场景误报率↓85%!陌讯多模态火焰识别算法实战解析
  • Codeforces Round 1043 (Div. 3)(A-E)
  • 历史数据分析——半导体
  • 【科研绘图系列】浮游植物的溶解性有机碳与初级生产力的关系
  • 【Game】Powerful——Punch and Kick(12.2)
  • ComfyUI Portrait Master肖像大师中文版
  • 【51单片机】【protues仿真】基于51单片机宠物投食器系统
  • Redis 持久化策略
  • 如何创建自己的 Minecraft 世界
  • MiMo-VL 技术报告
  • rust语言 (1.88) egui (0.32.1) 学习笔记(逐行注释)(九)数值拖拽控件、进度条、滑动条
  • 【51单片机】【protues仿真】 基于51单片机储物箱系统
  • 双指针:三数之和
  • Sentinel相关记录
  • OSI参考模型TCP/IP模型 二三事
  • docker的基础配置
  • redis----hash类型详解
  • Python的标准库之时间库(小白五分钟从入门到精通)
  • 终端复用工具 tmux 的使用方式与推荐配置
  • Autosar CAN开发06(CAN通讯开发需求-CAN矩阵)
  • AI+预测3D新模型百十个定位预测+胆码预测+去和尾2025年8月23日第168弹
  • 【机器学习深度学习】模态与多模态的概念
  • 使用 AD 帐户从 ASP.NET 8 容器登录 SQL Server 的 Kerberos Sidecar
  • uniapp对接一键登录
  • FL Studio Win版.exe安装教程(直接安装版/详细步骤/附安装包下载)