本文作者(院 浩),请您在阅读本文时尊重作者版权。

[摘要]Linux是一个多用户多任务的操作系统,Linux中实现了对多个进程公平、高效的调度,并不是采用单一的调度策略,而是几种调度策略有机地综合应用。

[关键词] 进程调度 优先级 时间片轮转 实时进程

在任何一种操作系统中,进程调度一直是一个核心问题,进程调度策略的选择对整个系统性能有至关重要的影响,一个好的调度算法应该考虑很多方面:公平、有效、响应时间、周转时间、系统吞吐量等等,但这些因素之间又是相互矛盾的,最终的取舍根据系统要达到的目标而定,本文以Linux操作系统为例,分析其进程调度策略,以期对进程调度过程有更深层次的认识。

一、 Linux的进程调度

Linux支持多进程,进程控制块PCB(Process Control Block)是系统中最为重要的数据结构之一,用来存放进程所必需的各种信息,PCB用结构task-struct来表示,包括进程的类型、进程状态、优先级、时钟信息等,Linux系统中,进程调度操作由schedule()函数执行,这是一个只在内核态运行的函数,函数代码为所有进程共享。

二、 Linux进程调度时机

Linux的进程调度时机与现代操作系统中的调度时机基本一致,为了判断是否可以执行内核的进程调度程序来调度进程,Linux中设置了进程调度标志need-resched,当标志为1时,可执行调度程序.通常,Linux调度时机分以下两种情况:(1)主动调度:指显式调用schedule()函数明确释放CPU,引起新一轮调度.一般发生在当前进程状态改变,如:进程终止、进程睡眠、进程对某些信号处理过程中等,(2)被动调度:指不显示调用schedule()函数,只是PCB中的need-resched进程调度标志,该域置位为1将引起新的进程调度,而每当中断处理和系统调用返回时,核心调度程序都会主动查询need-resched的状态(若置位,则主动调用schedule()函数),一般发生在新的进程产生时、某个进程优先级改变时、某个进程等待的资源可用被唤醒时、当前进程时间片用完等。

三、Linux进程调度策略

一般来说,不同用途的操作系统的调度策略是不同的,Linux进程调度是将优先级调度、时间片轮转法调度、先进先出调度综合起来应用,Linux系统中,不同类型的进程调度策略也不一样。

1. 与进程调度相关的数据结构

每个进程都是一个动态的个体,其生命周期依次定义的数据结构为:TASK-RUNNING,TASK-INTERRUPTIBLE,TASK-UNINTERRUPTIBLE,TASK-ZOMBIE和TASK-STOPPED,一个进程在其生存期间,状态会发生多次变化,与其数据结构相对应的即是Linux进程的状态,分别是:运行态、等待态、暂停态和僵死态。

2. 进程状态及其转换过程的描述

进程创建时的状态为不可打断睡眠,在do-fork()结束前被父进程唤醒后,变为执行状态,处于执行状态的进程被移到run-queue就绪任务队列中等待调度,适当时候由schedule()按调度算法选中,获得CPU,若采用轮转法,即时,由时钟中断触发timer-interrupt(),其内部调用schedule(),引起新一轮调度,当前进程的状态仍处于执行状态,因而把当前进程挂到ruil-queue队尾。

获得CPU且正在运行的进程若申请不到某资源,则调用sleep-on()或interruptible-sleep-on()睡眠,其task-struct进程控制块挂到相应资源的wait-queue等待队列,如果调用sleep-on(),则其状态变为不可打断睡眠,如果调用interruptible-sleep-on(),则其状态变为可打断睡眠,Sleep-on()或interruptible-sleep-on()将调用schedule()函数把睡眠进程释放.

3.进程分类和相应的进程调度策略

Linux系统中,为了高效地调度进程,将进程分成两类:实时进程和普通进程(又称非实时进程或一般进程),实时进程的优先级要高于其他进程,如果一个实时进程处于可执行状态,它将先得到执行,实时进程又有两种策略:时间片轮转和先进先出,在时间片轮转策略中,每个可执行实时进程轮流执行一个时间片,而先进先出策略每个进程按各自在运行队列中的顺序执行且顺序不能变化。

在Linux中,进程调度策略共定义了3种:

Linux系统中的每个进程用task-struct结构来描述,进程调度的依据是task-struct结构中的policy、priority、counter和rt-priority,PCB中设置Policy数据项,其值用于反映针对不同类型的进程而采用的调度策略。SCHED- RR和SCHED-FIFO用于实时进程,分别表示轮转调度策略和先进先出调度策略;SCHED-OTHER表示普通进程,也按照轮转调度策略处理。这三类调度策略均基于优先级.PCB中设置Priority数据项,其值为普通进程的调度优先级.普通进程的可用时间片的初始值即为该值,该值通过系统调用是可以改变的。

PCB中设置rt-priority数据项,其值是实时进程专用的调度优先级,实时进程的可用时间片的初始值即为该值,该优先级也可以用系统调用来修改,PCB中设置counter数据项,用于进程可用时间片时值的计数,初始值为rt-priority或Priority,进程启动后该值随时钟周期递减。

通过对Linux进程调度策略的简单分析,可以看出多进程的管理是一种非常复杂的并发程序设计,每个进程的状态不仅由其自身决定,而且还要受诸多外在因素的影响,而在此基础上的进程调度,为了保证操作系统的稳定性、提高效率和增加灵活性,还必须采用很多方法,这些都是值得我们去研究和探讨的。

参考文献:

[1]刘振鹏李亚平王煜:操作系统[M].北京:中国铁道出版社,2003

