Fork me on GitHub

随笔分类 -  Process Management

摘要:Linux 中采用了两种不同的优先级范围,一种是 nice 值,一种是实时优先级。在上一篇粗略的说了一下 nice 值和实时优先级,仍有不少疑问,本文来详细说明一下进程优先级。linux 内核版本为 linux 2.6.34 。 进程优先级的相关信息,存放在进程描述符 task_struct 中: 阅读全文
posted @ 2023-12-02 22:55 yooooooo 阅读(81) 评论(0) 推荐(0) 编辑
摘要:SCHED_RR和SCHED_FIFO是Linux内核中用来调度进程的两种调度策略,它们有以下几点区别: 调度方式:SCHED_RR采用轮转调度方式,而SCHED_FIFO则采用先进先出调度方式。 优先级:在SCHED_RR中,每个进程有一个时间片,当时间片用完后,进程会被放到就绪队列的末尾;而在S 阅读全文
posted @ 2023-05-30 16:05 yooooooo 阅读(416) 评论(0) 推荐(0) 编辑
摘要:考虑到文章篇幅,在这里我只讨论普通进程,其调度算法采用的是CFS(完全公平)调度算法。 至于CFS调度算法的实现后面后专门写一篇文章,这里只要记住调度时选择一个优先级最高的任务执行 一、调度单位简介 1.1 task_struct 结构体简介 对于Linux内核来说,调度的基本单位是任务,用 str 阅读全文
posted @ 2023-04-30 21:26 yooooooo 阅读(176) 评论(0) 推荐(0) 编辑
摘要:首先需要思考的问题是:什么是调度器(scheduler)?调度器的作用是什么?调度器是一个操作系统的核心部分。可以比作是CPU时间的管理员。调度器主要负责选择某些就绪的进程来执行。不同的调度器根据不同的方法挑选出最适合运行的进程。目前Linux支持的调度器就有RT scheduler、Deadlin 阅读全文
posted @ 2019-01-21 14:27 yooooooo 阅读(2832) 评论(0) 推荐(1) 编辑
摘要:就绪状态 :一个进程获得了除处理机外的一切所需资源,一旦得到处理机即可运行,则称此进程处于就绪状态。 执行状态:当一个进程在处理机上运行时,则称该进程处于运行状态。 阻塞状态:一个进程正在等待某一事件发生(例如请求I/O而等待I/O完成等)而暂时仃止运行,这时即使把处理机分配给进程也无法运行,故称该 阅读全文
posted @ 2018-12-08 23:23 yooooooo 阅读(3467) 评论(0) 推荐(0) 编辑
摘要:按照POSIX标准的强制要求,除了“普通”进程之外, Linux还支持两种实时调度类。调度器结构使得实时进程可以平滑地集成到内核中,而无需修改核心调度器,这显然是调度类带来的好处。 现在比较适合于回想一些很久以前讨论过的事实。实时进程的特点在于其优先级比普通进程高,对应地,其static_prio值 阅读全文
posted @ 2018-11-18 16:45 yooooooo 阅读(1039) 评论(0) 推荐(0) 编辑
摘要:我们也讲解了CFS的很多进程操作 table th:nth of type(1){ width: 20%; } table th:nth of type(2){ width: 20% ; } 信息| 函数| 描述 | | 进程入队/出队| enqueue_task_fair/dequeue_task 阅读全文
posted @ 2018-11-18 11:47 yooooooo 阅读(750) 评论(0) 推荐(1) 编辑
摘要:1. CFS如何处理周期性调度器 周期性调度器的工作由scheduler_tick函数完成(定义在 "kernel/sched/core.c, line 2910" ), 在scheduler_tick中周期性调度器通过调用curr进程所属调度器类sched_class的task_tick函数完成周 阅读全文
posted @ 2018-11-18 11:30 yooooooo 阅读(1526) 评论(0) 推荐(0) 编辑
摘要:1. CFS进程入队和出队 完全公平调度器CFS中有两个函数可用来增删队列的成员: 和`dequeue_task_fair`分别用来向CFS就绪队列中添加或者删除进程 2 enqueue_task_fair入队操作 2.1 enque_task_fair函数 向就绪队列中放置新进程的工作由函数 函数 阅读全文
posted @ 2018-11-12 16:31 yooooooo 阅读(1829) 评论(0) 推荐(1) 编辑
摘要:1 虚拟运行时间(今日内容提醒) 1.1 虚拟运行时间的引入 CFS为了实现公平,必须惩罚当前正在运行的进程,以使那些正在等待的进程下次被调度。 具体实现时,CFS通过每个进程的虚拟运行时间(vruntime)来衡量哪个进程最值得被调度。 CFS中的就绪队列是一棵以vruntime为键值的红黑树,虚 阅读全文
posted @ 2018-11-12 15:37 yooooooo 阅读(2381) 评论(0) 推荐(0) 编辑
摘要:1. 负荷权重 1.1 负荷权重结构struct load_weight 负荷权重用struct load_weight数据结构来表示, 保存着进程权重值weight。其定义在 "/include/linux/sched.h, v=4.6, L1195" , 如下所示 1.2 调度实体的负荷权重lo 阅读全文
posted @ 2018-11-10 22:27 yooooooo 阅读(2541) 评论(0) 推荐(1) 编辑
摘要:1. 唤醒抢占 当在try_to_wake_up/wake_up_process和wake_up_new_task中唤醒进程时, 内核使用全局check_preempt_curr看看是否进程可以抢占当前进程可以抢占当前运行的进程. 请注意该过程不涉及核心调度器. 每个调度器类都因应该实现一个chec 阅读全文
posted @ 2018-11-09 09:55 yooooooo 阅读(2575) 评论(0) 推荐(0) 编辑
摘要:1. linux优先级的表示 1.1 优先级的内核表示 linux优先级概述 在用户空间通过nice命令设置进程的静态优先级, 这在内部会调用nice系统调用, 进程的nice值在 20~+19之间. 值越低优先级越高. setpriority系统调用也可以用来设置进程的优先级. 它不仅能够修改单个 阅读全文
posted @ 2018-11-08 20:42 yooooooo 阅读(1437) 评论(0) 推荐(0) 编辑
摘要:1 前景回顾 1.1 Linux的调度器组成 2个调度器 可以用两种方法来激活调度 一种是直接的, 比如进程打算睡眠或出于其他原因放弃CPU 另一种是通过周期性的机制, 以固定的频率运行, 不时的检测是否有必要 因此当前linux的调度程序由两个调度器组成:主调度器,周期性调度器(两者又统称为通用调 阅读全文
posted @ 2018-11-04 18:33 yooooooo 阅读(1258) 评论(0) 推荐(1) 编辑
摘要:task_struct进程描述符中包含两个跟进程地址空间相关的字段mm, active_mm, 大多数计算机上系统的全部虚拟地址空间分为两个部分: 供用户态程序访问的虚拟地址空间和供内核访问的内核空间。每当内核执行上下文切换时, 虚拟地址空间的用户层部分都会切换, 以便当前运行的进程匹配, 而内核空 阅读全文
posted @ 2018-11-04 17:30 yooooooo 阅读(4084) 评论(0) 推荐(0) 编辑
摘要:1 非抢占式和可抢占式内核 为了简化问题,我使用嵌入式实时系统uC/OS作为例子 首先要指出的是,uC/OS只有内核态,没有用户态,这和Linux不一样 多任务系统中, 内核负责管理各个任务, 或者说为每个任务分配CPU时间, 并且负责任务之间的通讯. 内核提供的基本服务是任务切换. 调度(Sche 阅读全文
posted @ 2018-11-01 14:03 yooooooo 阅读(2285) 评论(0) 推荐(0) 编辑
摘要:主调度器 在内核中的许多地方, 如果要将CPU分配给与当前活动进程不同的另一个进程, 都会直接调用主调度器函数schedule, 从系统调用返回后, 内核也会检查当前进程是否设置了重调度标志 例如, 前述的周期性调度器的scheduler_tick就会设置该标志, 如果是这样则内核会调用schedu 阅读全文
posted @ 2018-10-29 17:06 yooooooo 阅读(1629) 评论(0) 推荐(1) 编辑
摘要:我们前面提到linux有两种方法激活调度器:核心调度器和 周期调度器 一种是直接的, 比如进程打算睡眠或出于其他原因放弃CPU 另一种是通过周期性的机制, 以固定的频率运行, 不时的检测是否有必要 因而内核提供了两个调度器 主调度器 , 周期性调度器 ,分别实现如上工作, 两者合在一起就组成了 核心 阅读全文
posted @ 2018-10-28 21:35 yooooooo 阅读(2247) 评论(1) 推荐(0) 编辑
摘要:1 前景回顾 1.1 进程调度 内存中保存了对每个进程的唯一描述, 并通过若干结构与其他进程连接起来. 调度器 面对的情形就是这样, 其任务是在程序之间共享CPU时间, 创造并行执行的错觉, 该任务分为两个不同的部分, 其中一个涉及 调度策略 , 另外一个涉及 上下文切换 . 内核必须提供一种方法, 阅读全文
posted @ 2018-10-28 10:48 yooooooo 阅读(2728) 评论(0) 推荐(3) 编辑
摘要:1 前言 1.1 进程调度 内存中保存了对每个进程的唯一描述, 并通过若干结构与其他进程连接起来. 调度器面对的情形就是这样, 其任务是在程序之间共享CPU时间, 创造并行执行的错觉, 该任务分为两个不同的部分, 其中一个涉及 调度策略 , 另外一个涉及 上下文切换 . 1.2 进程的分类 linu 阅读全文
posted @ 2018-10-22 14:15 yooooooo 阅读(1358) 评论(0) 推荐(2) 编辑