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

进程管理中的队列调度与内存交换机制

前言

        进程的高效管理是操作系统设计的核心挑战。当多个进程竞争有限的CPU和内存资源时,系统需要借助队列调度机制合理分配CPU时间片,同时通过内存交换技术缓解物理内存压力。

目录

一、进程队列(Scheduling Queues)

(1) 就绪队列(Ready Queue)

(2) 阻塞队列(Wait Queue)

(3) 挂起队列(Suspended Queue)

二、内存与磁盘交换(Swapping)

(1) 交换触发条件

(2) 交换过程

(3) 挂起状态与Swap的关系

(4) Linux中的实现


一、进程队列(Scheduling Queues)

操作系统通过多个队列管理不同状态的进程,确保调度高效有序:

(1) 就绪队列(Ready Queue)

  • 作用:存放所有处于就绪状态的进程,等待CPU调度。

  • 实现方式

    • 通常为优先级队列多级反馈队列(如Linux的CFS调度器)。

    • 例子:runqueue 是Linux内核中管理就绪进程的核心数据结构。

  • 触发操作

    • 入队:进程从创建/阻塞/挂起状态转为就绪。

    • 出队:CPU调度器选择下一个运行的进程。

(2) 阻塞队列(Wait Queue)

  • 作用:管理因等待I/O、信号量等事件而阻塞的进程。

  • 特点

    • 按事件类型分组(如磁盘I/O队列、网络IO队列)。

    • 事件完成后,内核将对应进程移回就绪队列。

  • 示例

    // Linux内核中的等待队列(简化)
    struct wait_queue_head {spinlock_t lock;struct list_head head;
    };

(3) 挂起队列(Suspended Queue)

  • 作用:存储被换出到磁盘的挂起进程(就绪挂起或阻塞挂起)。

  • 管理策略

    • 就绪挂起:可被直接激活到就绪队列。

    • 阻塞挂起:需等待事件完成后再激活。


二、内存与磁盘交换(Swapping)

当物理内存不足时,系统通过交换空间(Swap) 将部分进程数据暂存到磁盘:

(1) 交换触发条件

  • 内存压力:空闲内存低于阈值(由vm.swappiness控制)。

  • 进程挂起:主动将长时间不运行的进程换出(如后台服务)。

(2) 交换过程

  1. 选择牺牲页(Victim Selection)

    • 算法:LRU(最近最少使用)、CLOCK等。

    • 优先换出非活跃进程的内存页。

  2. 换出到磁盘:将选中的内存页写入Swap分区(如/dev/sda2)。

  3. 换入回内存:当进程被激活时,从磁盘重新加载数据。

(3) 挂起状态与Swap的关系

  • 就绪挂起 → 就绪:需先将进程数据从磁盘换入内存。

  • 阻塞挂起 → 阻塞:即使换入内存,仍需等待事件。

(4) Linux中的实现

  • Swap分区/文件:通过swapon/swapoff管理。

  • 查看Swap使用

    free -h        # 显示内存和Swap使用情况

vmstat 1       # 监控Swap I/O活动

http://www.lryc.cn/news/585398.html

相关文章:

  • MinIO配置项速查表【五】
  • 云原生周刊:镜像兼容性
  • 「Linux命令基础」Shell命令基础
  • 从零到一:深度解析汽车标定技术体系与实战策略
  • React 的常用钩子函数在Vue中是如何设计体现出来的。
  • WinForm三大扩展组件:ErrorProvider、HelpProvider、ToolTipProvider详解
  • Apache Cloudberry 向量化实践(二):如何识别和定位向量化系统的性能瓶颈?
  • 资源分享-FPS, 矩阵, 骨骼, 绘制, 自瞄, U3D, UE4逆向辅助实战视频教程
  • Oracle 数据库 Dblink
  • PySpark中python环境打包和JAR包依赖
  • tensor
  • Word表格默认格式修改成三线表,一劳永逸,提高生产力!
  • 上位机知识篇---高效下载安装方法
  • 05 rk3568 debian11 root用户 声音服务PulseAudio不正常
  • PyTorch 与 Spring AI 集成实战
  • 2025Nginx最新版讲解/面试
  • 【yolo】模型训练参数解读
  • 七、gateway服务创建
  • WPS、Word加载项开发流程(免费最简版本)
  • [Meetily后端框架] 多模型-Pydantic AI 代理-统一抽象 | SQLite管理
  • VLLM部署DeepSeek-LLM-7B-Chat 模型
  • Lecture #19 : Multi-Version Concurrency Control
  • Jenkins 版本升级与插件问题深度复盘:从 2.443 到 2.504.3 及功能恢复全解析
  • FPGA实现SDI转LVDS视频发送,基于GTX+OSERDES2原语架构,提供2套工程源码和技术支持
  • Java进阶---并发编程
  • 【C/C++ shared_ptr 和 unique_ptr可以互换吗?】
  • 【AI News | 20250710】每日AI进展
  • 一个中层管理者应该看什么书籍?
  • 使用Python将目录中的JPG图片按后缀数字从小到大顺序纵向拼接,很适合老师发的零散图片拼接一个图片
  • 谷歌独立站是什么?谷歌独立站建站引流完全指南