[2]赵明富李太福陈鸿雁:Linux嵌入式系统的实时性分析[J].电脑知识与技术,2003,29(18):53—55

本文来源于 www.14edu.com(论文网) 原文链接:http://www.14edu.com/jingji/cyjjx/06044M042010_2.html

转载于:https://www.cnblogs.com/armlinux/archive/2010/08/13/2396946.html

基于Linux系统中进程调度分析相关推荐

  1. linux进程看门狗使用方式,Linux系统中基于看门狗的精细化进程监控方法及系统的制作方法...

    Linux系统中基于看门狗的精细化进程监控方法及系统的制作方法 [技术领域] [0001] 本发明涉及Linux系统的进程监控技术领域,特别是涉及一种Linux系统中基于看 门狗的精细化进程监控方法及 ...

  2. linux分区变为空闲,分析linux系统中磁盘空闲空间的管理方法

    分析linux系统中磁盘空闲空间的管理方法 汪建国 摘要:要把文件信息存放在存储介质上,必须先找出存储介质上可供使用的空闲块.如何实现存储空间的分配和收回,取决于对空闲块的管理方法,主要有两种对磁盘存 ...

  3. linux系统进程调度算法,Linux系统中的进程调度

    进程调度机制主要涉及到调度方式.调度策略和调度时机. 1 调度方式 Linux内核的调度方式基本上采用"抢占式优先级"方式,即当进程在用户模式下运行时,不管是否自愿,在一定条件(如 ...

  4. linux系统中的进程调度采用( ),Linux系统中的进程调度.ppt

    Linux系统中的进程调度.ppt 第3章 处理机调度 本章重点 3.1 调度级别 3.2 作业调度 3.3 进程调度 一.基本概念 二.调度级别 一.基本概念 处理机调度是操作系统的重要功能之一,其 ...

  5. linux系统中 库分为静态库和,Linux系统中“动态库”和“静态库”那点事儿-【经典好文】...

    今天我们主要来说说Linux系统下基于动态库(.so)和静态(.a)的程序那些猫腻.在这之前,我们需要了解一下源代码到可执行程序之间到底发生了什么神奇而美妙的事情. 在linux操作系统中,普遍使用E ...

  6. 怎样实现linux的网络通信协议是,一种基于Linux系统的TCP/IP协议栈的实现

    一种基于Linux系统的TCP/IP协议栈的实现 本文分析了Linux内核TCP/IP协议栈的实现,给出了Linux网络数据处理流程,探讨了Linux的I (本文共3页) 阅读全文>> 介 ...

  7. 软raid1 重新同步_软RAID搭建基于linux系统搭建RAID5

    实验二.软RAID搭建-基于linux系统搭建RAID5 实验要求: 1)创建RAID5; 2)添加一个热备盘sdj 3)指定chunk为32k 4停止阵列,重新激活阵列 5使用热备盘,扩展阵列容量, ...

  8. 基于Linux系统的边界网关协议的设计与实现

    基于Linux系统的边界网关协议的设计与实现 3.6 BGP和RMer系统间通信 RMer系统和BGP系统之间采用的是UNIX本地的服务器客户端模式进行通信,它们创建的socket的地址格式为AF_U ...

  9. Linux系统中文件系统管理

       一.文件系统的基本组成和文件系统结构    1.Linux 系统的基本组成 图例:    Linux系统由Linux内核和一系列GNU库及程序组成.根据其所处的位置,从内向外依次分为:内核.运行 ...

最新文章

  1. 你的团队能通过电梯测试吗?
  2. android谷歌返色状态栏实例,Android实现状态栏(statusbar)渐变效果的示例
  3. iOS10 UI教程禁用视图与用户的交互
  4. 测试人员必学的软件快速测试方法(三)
  5. iPhone之横竖屏与自动旋转
  6. Qt程序打包发布方法(使用官方提供的windeployqt工具)
  7. java 验证码 插件_javaweb中验证码插件Kaptcha的使用
  8. MPLS ××× Carrier Supporting Carrier Option AB(二)
  9. io 流 txt本地生成
  10. MapReduce job任务源码提交流程
  11. 软考中级-软件设计师|下午题攻略
  12. 在计算机中 总线简称,微机中的总线一般分为几等
  13. 这些堪称神器的Chrome插件,提升效率不止10倍
  14. Excel VBA自动填充公式
  15. 判断对错。在java的多态调用中,new的是哪一个类就是调用的哪个类的方法。
  16. if 标准体重 的计算
  17. 干货丨看金仓数据库如何支持透明加密!
  18. 请简述Filter生命周期的各个阶段。
  19. 爱情刚刚开始是最美好的
  20. cad计算机中怎么用除号,CAD中特殊符号如何输入?超全教程,一看就懂!

热门文章

  1. 小小的改进,逻辑运算
  2. 2021年计算机专业工作规划,2021年小学电脑室工作计划
  3. mysql 拷贝数据库 表存在却打不开_mysql数据库文件复制后表打不开
  4. es java聚合查询只有10_关于在elasticSearch中使用聚合查询后只显示10个bucket的问题...
  5. Linux实战教学笔记45:NoSQL数据库之redis持久化存储(一)
  6. 洋哥大讲堂之解决Windows10操作系统中,“启用或关闭windows功能”里没有IE选项的问题...
  7. php中全局变量global和超全局变量$GLOBALS
  8. moco 搭建接口mock环境入门
  9. mysql中pager命令妙用
  10. ubuntu设置鼠标单击打开文件夹或者文件