首页 > 系统相关 >理解进程调度时机跟踪分析进程调度与进程切换的过程

理解进程调度时机跟踪分析进程调度与进程切换的过程

时间:2024-11-19 18:40:12浏览次数:1  
标签:schedule 调度 内核 进程 CPU 切换

张晓攀+原创作品转载请注明出处+《Linux内核分析》MOOC课程https://mooc.study.163.com/course/1000029000

实验八——理解进程调度时机跟踪分析进程调度与进程切换的过程

一、理解Linux系统中进程调度的时机

在 Linux 内核中,schedule() 函数是核心的进程调度机制。它的主要作用是实现进程切换,即选择下一个要运行的进程并将 CPU 控制权转移给它。以下是 schedule() 函数的主要功能和执行流程:

1. 基本功能

  • 选择下一个进程
    schedule() 根据调度策略(如完全公平调度器 CFS)从就绪队列中选出下一个要运行的进程。

  • 切换上下文
    如果选择的新进程与当前进程不同,schedule() 会调用 context_switch() 函数,保存当前进程的上下文(CPU 寄存器、程序计数器等)并恢复新进程的上下文。

2. 函数执行流程

  • 检查当前进程状态
    如果当前进程仍然可运行(TASK_RUNNING),它可能会重新被选中;否则,它会被放回等待队列。

  • 调用调度策略
    调度器(如 CFS)通过运行特定策略函数来确定下一个进程。CFS 通过一个红黑树数据结构管理就绪进程,选择“最小虚拟运行时间”的进程。

  • 执行上下文切换
    当下一个进程被选定后,schedule() 会调用 context_switch() 执行实际的进程切换,包括:

    • 保存当前进程的 CPU 上下文(栈指针、寄存器等)。
    • 加载新进程的上下文。
    • 切换到新进程的内核栈。

3. 调用时机

