`
mywebcode
  • 浏览: 1001812 次
文章分类
社区版块
存档分类
最新评论

Linux如何实现O(1)进程调度

 
阅读更多

Linux调度主要是在一个runqueue结构体上操作。runqueue结构体有一个prio_array结构体数组,该数组中有个两个prio_array结构体。prio_array结构体的定义如下:

struct prio_array 
{
   int nr_active /* number of tasks in the queue */;
   unsigned long bitmap[BITMAP_SIZE]; /* priority bitmap */ 
   struct list_head queue[MAX_PRIO]; /* priority queue */
}

这两个prio_array,一个挂着expired task(时间片已经用完的task),另一个挂着active task(时间片尚未用完的task)。当active task为空时,就交换这两个prio_array的指针值就OK了。
接下来讲解prio_array中的成员

nr_active就不用多说了,就表示该prio_array结构体上挂着多少个任务。

struct list_head queue[MAX_PRIO]:这是一个指针数组,每个数组标记一个链表头,每个链表头上挂着一串相同优先级的task。

unsigned long bitmap[BITMAP_SIZE]:这个成员的每一个表示对应优先级的task链表上是否为空。


有了上面的基础,接下来就讲解如何实现O(1)调度,当要调度程序时,

1)首先找到bitmap成员上第一个为 1 的bit位置,比如说bitmap的第8位为1,则表示前面0~7高优先级的task链表上没有task。

2)然后访问struct list_head queue[MAX_PRIO]数组的第八个成员,该成员是优先级为8的task链表的表头,

3)最后通过表头取下第一个task,再将其调度上CPU,这样就实现了O(1)调度。


分享到:
评论

相关推荐

    linux进程调度图

    linux内核O(1)调度算法下进程之间的切换情况,注意,现在的linux使用的是绝对公平调度,和这个有比较大区别,

    进程的优先级与调度策略—Linux

    进程调度中的所谓调度就是从就绪队列中选择一个进程投入CPU运行,则调度的主战场就是就绪队列,核心是调度算法,实质性的动作是进程的切换。 对于以时间片为主的调度,时钟中断就是驱动力,确保每个进程在CPU上运行...

    80-教学课件-示例:Linux进程调度算法1

    1.Linux 进程调度方式: 2.Linux 进程调度策略 3.进程的调度算法 4.Linux 2.6 O(1)进程调度算法

    Linux进程的睡眠和唤醒

    1 Linux进程的睡眠和唤醒 在Linux中,仅等待CPU时间的进程称为就绪进程,它们被放置在一个运行队列中,一个就绪进程的状 态标志位为TASK_RUNNING。一旦一个运行中的进程时间片用完, Linux 内核的调度器会剥夺这个...

    操作系统课设-进程互斥与调度

    2、编制两种进程调度算法:时间片轮转调度算法和优先权调度算法。 四、实验步骤 1、打开centos7,进入终端命令行模式。 2、使用vi编辑器,vi *.c。(*是要编辑的文件名)。 3、在实验一,进程互斥中,vi zhanghaohao...

    Linux下进程调度与优先级的深入分析

    为配合系统对进程的调度,采用两种方式进行处理1.1)...1.2)抢先式多任务处理当进程不进行I/O,比如计算型运算应用时,一直占用大量的CPU时间,这时系统将会利用中断,使原占用CPU的进程放弃CPU.这时称之为抢先式多任务处理

    论文研究-一种实时性O(1)调度改进算法.pdf

    保留了I/O队列以缩短I/O请求的响应时间,同时采用动态计算优先级和时间片的方法来使通用进程调度达到最优。最后,通过仿真实验的结果比较,证明了RMOSA算法相对于Linux 2.6.11O(1)调度算法的优越性。

    使用C语言在Linux系统中实现子进程管理,在进程管理中,算法的应用场景在需要进程按照调用顺序调度的情况下使用 算法的作用是维护

    与进程执行相关的各种共享资源有:CPU、存储器、I/O设备、时间片) 所以进程的三种基本状态有:就绪状态、运行状态、阻塞状态。 使用算法在队列上实现先进先出,实现了基本的算法调度,效果是按照顺序执行。FIFO...

    如何更改Linux 的I/O调度器?

    Linux 的 I/O 调度器是一个以块式 I/O 访问存储卷的进程,有时也叫磁盘调度器。Linux I/O 调度器的工作机制是控制块设备的请求队列:确定队列中哪些 I/O 的优先级更高以及何时下发 I/O 到块设备,以此来减少磁盘寻道...

    Linux内核中的进程

     Linux之前采用O(1)调度器,它对大服务器的工作负载很理想,但是对响应时间敏感的程序却有不足。在2.6.23内核版本中用完全公平调度算法(CFS)代替了O(1)调度算法。  进程可以被分为I/O消耗型和处理器消耗型。I...

    linux-archive:用于研究进程调度程序Linux归档文件。调度系统设计精要http

    任务可能是虚拟的计算任务,例如线程,进程或者数据流,这些任务会被调度到硬件资源上执行,例如:处理器CPU等设备。 图1-调度系统设计精要 本文会介绍调度系统的常见场景以及设计过程中的一些关键问题,调度器的...

    linux 系统源码全面剖析

    进程调度 并发同步 等待队列 内存管理 物理内存管理 伙伴分配算法 Slab分配算法 虚拟内存管理 mmap完全剖析 内存交换 vmalloc原理与实现 写时复制 零拷贝技术 虚拟内存空间管理 中断机制 硬件相关 中断处理 系统调用...

    进程控制开发.pdf

    文件是 Linux 中最常见最基础的操作对象,而进程则是系统调度的单位,在上一章学习了文件 I/O 控制之后,本章主要讲解进程控制开发部分,通过本章的学习,读者将会掌握以下内容 掌握进程相关的基本概念 掌握 Linux ...

    Arm 培训教材-Linux操作系统部分!

    Linux 的进程与中断管理机制 2.2.3. 调度机制 2.2.3.1. 调度类型 2.2.3.2. 单处理器调度 2.2.3.3. 多处理器调度 2.2.3.4. 实时调度 2.2.3.5. Linux 的调度机制 2.2.4. I/O 设备 2.2.4.1. I/O 设备描述参数 2.2.4.2....

    清华大学Linux操作系统原理与应用

    3.4.3 Linux进程调度时机 50 3.4.4 进程调度的依据 51 3.4.5 调度函数schedule()的实现 52 3.5 进程的创建 54 3.5.1 创建进程 55 3.5.2 线程及其创建 56 3.6 与进程相关的系统调用及其应用 58 3.6.1 fork系统调用 58...

    向嵌入式Linux移植实时设备驱动程序

    本文将纵览几种常用的内存映射I/O方法,它们经常出现于旧的...特别地,本文会重点讨论和比较RTOS代码中的内存映射,Linux基于 I/O调度队列的移植,和重新定义RTOS I/O,以便在本地Linux 驱动程序和守护进程里应用。

    Understanding the Linux Kernel

     第七章进程调度  调度策略  调度算法  调度程序所使用的数据结构  调度程序所使用的函数  多处理器系统中运行队列的平衡  与调度相关的系统调用  第八章内存管理  页框管理  内存区管理  非连续内存区...

    深入分析Linux内核源码

    5.3.2 Linux进程调度时机 5.3.3 进程调度的依据 5.3.4 进程可运行程度的衡量 5.3.5 进程调度的实现 5.4 进程切换 5.4.1 硬件支持 5.4.2 进程切换 第六章 Linux内存管理 6.1 Linux的内存管理概述 6.1.1 ...

    Linux程序设计参考书-六部

    ioctl第6章Linux进程间通信第7章声音编程第8章字符单元图形第9章I/O端口编程第10章把应用程序移植到Linux上附录以字母顺序排列的系统调用第四部Linux内核概念系统结构第1章系统结构第2章子系统的系统结构第3章结论...

    深入理解linux内核(中文版PDF)part1

    进程调度 中断异常 虚拟文件系统 管理I/O设备

Global site tag (gtag.js) - Google Analytics