进程调度算法Linux进程调度算法
这次介绍一下操作系统的进程调度算法
- 操作系统的调度分为三种:1.远程调度(创建新进程);2.中程调度(交换功能的一部分);3.短程调度(下次执行哪个进程)
这次讲述的就是短程调度,可以简单的看作咱们平时所说的进程调度啦
当发生下面几种情况的时候会调用短程调度器,然后就看下次执行那个进程啦
- 时钟中断
- I/O中断
- 操作系统调用
- 信号(如信号量)
- 进程调度算法:
- 先来先服务(FCFS)
- 短作业优先(SPN)
- 最短剩余时间(SRT)
- 时间片轮转
- 最高响应比优先
- 公平共享调度
- 先来先服务
就和名字一样,哪个进程先来就先获得处理器时间,,用一个队列暂存等待处理器的进程,优点是实现简单(太简单了吧喂),缺点,遇到那种又臭又长的进程就很不爽了,好比食堂打饭,前面的人不买一直问,后面的人一直排队,那么后面的人就怎么了呢?后面的人就饥饿!同时如果现在有一个马上就要饿死的人急需吃饭,这就很尴尬了(紧急的进程无法处理,优先级高的进程处于饥饿状态),所以有了优先级队列的先来先服务算法,这样也不是很好,因为总有又臭又长的进程,排队是谁都不乐意的吧,而且处理器时间就不公平了。
- 短作业优先
因为先来先服务不好,所以有了短作业优先,通过设置执行时间短的进程作业的优先级为高来实现,也很简单粗暴,就是说进程时间越短就越先执行,看着是比较好了,不浪费时间了,但是有没有想过长进程的感受,来了一群短的进程,然后一直来短进程,这是要饿死长进程的节奏,人家长有错么?如果是可抢占的方式(见最短剩余时间版本),就更惨了,只要来了更短的就别想好好执行了。。。
- 最短剩余时间
就是刚才说的短作业优先的抢占版本,说过他的缺点了,当前执行的进程还剩10个时间单位,但是一直来了一群只要2个时间单位就跑完的进程,那当前的进程就会被抢占,然后含恨饿死。。
- 时间片轮转
既然上面几种算法都有可能出现饥饿进程,那么我就干脆让每个进程都执行那么一会,这样不就比较公平了?每个进程都有机会在处理器上跑,看起来很和谐,但是还是没有解决优先级的问题,优先级不好控制,比如有什么紧急的进程需要立即执行,就不好办了。而且每个进程的具体情况也是不一样的,比如有I/O消耗型进程,和处理器消耗型进程,在同样的事件片里真正占用处理器的时间是不一样的,而我们是真正占用处理器的时间希望能一样的,这样就公平了嘛。这样看来,时间片轮转也是有缺点的。
- 最高响应比优先
什么是响应比?看一下这个公式:R=(w+s)/s,其中R是响应比,w是等待处理器的时间,s是期待的服务时间,简单的来说响应比就是,进程从加入等待队列开始一直到执行完毕经历的时间除以进程使用处理器的时间,这个响应比比较高的就证明该进程等待比较久了,它估计会很饿,先让它吃!
- 公平共享调度
Linux系统中普通进程使用的调度方法就是公平共享调度的一个实例,被称作完全公平调度算法(CFS),虽然一定不可能公平。。。详情参照我的另一篇博客。。传送门召唤!!:http://www.cnblogs.com/lenomirei/p/5516872.html
- Linux系统中的进程调度方案
Linux在进行进程调度的时候把进程分为两种:1.普通进程;2.实时进程
实时进程的优先级永远比普通进程的优先级高,也就是说实时进程只要来了就可以抢占普通进程,而且还抓住处理器就不撒手,直到所有的实时进程都执行完毕,才会把处理器让出来给普通进程使用
之前也说了,普通进程的调度采用的是完全公平调度(CFS)对应的是SCHED_NORMAL
而实时进程采用的调度方法就比较简单粗暴了,Linux提供了两种实时调度策略:SCHED_FIFO和SCHED_RR。
SCHED_FIFO:简单的先入先出的调度算法,不使用时间片,只可能被更高优先级的FIFO或者SCHED_RR抢占
SCHED_RR:时间片轮转的方式,优先级比SCHED_FIFO还要高,可以抢占SCHED_FIFO
实时进程的调度没有实时优先级这一说法,采用的是静态优先级,一开始定好优先级之后就不会改变了。
进程调度算法Linux进程调度算法的更多相关文章
- Linux下的进程类别(内核线程、轻量级进程和用户进程)--Linux进程的管理与调度(四)
本文中出现的,内核线程,轻量级进程,用户进程,用户线程等概念,如果不太熟悉, 可以参见 内核线程.轻量级进程.用户线程三种线程概念解惑(线程≠轻量级进程) Linux进程类别 虽然我们在区分Linux ...
- dvm进程,linux进程,应用程序进程是否同一概念
Android 运行环境主要指的虚拟机技术——Dalvik.Android中的所有Java程序都是运行在Dalvik VM上的.Android上的每个程序都有自己的线程,DVM只执行.dex的Dalv ...
- Linux进程管理知识整理
Linux进程管理知识整理 1.进程有哪些状态?什么是进程的可中断等待状态?进程退出后为什么要等待调度器删除其task_struct结构?进程的退出状态有哪些? TASK_RUNNING(可运行状态) ...
- Linux进程调度器概述--Linux进程的管理与调度(十五)
调度器面对的情形就是这样, 其任务是在程序之间共享CPU时间, 创造并行执行的错觉, 该任务分为两个不同的部分, 其中一个涉及调度策略, 另外一个涉及上下文切换. 1 背景知识 1.1 什么是调度器 ...
- Linux进程管理与调度-之-目录导航【转】
转自:http://blog.csdn.net/gatieme/article/details/51456569 版权声明:本文为博主原创文章 && 转载请著名出处 @ http:// ...
- Linux进程:管理和调度
一:进程管理 进程.轻量级进程和线程 通常定义:进程是程序执行时的一个实例. 这个很像类和实例对象的关系.从内核来看:进程的目的就是担当分配系统资源(CPU,内存等)的实体. 当进程创建时,它几乎和父 ...
- Linux 进程必知必会
上一篇文章只是简单的描述了一下 Linux 基本概念,通过几个例子来说明 Linux 基本应用程序,然后以 Linux 基本内核构造来结尾.那么本篇文章我们就深入理解一下 Linux 内核来理解 Li ...
- Linux唤醒抢占----Linux进程的管理与调度(二十三)
1. 唤醒抢占 当在try_to_wake_up/wake_up_process和wake_up_new_task中唤醒进程时, 内核使用全局check_preempt_curr看看是否进程可以抢占当 ...
- 【Todo】Linux进程调度算法学习
参考这篇文章 http://blog.chinaunix.net/uid-27052262-id-3239260.html Linux支持三种进程调度策略,分别是SCHED_FIFO . SCHED_ ...
随机推荐
- 发送SMS短信(JSON) 转载
http://blog.csdn.net/ldl22847/article/details/42553883 public static string GetMobileConfByUserId( ...
- IIS+php+mysql 环境搭建
1.安装IIS,并安装CGI角色: 2.安装php manager IIS扩展: 3.安装php: 4.配置php manager, 添加php php-cgi.exe执行路径 : 5.下载mysql ...
- silverlight列表控件ComboBox 托管代码绑订数据集合
.xaml <ComboBox x:Name="myCombobox" Width="300" Height="30"> < ...
- centos 下Supervisor 守护进程基本配置
supervisor:C/S架构的进程控制系统,可使用户在类UNIX系统中监控.管理进程.常用于管理与某个用户或项目相关的进程. 组成部分supervisord:服务守护进程supervisorctl ...
- HashTable,HashSet与Dictionary
1.HashTable 哈希表(HashTable)表示键/值对的集合.在.NET Framework中,Hashtable是System.Collections命名空间提供的一个容器,用于处理和表现 ...
- 【Android 系统开发】Android JNI/NDK (三) 之 JNIEnv 解析
jni.h文件 : 了解 JNI 需要配合 jni.h 文件, jni.h 是 Google NDK 中的一个文件, 位置是 $/Android-ndk-r9d/platforms/android-1 ...
- php接口post提交方法 (改良版)
$postData = "reqType=2&caller=15088719619&called=15068722845"; $result = send_post ...
- 安装和使用memcached
引用:http://www.czhphp.com/archives/252 如何将 memcached 融入到您的环境中? 在开始安装和使用 using memcached 之前,我们需要了解如何将 ...
- ajax 提交數據
$.ajax({ type: "get", async: false, url: "/book/UpdateSession", data: { }, dataT ...
- django中自定义标签和过滤器
想要实现自定义标签和过滤器需要进行准备工作: 准备(必需)工作: 1 在某个app下创建一个名为templatetags(必需,且包名不可变)的包.假设我们在名为polls的app下创建了一个tem ...