Linux内核开发 — 进程调度

本节简单介绍内核开发中,进程调度的相关知识点。

什么是进程调度

进程调度就是在已经就绪的进程中选择一个最合适的进程执行的过程。

进程调度策略

实时类调度策略

非实时类调度策略

进程调度时机

  • 主动式抢占

当前进程因为需要等待资源等原因主动放弃执行权限,主动要求切换到下一个进程执行。

主动放弃CPU的例子:

current->state = TASK_INTERRUPTIBLE;

              schedule();

  • 被动式抢占

当前进程因为优先级、进程属性等原因被迫让出CPU执行权限。

1)用户抢占

在完成系统调用返回用户空间时

在完成中断处理后返回用户空间时

2)  内核抢占

·在不支持内核抢占的系统中,进程/线程一旦运行于内核空间,是不允许被抢占的,必须要等到内核线程执行完成、主动放弃CPU或者时间片耗尽后才会释放CPU。

·而在支持内核抢占的系统中, 高优先级的进程/线程是可以抢占正在内核空间运行的低优先级的进程/线程。

·但是在支持的内核抢占的系统中,以下四种情况也是不允许内核抢占的:

  • 内核正在进行中断处理
  • 内核正处于中断上下文
  • 内核正在执行调度
  • 进程持有自旋锁或者readlock/writelock等资源时

·Linux 为了保证在以上四种情况不会被抢占,抢占式内核提供了一个变量(preempt_count)用于记录以上状态。当内核进入以上四种状态时preempt_count变量会加1,当退出以上几种状态时preempt_count会减1,preempt_count 变量放置于thread_info结构体中。

进程调度步骤

清理当前运行中的进程

选择下一个要运行的程序 (pick_next_task)

设置新进程的运行环境

进程上下文切换

时间: 2024-11-08 11:50:27

Linux内核开发 — 进程调度的相关文章

如何参与Linux内核开发(转)

本文来源于linux内核代码的Document文件夹下的Hoto文件.Chinese translated version of Documentation/HOWTO If you have any comment or update to the content, please contact theoriginal document maintainer directly.  However, if you have a problemcommunicating in English yo

编码风格——linux内核开发的coding style

总结linux内核开发的coding style, 便于以后写代码时参考. 下面只是罗列一些规则, 具体说明可以参考: 内核源码(Documentation/CodingStyle) 01 - 缩进 缩进用 Tab, 并且Tab的宽度为8个字符 swich 和 case对齐, 不用缩进 switch (suffix) { case 'G': case 'g': mem <<= 30; break; case 'M': case 'm': mem <<= 20; break; cas

Linux内核开发进阶书籍推荐(不适合初学者)

Linux内核开发进阶书籍推荐(不适合初学者) 很早之前就想写一篇文章总结一下Linux Kernel开发的相关资料,项目的原因,再加上家里的一些事情,一直没能找到闲暇,今天终于有些时间,希望可以完成这篇文章吧.首先需要说明的是不是所有的人都需要搞内核开发,因为据笔者了解,大部分的软件工程师的工作都在用户态开发,学习内核开发事倍功半,没什么实际意义,另外,初学编程的人也不太适合搞内核开发,因为信息量相对比较大,而且枯燥晦涩,很容易让初学者还没有入门,就已经放弃了,再有就是不想投入时间,总是试图走

Linux 内核开发—内核简单介绍

内核简单介绍 Linux 构成 Linux 为什么被划分为系统空间和内核空间 隔离核心程序和应用程序,实现对核心程序和数据的保护. 什么内核空间,用户空间 内核空间和用户空间是程序执行的两种不同的状态,Linux对自身软件系统进行了划分,一部分核心的软件独立于普通的软件,拥有特权级别,可以訪问平台的全部硬件和资源,称为"内核空间".而普通的软件执行在"用户空间",它仅仅拥有有限的系统资源,不能直接訪问内核空间和硬件资源. 将系统分为"内核空间"和

浅谈 Linux 内核开发之网络设备驱动

网络设备介绍 网络设备是计算机体系结构中必不可少的一部分,处理器如果想与外界通信,通常都会选择网络设备作为通信接口.众所周知,在 OSI(Open Systems Interconnection,开放网际互连)中,网络被划分为七个层次,从下到上分别是物理层.数据链路层.网络层.传输层.会话层.表示层和应用层.我们所讲的网络设备也包括两个层次,一层叫做 MAC(Media Access Control)层,对应于 OSI 的数据链路层:另一层叫做 PHY(Physical Layer)层,对应于物

Linux内核开发基础

1.Linux内核简介 1.1.Linux系统如何构成 内核空间(Kernel Space)+用户空间(User Space) 用户空间 = 用户程序 + C语言库(例如:GNC C Library) 内核空间 = Kernel + 系统调用接口(System Call Interface) + 体系结构相关代码 Linux系统被划分用户空间 内核空间 原因? 现在CPU实现不同的工作模式,以ARM为例 A.用户模式(usr) B.系统模式(sys) C.外部中断模式(irq) D.管理模式(s

Linux 内核开发——内核简介

内核简介 Linux 构成 Linux 为什么被划分为系统空间和内核控件 隔离核心程序和应用程序,实现对核心程序的保护,如保护操作系统本身的保护. 什么内核空间,用户空间 内核空间和用户空间是程序运行的两种不同的状态,Linux对自身软件系统进行了划分,一部分核心的软件独立于普通的软件,拥有特权级别,能够访问平台的所有硬件和资源,称为"内核空间".而普通的软件运行在"用户空间",它只拥有有限的系统资源,不能直接访问内核空间和硬件资源. 将系统分为"内核空间

嵌入式系统Linux内核开发工程师必须掌握的三十道题 (转)

1)      Linux中主要有哪几种内核锁?2)      Linux中的用户模式和内核模式是什么含意?3)      怎样申请大块内核内存?4)      用户进程间通信主要哪几种方式?5)      通过伙伴系统申请内核内存的函数有哪些?6)      通过slab分配器申请内核内存的函数有?7)      Linux的内核空间和用户空间是如何划分的(以32位系统为例)?8)      vmalloc()申请的内存有什么特点?9)      用户程序使用malloc()申请到的内存空间在

Linux内核开发 — 进程控制

本章主要是以代码的角度分析进程的定义.状态.数据结构等概念. 进程的定义 进程是一段运行的程序,他是一个动态的可执行实体.而程序是代码和数据的集合,代码是一个静态的实体,程序是可以供多个进程使用,比如相同的应用程序可以在不同的计算机上运行而产生多个进程. 进程四要素 进程四要素主要是针对代码中对线程.进程的区别而言: l  有一段程序供其执行 l  有进程专用的内核堆栈空间 l  有内核控制块(有一个task_struct 数据结构),拥有内核控制块,才能被内核调度 l  有独立的用户空间