【UNIX】内核对进程的调度机制

(调度器)

           对于一般进程,CPU的使用时间都是系统平均分配给每一个进程的,因此这种公平分享都从进程的角度出发的。

 

1) 调度时机:什么情况下,什么时候进行调度

2) 调度的策略:根据什么准则选取下一个进程

3) 调度方式:是“可剥夺”还是“不可剥夺”,当正在运行的进程并不自愿放弃对从CPU 的使用权时,是否强制性的暂时剥夺其使用权,停止其运行而给其他进程一个机会,若 果是可剥夺,是否在任何情况下都可剥夺?

调度时机:

首先,自愿的调度(主动调度)随时都可以进行,在内核里,一个进程可以通过schedule启动一次调度,也就是由当前进程自愿调用schedule暂时放弃运行的情景

除此之外,调度可以是非自愿的,及强制的发生在每次系统调用的前夕,以及每次从中断或者异常处理返回到用户空间的前夕(进程状态切换才会引起的调度)

CPU在内核空间运行时无需考虑前置调度的可能性,但是在内核空间发生中断和异常当然是可能的,但这种中断或者异常不会引起调度。

不管一个CPU是否在内核中发生调度还是多处理器,为所有多进程访问的变量和数据结构,保护起来这是必须的。(使用自旋锁和信号量的机制保护)

“从系统空间返回到用户空间”只是发生调度的必要条件,而非充分条件。也就是说这个条件发生了,也不一定调度,具体是否发生调度还有判断当前进程的task_struct结构体制中need_resched是否为非零,非零才会调用schedule()函数,发生调度

Need_resched成员是内核设置的,因为用户进程访问不到进程的task_strcut。所以除了当前进程通过系统调用自愿让出运行以及在系统调用因某种原因受阻以外,主要是当前唤醒一个进程,以及时钟中断发生,内核会对need_resched成员进行设置(非零),从而发生调度

调度方式

调度发生在回到用户空间的前夕

调度策略

时间: 2024-12-29 07:25:55

【UNIX】内核对进程的调度机制的相关文章

深入Linux内核架构——进程管理和调度(上)

如果系统只有一个处理器,那么给定时刻只有一个程序可以运行.在多处理器系统中,真正并行运行的进程数目取决于物理CPU的数目.内核和处理器建立了多任务的错觉,是通过以很短的间隔在系统运行的应用程序之间不停切换做到的.由此,以下两个问题必须由内核解决:除非明确要求,否则应用程序不能彼此干扰:CPU时间必须在各种应用程序之间尽可能公平共享(一些程序可能比其他程序更重要).本篇博文主要涉及内核共享CPU时间的方法以及如何在进程之间切换(内核为各进程分配时间,保证切换之后从上次撤销其资源时执行环境完全相同)

(笔记)Linux内核学习(十一)之I/O层和I/O调度机制

一 块I/O基本概念 字符设备:按照字符流的方式被有序访问的设备.如串口.键盘等. 块设备:系统中不能随机(不需要按顺序)访问固定大小的数据片(chunk 块)的设备. 如:硬盘.软盘.CD-ROM驱动器.闪存等.都是通过以安装文件系统的方式使用. 块设备的组成: 扇区:是块设备中最小的可寻址单元(常见大小512字节):是块设备的基本寻址和操作单元. 块:是文件系统最小逻辑可寻址单元,文件系统的抽象,只能通过块访问文件系统.通常包含多个扇区. 当一个块被调入内存时(读入后或等待写出时),它要存储

Unix下的进程管理

进程的概述 进程的概念 直观点说,保存在硬盘上的程序运行以后,会在内存空间里形成一个独立的内存体,这个内存体有自己的地址空间,有自己的堆,上级挂靠单位是操作系统.操作系统会以进程为单位,分配系统资源,所以我们也说,进程是资源分配的最小单位. 进程调度中的三种状态 运行:当一个进程在处理机上运行时,则称该进程处于运行状态.处于此状态的进程的数目小于等于处理器的数目,对于单处理机系统,处于运行状态的进程只有一个.在没有其他进程可以执行时(如所有进程都在阻塞状态),通常会自动执行系统的空闲进程. 就绪

