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

【系统编程】进程初识

文章目录

  • 一、进程和程序
    • 1.1 程序
    • 1.2 进程
    • 1.3 一对多关系
  • 二、并发和并行
    • 2.1 定义
    • 2.2 单道程序设计
    • 2.3 多道程序设计
  • 三、MMU
    • 3.1 作用
    • 3.2 工作流程
  • 四、PCB(进程控制块)
  • 五、进程状态

一、进程和程序

1.1 程序

  • 存储在磁盘上的可执行文件(如 .out.exe 等)。
  • 静态的,不占用 CPU、内存等系统资源,只占 磁盘空间
  • 是还没有被执行的代码集合,比如编译生成的 ELF 文件。

程序就像是一份 剧本,写好了但还没演出。

1.2 进程

  • 程序运行后的实例,是程序被加载进内存、被操作系统调度执行的过程。

  • 动态的,会占用系统资源:

    • 内存空间
    • CPU 占用
    • 打开的文件描述符(I/O)
    • 环境变量、用户信息、当前目录等
  • 每个进程有自己独立的 运行环境资源上下文

  • 进程生命周期:创建 ➜ 就绪 ➜ 运行 ➜ 阻塞(等待)➜ 终止

进程就像是 剧本正在舞台上被演员表演,需要演员、道具、灯光等各种资源。

  • 操作系统通过“进程”来管理和调度一切任务

    • 打开终端、运行程序、看视频、浏览网页本质上都是启动了不同的进程。
  • 进程是 系统资源分配和调度的基本单位,对操作系统来说,一切任务都以进程的形式存在

1.3 一对多关系

一个程序可以创建出多个进程:

  • 多次运行同一个程序 ➜ 会产生多个互不影响的进程
  • 父子进程或线程池中也是同一程序产生多个进程/线程的常见场景

二、并发和并行

2.1 定义

概念并发(Concurrency)并行(Parallelism)
本质多个任务交替执行,但同一时刻只运行一个多个任务同时执行,每个任务由独立处理器处理
依赖条件不需要多个 CPU,单核也可以实现需要多个 CPU 核或处理器
类比一个厨师轮流炒几个菜,快速切换多个厨师同时炒多个菜
实现方式分时操作系统 + 快速切换线程或进程多核处理器 + 多个线程或进程并发执行
感官效果看上去“同时运行”但本质是快速切换真正的“同时运行”
  • 并发注重 任务管理,并行注重 资源调度

2.2 单道程序设计

  • 系统一次只能运行一个程序/任务,其他程序必须等当前程序执行完后再运行。
  • 如果该程序阻塞(如等待输入),CPU 就会空闲浪费
  • 效率极低,资源利用率低
  • 只存在于计算机发展的早期,已被淘汰。

2.3 多道程序设计

  • 系统同时装入多个程序(多道程序),

  • 让多个程序轮流使用 CPU、交替执行,从而提高 CPU 利用率。

  • 利用了分时系统 + 中断机制,是现代操作系统的基础。

    • 时钟中断:

      • 是硬件定时器触发的中断,每隔一段时间通知操作系统中断当前程序。
      • 由硬件实现,程序不能拒绝。
    • 作用:

      • 强制打断当前进程
      • 触发操作系统进行 进程调度
      • 保证每个进程有“公平”的运行机会

总结

  • 多个程序在 内存中共存
  • CPU 资源 轮流分配分时复用
  • 使用 中断机制 实现自动切换任务
  • 即使某个程序阻塞,CPU 也不会闲着,马上调度别的任务运行

三、MMU

在这里插入图片描述

  • 英文全称:Memory Management Unit
  • 中文名:内存管理单元
  • 作用:位于 CPU 内部,负责管理内存访问。
    • 实现 Linux 中的虚拟内存(如页式管理、段页式管理等)
    • 保护操作系统内核与用户程序的内存空间不互相干扰
    • 提高内存管理的灵活性(如动态加载、按需分配)

