`
memorymyann
  • 浏览: 270757 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

linux进程调度政策

阅读更多

进程调度政策就是调度系统种哪一个进程来CPU运行。这种调度分2层考虑。

 

第一层,进程状态这个是最优先考虑的,也就是说优先级最高的。在linux中只有就绪态的进程才有可能会被调度选中然后占有CPU,其它状态的进程不可能占有的到CPU。下面是linux中进程的状态

TASK_RUNNING:就绪状态,得到CPU就可以运行。
TASK_INTERRUPTIBLE:浅度睡眠,资源到位或者受到信号就会变成就绪态。
TASK_UNINTERRUPTIBLE:深度睡眠,资源到位就会进入就绪态,不响应信号。
TASK_ZOMBIE:僵死态,进程exit后。
TASK_STOPPED:暂停态,收到SIG_CONT信号进入就绪态。

 

第二层,其实真正在操作系统中的实现,就是所有就绪态进程链接成一个队列,进程调度时候只会考虑这个队列中的进程,对其它的进程不考虑,这就实现了第一层中的要求。接下来就是就绪队列内部各个进程的竞争了。

 

Linux采用3种不同的调度政策,SCHED_FIFO(下面简写成FIFO,先来先服务),SCHED_RR(简写成RR,时间片轮流),SCHED_OTHER(下面简写成OTHER)。这里大家就能看出一个问题,采用同等调度政策的进程之间自然有可比性,Linux3种调度政策并存,那么不同调度政策间的进程如何比较呢?可以说他们之间根本就没有可比性。其实在调度时候,调度只看一个指标,那就是各个进程所具有的权值,权值最大的且在可执行队列中排在最前面的就会被调度执行。而权值的计算才会设计到各方面因素,其中调度政策可以说在计算权值中,份量是最重的。

 

为什么Linux要这么干呢?这是由于事务的多样性决定的,进程有实时性进程和非实时性的进程2种,FIFO和RR是用来支持实时性进程的调度,我们看一下这3种政策下权值的计算公式就明白了:

FIFO和RR计算公式,权值=1000+进程真正的运行时间

OTHER计算公式,当时间片为0时,权值=0.当时间片不为0时候,权值=剩余时间片+20-nice,同时如果是内核线程有+1的小加分,这是因为内核线程无需用户空间的切换,所以给它加了一分,奖励他在进程切换时候开销小的功劳。时间片好理解,那么nice这个值,用过linux系统的人都知道,这是一个从unix下继承过来的概念,表示谦让度,是一个从20~-19的数,可以通过nice和renice指令来设置。从代码中也能看到值越小就越不会谦让他人。

 

从这里我们看出FIFO和RR至少有1000的基数,所以在有FIFO和RR调度政策进程存在时,OTHER进程是没有机会被调度的到的。从权值计算公式同时也能看出,FIFO先来先服务的调度政策满足了,但RR这个时间片轮流的调度如果按照这种权值计算是不能满足时间片轮流这一概念的。这里只是权值的计算,在调度时候对RR政策的进程特殊处理。

 

以上都是权值计算,下面看看真正的调度过程,首先是对RR政策进程的特殊处理,如果当前进程采用的RR政策,那么看他的时间片是否用完,用完了就踢到就绪队列尾部,同时恢复他的时间片。然后是便利整个就绪队列,找到第一个权值最大的进程来运行。

 

整体调度效果就是:如果有FIFO和RR政策的进程,就优先调度他们2个,他们之间看已执行时间长短决定胜负,而2种政策内部则遵守各自调度政策。而OTHER只有在前面2种不存在于就绪队列时候才有可能执行,他们实际也是轮流执行,但他们之间是靠剩余时间和NICE值来决定胜负。同时就绪队列中排在最前面的最优先考虑在同样权值情况下。

 

小插曲:当前进程如果是就绪态,那么同等权值情况下,将最优先考虑。

分享到:
评论
2 楼 memorymyann 2008-10-15  
Uranus 写道

看下你的理论知识能不能解决这个实际问题
http://linux.chinaunix.net/bbs/thread-1036934-1-1.html


不好意思,没看出问题所在。查找中发现一个错误rt_priority指的是实时优先级。
1 楼 Uranus 2008-10-13  
看下你的理论知识能不能解决这个实际问题
http://linux.chinaunix.net/bbs/thread-1036934-1-1.html

相关推荐

    Linux进程调度算法分析

    Linux 进程调度算法分析 基于 X86 平台 Linux2.6.26 内核进程调度部分代码,刨析 Linux 进程调度算法,对算法的原理,实现和复杂度进行了分析并提出了算法改进措施。 Linux 进程调度概述: Linux 系统支持用户态...

    linux内核进程调度.doc

    【Linux内核进程调度】是操作系统的核心组成部分,它决定了如何在多进程环境下公平有效地分配CPU资源。调度的主要目标是提高系统整体的响应速度和吞吐量,同时保证各种类型的进程,如用户进程、超级用户进程和实时...

    Linux操作系统实验指导书 课题组编写

    - **Linux简史**:从1981年IBM PC的兴起,到MS-DOS的统治地位,再到Unix高昂的价格和闭源政策,Linus Torvalds在1991年基于对MINIX的学习和不满,开始开发Linux,初衷是为了学习386体系结构的编程技术。Linux的诞生...

    守护进程Demo

    在Android系统中,由于其基于Linux内核,同样支持守护进程的概念,但实现方式有所不同。本示例"守护进程Demo"展示了如何在Android环境中创建并维护一个持久运行的后台服务。 首先,让我们理解守护进程的基本概念。...

    Local and Remote Memory: Memory in a Linux/NUMA System

    但是,如果进程所需的内存资源超过了单个节点的容量,或者由于某些原因(如调度策略、管理员干预或内存分配的变化),进程可能会访问到远程节点的内存,从而导致性能下降。 ### 3. Linux与NUMA内存管理 #### 3.1 ...

    基于Linux的简捷私有云计算平台的设计与实现.pdf

    云计算是一种基于互联网的计算方式,通过虚拟化技术将数据中心的各种资源统一管理和调度,为用户提供可扩展的、按需的计算和存储资源。随着企业信息化需求的不断增长,云计算以其高性能、低成本、灵活性和可扩展性等...

    Red Hat Enterprise Linux 6 Power Management Guide

    这可能包括调整调度器行为、限制后台进程的活动以及优化I/O策略。 6. **硬件支持**:RHEL6与广泛的硬件平台兼容,包括服务器、工作站和移动设备。硬件供应商通常为他们的设备提供了特定的电源管理固件和驱动程序,...

    Android应用开发揭秘

    操作系统知识使我们能够了解底层资源管理机制,如进程调度、内存分配等。计算机体系结构的知识让我们理解硬件和软件如何协同工作,而编译原理则是学习编程语言如何被翻译成机器能理解的语言的必要条件。 对于...

    android揭秘(Unlocking Android)

    2. **Linux内核**:作为Android的基础,Linux内核提供了设备驱动、内存管理、进程调度等关键服务。书中会讲解如何利用Linux内核特性优化Android性能。 3. **硬件抽象层**:HAL将硬件设备的接口标准化,使上层软件与...

    Android系统原理与开发要点详解_培训课件.rar

    Linux内核也负责进程调度、文件系统和安全机制。 2. 应用框架层:这一层包含了Android的核心服务,如Activity Manager(活动管理器)、Content Provider(内容提供者)、Broadcast Receiver(广播接收器)和Service...

    ch2网络操作系统安全.ppt

    操作系统的主要功能包括:进程控制和调度、信息处理、存储器管理、文件管理、输入/输出管理、资源管理等。常用的网络操作系统有Windows 2000 Server、Windows NT Server、NetWare、UNIX和Linux。 2.2 操作系统的...

    解包boot.img工具

    1. 内核(Kernel):Linux内核是Android操作系统的基石,负责硬件管理、进程调度、内存管理等基础功能。 2. 引导加载器(Bootloader):负责初始化硬件并加载内核到内存中,如 fastboot 和 recovery 模式。 3. ...

    Android的架构与应用

    1. **Linux内核层**:Android的基础是Linux内核,它提供了硬件抽象层,包括内存管理、进程调度、网络协议栈等关键服务。内核支持设备驱动,使得Android能够适配各种硬件平台。 2. **系统库层**:这一层包含了一系列...

    android-5.0.1-sources

    Android 5.0.1基于Linux内核,内核是整个系统的基石,负责管理硬件资源和进程调度。源码中可以深入研究内核驱动,如GPU、Wi-Fi、蓝牙等,了解如何与硬件交互。硬件抽象层(HAL)则将具体的硬件操作封装,为上层应用...

    Android开发教程笔记完全版.zip

    - Linux内核为Android提供基础服务,如内存管理、进程调度等。 - 硬件抽象层(HAL)使得上层软件与硬件接口标准化。 - 运行时库包括Dalvik/ART虚拟机,用于执行Android应用。 - 应用程序框架提供了各种服务和组件...

    邮件投递,多线程的例子

    定时器可以是系统级别的(如Linux的timerfd或Windows的SetTimer),也可以是编程库提供的(如Java的ScheduledExecutorService)。 6. **编程语言与库**: 实现邮件投递和多线程的示例可能涉及各种编程语言,如Java...

Global site tag (gtag.js) - Google Analytics