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

发布于:2025-07-12 ⋅ 阅读:(16) ⋅ 点赞:(0)

前言

        进程的高效管理是操作系统设计的核心挑战。当多个进程竞争有限的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活动


网站公告

今日签到

点亮在社区的每一天
去签到