3.1 作用

  • 地址转换

    • 将 CPU 生成的虚拟地址(Virtual Address)转换为物理地址(Physical Address)
    • 这是虚拟内存机制的核心功能
  • 访问权限控制

    • 不同进程或用户访问内存时,MMU 检查是否有权限
    • 防止非法访问,增强系统安全性
  • 支持多进程、多用户操作系统

    • 每个进程有独立的虚拟地址空间
    • MMU 实现地址空间隔离,提高系统稳定性和安全性

3.2 工作流程

  1. CPU 产生虚拟地址

    • 程序代码中使用的是虚拟地址(如指针、数组访问等)
  2. MMU 进行地址映射

    • 将虚拟地址映射为实际的物理地址
    • 依据页表、段表等数据结构完成转换
  3. 访问主存

    • MMU 将物理地址送到内存控制器,从主存中读写数据
  4. 数据送回 CPU

    • CPU 最终拿到对应的数据,继续执行程序

四、PCB(进程控制块)

  • 结构体名称struct task_struct
  • 作用:操作系统用于描述和管理一个进程的全部信息。
  • 查看结构体实际定义:
vim /usr/src/linux-headers-$(uname -r)/include/linux/sched.h

在这里插入图片描述

核心字段:

  1. 进程ID(pid):唯一标识进程
    • 字段类型:pid_t
    • 作用:每个进程的唯一标识,是一个非负整数
  2. 进程状态:初始、就绪、运行、挂起(阻塞)、终止等
  3. CPU寄存器信息:进程切换时保存/恢复
    • 保存进程切换时的 CPU 寄存器内容(比如 PC、SP、通用寄存器等
    • 保证进程恢复运行时从上次中断的地方继续执行
  4. 虚拟地址空间:描述进程使用的内存布局
  5. 文件描述符表:管理进程打开的所有文件
  6. 用户ID / 组ID:权限控制
  7. 信号信息:处理异步事件(如中断)
  8. 当前工作目录:进程所在的目录
  9. umask掩码:新建文件默认权限控制
  10. 会话和进程组:用于终端控制与作业管理
  11. 资源上限:如最大文件数、内存限制等

五、进程状态

  • 创建态(New):进程刚被创建,还未投入运行。
  • 就绪态(Ready):进程已经准备好执行,但还未被调度到 CPU,等待CPU划分时间片。
  • 运行态(Running):进程正在使用 CPU 执行。
  • 阻塞/挂起态(Blocked):进程正在等待某个事件或资源,主动放弃CPU使用权,暂时不能运行。
  • 终止态(Exit):进程执行完毕或被终止,进入清理阶段。

在这里插入图片描述

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

相关文章:

  • 用JOIN替代子查询的查询性能优化
  • GESP2023年12月认证C++一级( 第三部分编程题(2)小杨报数)
  • 行业速览:中国新能源汽车市场格局与关键趋势
  • 解码华为云安全“铁三角”:用“分层防御”化解安全挑战
  • mac电脑解决在不同项目需要频繁手动切换node版本的困扰
  • JDY后端一二三面经(已OC)
  • 分享超图提供的、很不错的WebGIS学习资源
  • Dixon‘s 因子分解法——C语言实现
  • 基于R语言,“上百种机器学习模型”学习教程 | Mime包
  • 手搓MCP全流程指南:从本地开发部署到PyPI公开发布
  • 快速了解svm算法
  • 使用Python将中文语音翻译成英语音频
  • 【无标题】无名管道
  • 论文精读(二)| 开源软件漏洞感知技术综述
  • UE5 图片9宫格切割
  • select ... for update阻塞
  • 云平台运维工具 ——Azure 原生工具
  • 创建MyBatis-Plus版的后端查询项目
  • 【Linux系统】万字解析,文件IO
  • Linux常见服务器配置(三):MariaDB数据库管理和WEB服务器
  • 【数据结构】哈希扩展学习
  • Vue 项目安全设置方案:XSS/CSRF 防护指南
  • 【Linux】Linux增删改查命令大全(附频率评级)
  • 嵌入式 Linux 驱动开发常见问题排查宝典(驱动开发篇)v1.0
  • imx6ull-驱动开发篇14——原子操作
  • WPF 动画卡顿
  • 机器学习支持向量机(SVM)
  • C++基础学习笔记
  • 谈谈SQL计算存储引擎中的索引和计算
  • 数据结构5-哈希表