当前位置: 首页 > 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.dtcms.com/a/274093.html

相关文章:

  • Jenkins 系统管理与配置
  • 排序算法与前端交互优化
  • 持续集成 简介环境搭建
  • 14 TryHackMe 靶场 Wireshark: The Basics
  • CIU32L051系列 DMA串口无阻塞性收发的实现
  • CentOS 安装 JDK+ NGINX+ Tomcat + Redis + MySQL搭建项目环境
  • Redis5.0.5 漏洞
  • redis的一些疑问
  • windows下安装 redis
  • Redis全栈技术导航:从基础架构到实战案例的完整指南
  • 创客匠人:AI 时代创始人 IP 打造与知识变现的范式迁移
  • 什么是IP关联?跨境卖家如何有效避免IP关联?
  • LeetCode--43.字符串相乘
  • 软件过程模型核心特征与开发流程对照表
  • Android Glide使用与底层机制详解
  • 上位机知识篇---安装包架构
  • imx6ull-系统移植篇2—— U-Boot 命令使用(上)
  • Java 中线程通信方式笔记
  • tailwindCSS === 使用插件自动类名排序
  • ssm框架整合全攻略:从环境搭建到功能实现
  • 什么是Podman?能否替代Docker?Podman快速入门
  • dockerfile 笔记
  • STM32-DAC数模转换
  • 将英语转化为语音 英文转音频 英语转语音朗读
  • 嵌入式八股文之 GPIO
  • RISC-V:开源芯浪潮下的技术突围与职业新赛道 (三)RISC-V架构深度解剖(下)
  • FPGA实现SDI转LVDS视频发送,基于GTX+OSERDES2原语架构,提供2套工程源码和技术支持
  • Spring注解IoC与JUnit整合实战
  • MyBatis-Plus通用中等、大量数据分批查询和处理
  • 蔚来测开一面:HashMap从1.7开始到1.8的过程,既然都解决不了并发安全问题,为什么还要进一步解决环形链表的问题?