schedule() 通常在以下情况下被调用:

  • 当前进程的时间片用完
  • 进程进入阻塞状态(如等待 I/O)
  • 主动调用(如通过yield()sched_yield()
  • 中断处理或内核函数需要切换到更高优先级进程

4. 与调度策略的关系

schedule() 函数本身并不直接决定如何选取下一个进程,而是依赖于具体的调度策略模块(如 CFS、实时调度器)。这些策略定义了如何对进程进行排序和选择。

5. 关键性

schedule() 是整个内核调度的核心接口,对系统的多任务处理和资源分配起到至关重要的作用。它确保了各进程能够公平、高效地共享 CPU 资源。

二、使用 gdb 跟踪分析一个 schedule()函数

1.下载更新menu代码

2.重新制作文件系统并进入系统内核调试

3.设置断点进行调试

在内核函数schedule的入口处设置断点,接下来输入c继续执行,则系统即可停在该函数处,接下来我们就可以使用命令n或者s逐步跟踪,可以详细浏览pick_next_task,switch_to等函数的执行过程

schedule()函数和__schedule()函数:

context_switch():

switch_to宏定义:

三、实验总结

进程调度和进程切换是 Linux 内核中多任务管理的核心,它们共同实现了多个进程在 CPU 上的交替执行。以下是两者的简要说明和执行过程:


1. 进程调度(Process Scheduling)

定义
进程调度是从就绪队列中选择一个合适的进程来运行的过程。其目的是决定哪个进程可以使用 CPU。

调度流程

  1. 时间片用尽或阻塞:当前进程因时间片耗尽或等待资源而无法继续运行。
  2. 调用调度函数
    内核调用 schedule() 函数,选择下一个进程。
  3. 选择下一个进程
    根据调度策略(如 CFS)从就绪队列中挑选优先级最高或最符合策略的进程。

2. 进程切换(Context Switch)

定义
进程切换是将 CPU 从当前进程转移到另一个进程的过程,涉及保存和恢复进程的运行环境(上下文)。

切换流程

  1. 保存当前进程的上下文

    • 保存 CPU 寄存器、程序计数器(PC)、堆栈指针(SP)等信息到当前进程的 task_struct
    • 确保当前进程可以在下次调度时从中断点继续运行。
  2. 加载新进程的上下文

    • 恢复新进程的 CPU 寄存器、程序计数器和堆栈指针。
    • 将 CPU 控制权转移给新进程。
  3. 切换内核栈

    • 每个进程都有自己独立的内核栈。
    • 切换过程中,需要将内核栈从当前进程切换到新进程的内核栈。
  4. 返回用户态

    • 当进程从内核态返回用户态时,新进程就开始在 CPU 上运行。

两者的关系

  • 进程调度 是逻辑层面的选择:决定谁运行。
  • 进程切换 是物理层面的执行:切换 CPU 的执行上下文。

它们共同确保了系统能够在多任务环境下高效、平衡地分配 CPU 资源。

标签:schedule,调度,内核,进程,CPU,切换
From: https://www.cnblogs.com/20202215zxp/p/18555413

相关文章

  • .net 非阻塞的异步编程 及 线程调度过程
    本文主要分为三个部分:1、语法格式2、线程调度情况3、编程注意事项*阅读提示:鼠标悬停在章节标题上可见文章目录  异步编程(TaskAsynchronousProgramming,TAP),一种编程模式(Task-basedAsynchronousPattern)。TAP是.NET中推荐的异步编程模式,基于 Task 和 Task<TR......
  • C++编程:通过多线程与协程优化阻塞型任务的调度性能
    文章目录0.引言1.多线程VS多线程+协程1.1示例1:使用传统的多线程进行矩阵乘法1.2.示例2:使用协程优化阻塞型任务3.分析与对比0.引言我们知道:多线程:适用于处理计算密集型任务或IO操作较少的场景,但会因为线程切换和创建销毁的开销而影响性能。协程:适用于处......
  • Linux系统怎么通过端口号查找完整进程
    需求已知某进程启动了一个端口号,怎么才能知道改进程的完整启动命令查找过程例如本机已经启动了8006端口通过端口PID可以查看到改端口启动的进程PID是6120#lsof-i:8006COMMANDPIDUSERFDTYPEDEVICESIZE/OFFNODENAMEpt_main_t6120xiaoxing93u......
  • 推荐一款提供web界面支持内网穿透的任务调度软件jiascheduler
    jiascheduler简体中文 · English一个用rust编写的开源高性能,可扩展,动态配置的任务调度器,支持同时推送用户脚本到数以万计的实例运行,并实时收集执行的结果。jiascheduler执行脚本的节点不需要都在同一个网络,其内部设计了一个精巧的网络穿透模型可以用一个控制台管理不同......
  • 【Linux】进程的基本概念
    目录一、进程概念的推导二、描述进程(PCB)2.1task_struct2.2task_struct内容2.2.1task_struct内容分类2.2.2PID(进程ID)2.2.3PPID(父进程的进程ID)三、查看进程四、进程的创建4.1命令行直接启动进程4.2通过代码来创建进程4.2.1通过fork函数来创建进程4.2.2fork函数......
  • 基于NSGA-Ⅲ优化算法的梯级水电和火电机组的联合多目标调度研究(Matlab代码实现)
     ......
  • 【Linux-进程信号】详谈信号捕捉
    详谈信号捕捉内核如何实现信号的捕捉如果信号的处理动作是用户自定义函数(调用signal函数自定义处理函数),在信号递达时就调用这个函数,这称为信号捕捉。由于信号处理函数的代码是在用户空间的,处理过程比较复杂典型的操作系统中信号处理的机制1.进入内核态:当程序因为中断、异......
  • Python用subprocess管理子进程在Windows平台实现平行效果
    在Python中,使用subprocess模块管理子进程时,如果你在Windows平台上尝试实现类似于Unix系统的“平行效果”(即父子进程可以同时运行),你可能会遇到一些问题。在Unix系统中,子进程是独立于父进程的,它们可以同时运行。但在Windows系统中,当你使用subprocess创建子进程时,默认情况下会存在父......
  • 网络配置及进程-系统性能和计划任务
    目录虚拟机联网shell脚本实例索引数组和关联数组,字符串处理,高级变量进程管理计划任务虚拟机联网查看IP地址#centos系列![root@localhost~]#ifconfigens33:flags=4163<UP,BROADCAST,RUNNING,MULTICAST>mtu1500inet192.168.93.200netmask255.255.25......
  • DolphinScheduler心脏:Quartz的定时任务调度框架深度解析
    Quartz是一个开源的Java作业调度框架,它提供了强大的定时任务调度功能。在DolphinScheduler中,Quartz用于实现定时任务的调度和管理。DolphinScheduler通过QuartzExecutorImpl类与Quartz集成,将工作流及其定时管理操作与Quartz调度框架相结合,实现任务的调度执行。本文将详细剖析Quar......