请免费下载修订版:https://download.csdn.net/download/JanneoEvans/12252112 本文只是为了方便今后复习整理的读书笔记,仅仅是将现有的知识用我自己的语言(和图画)进行重新表述,没有什么所谓的原创,都是参考他人的或者参考linux内核源码及文档。 ### 调度器章节笔记整理_修订版 #### 1. 调度器相关的功能结构概述 在深入理解Linux内核中的调度机制之前,首先需要对其整体结构有一个全面的认识,以便更好地把握细节。 ##### 1.1 运行(RunQueue)队列 Linux内核使用`struct rq`来组织处于就绪状态的进程。这个结构体包括两个成员变量,分别是`cfs`和`rt`,它们分别代表两个不同的就绪队列: - **CFS (Completely Fair Scheduler)**:用于组织就绪的普通进程。这些进程使用完全公平调度器进行调度。 - **RT (Real-Time Scheduler)**:用于组织就绪的实时进程。这些进程使用实时调度器进行调度。 在多核系统中,每个CPU都有一个对应的`rq`结构体。这样设计的好处在于每个CPU都可以独立地管理自己的进程队列,从而实现高效的并行处理。 **细节介绍**: - `cfs`队列实际上是通过红黑树的数据结构来组织的,红黑树的特点是它能够保证在O(log n)的时间复杂度内插入、删除节点以及查找特定值。 - `rt`队列则使用链表来组织。这种选择是因为实时进程的数量相对较少,且通常不需要复杂的查询操作。 #### 2. 就绪进程在队列中如何排序 了解了队列的基本结构之后,接下来讨论不同类型的进程是如何在这些队列中进行排序的。 ##### 2.1 实时进程 实时进程根据其优先级在`rt`队列中排序。由于实时进程通常具有较高的优先级,并且需要得到及时响应,因此它们在队列中的位置至关重要。 ##### 2.2 普通进程 对于普通进程,则采用完全公平调度器(CFS)来管理。在这个过程中,进程按照虚拟运行时间进行排序。 - **2.2.1 模型建立**:CFS采用虚拟运行时间的概念来实现进程间的公平调度。每个进程有一个虚拟运行时间,它代表了该进程应获得的CPU时间份额。 - **2.2.2 抽象模型的总结**:通过计算每个进程的虚拟运行时间和实际运行时间之间的差值,来决定哪个进程应该获得下一次的CPU时间。 - **2.2.3 真实模型概述**:在实际应用中,CFS通过一系列复杂的算法和数据结构来确保所有进程都能公平地共享CPU资源。 - **2.2.4 对应关系**:虚拟运行时间的计算涉及到多个参数,包括进程的权重、已使用的CPU时间等。 - **2.2.5 真实模型详述**:为了实现公平性,CFS维护了一个虚拟时钟,它跟踪着系统中所有进程的虚拟运行时间。当进程被调度执行时,它的虚拟运行时间会根据实际使用的CPU时间增加相应的值。 #### 3. 进程优先权 进程优先权是决定调度顺序的关键因素之一。在Linux内核中,优先权由`policy`和`priority`属性决定。对于实时进程,优先权越高,获得CPU的机会越大;而对于普通进程,则是通过虚拟运行时间来调节优先权。 #### 4. 核心调度器 核心调度器是由`scheduler_tick()`和`schedule()`两个函数组成的。这两个函数分别称为周期性调度器和主调度器。 - **4.1 周期性调度器**:`scheduler_tick()`主要负责更新每个进程的虚拟运行时间以及其他与调度相关的数据结构。 - **4.2 主调度器**:`schedule()`负责实际的进程切换工作,即从就绪队列中选择下一个进程并将其投入运行。具体来说,`schedule()`分为以下几个步骤: - **代码块1**:初始化和准备工作。 - **代码块2**:确定下一个要运行的进程。 - **代码块3**:更新当前进程的状态。 - **代码块4**:切换到新进程。 - **总结**:`schedule()`的核心任务就是根据当前系统的状态选择最优的进程来执行。 - **switch_to**:这是实现进程切换的关键函数,它负责实际的上下文切换操作。 #### 5. 进程的状态切换 进程在执行过程中会经历各种状态的变化,例如从运行态变为就绪态,或者从就绪态变为阻塞态等。这些状态切换由内核中的各种机制触发,例如信号处理、I/O操作等。 通过以上概述,我们可以看出Linux内核中的调度器是一个非常复杂但又高效的设计。它不仅考虑到了不同类型进程的需求,还通过多种机制确保了系统的稳定性和响应性。
剩余59页未读,继续阅读
- 粉丝: 17
- 资源: 7
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- 五险一金年度成本统计图.xlsx
- 华为云全新设计的SDK V3版本,提供统一的SDK使用方式 通过添加依赖或下载的方式调用华为云API,访问华为云应用、资源和数据 无需关心请求细节即可快速使用弹性云服务器、虚拟私有云等多个华为云服务
- 数据分析-23-糖尿病预测(线性回归模型)(包含数据代码)
- AES128算法子VI,labview版本,全网不好找 已经在产线批量使用,某出口OEM控制器使用的秘钥算法
- Christmas.html
- 劳动法律法规工伤赔偿表格.xlsx
- 缴纳五险一金台账.xls
- 全国五险一金信息大全(多表格).xls
- 员工五险一金预算表(多省市)..xls
- ToDoer是一个Windows平台的桌面便签软件,基于QT Qml实现,支持用户自定义便签列表
- 宣城市五险一金办事指南 .docx
- 数据分析-24-母婴产品电商可视化分析(包含代码数据)
- 江门市五险一金办事指南.docx
- 梅州市五险一金办事指南.docx
- 深圳市五险一金办事指南.docx
- 中山市五险一金办事指南.docx
- 1
- 2
- 3
前往页