Linux进程核心调度器之主调度器--Linux进程的管理与调度(十九)

日期 内核版本 架构 作者 GitHub CSDN 2016-06-30 Linux-4.6 X86 & arm gatieme LinuxDeviceDrivers Linux进程管理与调度 我们前面提到linux有两种方法激活调度器:核心调度器和 一种是直接的, 比如进程打算睡眠或出于其他原因放弃CPU 另一种是通过周期性的机制, 以固定的频率运行, 不时的检测是否有必要 因而内核提供了两个调度器主调度器,周期性调度器,分别实现如上工作, 两者合在一起就组成了核心调度器(core sched

Linux进程核心调度器之主调度器schedule--Linux进程的管理与调度(十九)【转】

转自:http://blog.csdn.net/gatieme/article/details/51872594 日期 内核版本 架构 作者 GitHub CSDN 2016-06-30 Linux-4.6 X86 & arm gatieme LinuxDeviceDrivers Linux进程管理与调度 我们前面提到linux有两种方法激活调度器:核心调度器和 一种是直接的, 比如进程打算睡眠或出于其他原因放弃CPU 另一种是通过周期性的机制, 以固定的频率运行, 不时的检测是否有必要 因而内

Linux进程管理(二)进程的调度与资源限制

1 进程调度就绪进程最重要的特征是该进程是非阻塞的.进行用户交互.大量读写文件.响应I/O和网络事件的进程会花费大量时间来等待资源可用,在相当长的时间内无法转为就绪状态(长是相对于指令运行时间而言),因此就绪进程首先应该是非阻塞的.一个就绪进程还必须至少有部分"时间片"(调度器分配给进程的运行时间).内核用一个就绪队列维护所有的就绪进程,一旦某进程耗光它的时间片,内核就将其移出队列,直到所有就绪进程都耗光时间片才考虑将其放回队列.多任务操作系统分为两大类:协同式和抢占式.Linux实现

linux内核的preempt抢占调度,preempt_count抢占保护“锁”

抢断调度,是调度机制对实时系统需要的支持,是一种快速响应的重调度机制.既然与重调度有关,那么就先回顾一下调度和重调度. 调度分两种情况,1. 一种是自愿调度,由代码主动调用schedule来让度cpu,例如sleep,mutex,sema等阻塞等待.另外,当一个进程(或线程)走到尽头(do_exit)时,也会调用schedule,但是却永远不再恢复执行了,否则就是BUG了.2. 另一种是重调度,非自愿的.当前线程被设置重调度后,当有中断发生或系统调用时,在entry.S的返回路径上就会被动调用s

RHCA学习笔记:RH442-Unit8进程与调度

UNIT 8  Processes and the Scheduler 进程与调度 学习目标 A. CPU cache 与Service time之间的关系 B. 分析应用程序使用CPU cache时的情况(CPU使用率与CPU cache命中率) C. 抢占 (根据优先级抢占) D 根据进程优先级顺序进行调度与排序 E. 监控内核和进程的性能 8.1    Characterizing prosess states 进程状态  查看进程状态: ps axo pid,comm,stat –sor

Linux 内核的文件 Cache 管理机制介绍

Linux 内核的文件 Cache 管理机制介绍 文件 Cache 管理是 Linux 内核中一个很重要并且较难理解的组成部分.本文详细介绍了 Linux 内核中文件 Cache 管理的各个方面,希望能够对开发者理解相关代码有所帮助. http://www.ibm.com/developerworks/cn/linux/l-cache/ http://www.cnblogs.com/MYSQLZOUQI/p/4857437.html 1 前言 自从诞生以来,Linux 就被不断完善和普及,目前它