本文转载自:http://blog.chinaunix.net/uid-25014876-id-65555.html

linux设备驱动归纳总结(四):2.进程调度的相关概念

xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx

进程的调度就是指进程间的切换,进程调度的知识其实我也不太清除,我查找的资料有些说法并不一致,所以我只能说一下一些我的理解。如有错误或不足,望指正。

xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx

一、I/O消耗型进程和处理器消耗型的进程:

进程分为I/O消耗型和处理器消耗型两种。

I/O消耗型,是指进程大部分时间用来提交I/O请求或者等待I/O请求的进程。这类进程的特征是,经常需要运行,但执行一次需要的时间不长。如文字编辑。

处理器消耗型,是指进程大部分时间用来执行代码的进程。这类进程对系统的响应时间要求比较少,像看个视频,慢个半秒人是察觉不出来的。但这种进程耗CPU,所以这类型的进程需要更多一点的执行时间。

老李说,内核一切来源于生活,I/O消耗型就像解小手,经常得去,但每次花的时间不长,处理器消耗型就像解大手,有时一天要么就来一次,但也要花个十来分钟。

同时上面的两种进程分类并不是绝对的,进程可以同时属于这两种类型,就好像你上个厕所也可以同时干两件事。

xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx

二、进程的优先级

优先级其实就是一个数,优先级高的程序先运行,低优先级的程序后运行,这是基本的进程调度策略。

内核有两种不同的优先级,静态优先级和当态优先级,它们的进程的调度算法和时间片的分配方面起着重要作用,这里我不能一一详述,我也不太了解。

xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx

三、时间片

时间片是一个数值,我把它理解为:在一个周期里,内核调度全部进程的总时间中分给一个进程运行的时间。

秒内,进程A有0.6秒,进程B有0.3秒,进程C有0.1秒,它们所得到的时间就叫做时间片,如果没有中断等其它情况的话,进程A可以在内核分配的0.6秒内欢快地连续地运行,直到时间片用完。

当然,上面的立即举得有点过分,时间片的大小一般都是以ms为单位,时间片太长,用户就会觉得程序有延时,如果时间片太短,那大部分的时间都耗费在切换进程的功夫上,得不偿失。

另外,分配的时间片并不是一定要一次过用完,进程可以分开几次使用,如交互式的进程(文本编辑),内核分配给它的时间片远远多于处理一次输入的时间,所以这类的进程响应次数多,用的时间片却比消耗型进程的少。

分钟的小解,但一般都会把时间分配到需要小解的时候。

还需要记住一点的是,内核等到所有进程的时间片都用完了,再对进程重新分配新的时间片。

xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx

四、进程的调度策略

基于上面介绍的上面三个概念,简单的说一下进程的调度策略。先说一下分类:

按调度策略分类:

SCHED_NORMAL:普通的分时进程,上层应用程序的默认策略。

SCHED_FIFO:先进先出的实时进程。

SCHED_RR:时间片轮转的实时进程。

按调度类分类:

CFS调度类:用于策略SCHED_NORMAL等。

实时调度类:用于SCHED_FIFO,SCHED_RR。

上面说了这么多只是想说一点,进程的调度策略有很多,因为书上讲的也不多,我也没细细去了解。基于CFS调度类,简单介绍一下上面提及的三个概念的关系。

直到我还对书上的一个话坚信不疑:“优先级越高,进程所能分到的时间片就越多”。其实这是不一定正确的,解小手优先级高就好了,凭什么时间还能比解大手的多,这公平吗?

优先级和时间片本来就是个矛盾的概念,有些进程被定义了高优先级是为了能够得到更快的调度,并不是为了获得更多的时间片。

《linux内核设计与实现》(第三版)举了CFS调度的这样一个例子:如果现在处理器上只有两个进程,一个是文字编辑,一个是视频解码。按照原来的理解,文字编辑的进程会获得高优先级和更多时间片。这样的话,视频解码的时间片就会显得不够用了。所以。事实上并不是这样子,基于CFS调度的算法,两个程序被分配了相同的优先级和时间片,这样就能确保视频解码进程能够有更多的时间进行解码。

那内核怎么确保文字编辑的响应呢?原来,内核会观擦两个进程在这段时间内谁已经使用的时间片更少,当使用时间片少的进程需要调度时,内核会优先考虑这样的进程。这样就达到了响应速度快的要求。

所以说,优先级和时间片的分配,是根据内核的调度算法分配。

具体的CFS算法在书上有详细的介绍。

xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx

五、总结

这次讲得很少,只是讲了进程调度的三个基本的概念,上面讲的内容并没有涉及内核抢占的知识,但是,不管在有没有内核抢占的情况下,上面的内容都是成立的。

内核抢占将留在下一节。

xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx

linux设备驱动归纳总结(四):2.进程调度的相关概念【转】的更多相关文章

  1. 【Linux开发】linux设备驱动归纳总结(四):2.进程调度的相关概念

    linux设备驱动归纳总结(四):2.进程调度的相关概念 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx ...

  2. linux设备驱动归纳总结(四):4.单处理器下的竞态和并发【转】

    本文转载自:http://blog.chinaunix.net/uid-25014876-id-67005.html linux设备驱动归纳总结(四):4.单处理器下的竞态和并发 xxxxxxxxxx ...

  3. linux设备驱动归纳总结(四):3.抢占和上下文切换【转】

    本文转载自:http://blog.chinaunix.net/uid-25014876-id-65711.html linux设备驱动归纳总结(四):3.抢占和上下文切换 xxxxxxxxxxxxx ...

  4. linux设备驱动归纳总结(四):1.进程管理的相关概念【转】

    本文转载自;http://blog.chinaunix.net/uid-25014876-id-64866.html linux设备驱动归纳总结(四):1.进程管理的相关概念 xxxxxxxxxxxx ...

  5. 【Linux开发】linux设备驱动归纳总结(四):4.单处理器下的竞态和并发

    linux设备驱动归纳总结(四):4.单处理器下的竞态和并发 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx ...

  6. 【Linux开发】linux设备驱动归纳总结(四):3.抢占和上下文切换

    linux设备驱动归纳总结(四):3.抢占和上下文切换 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx ...

  7. 【Linux开发】linux设备驱动归纳总结(四):1.进程管理的相关概念

    linux设备驱动归纳总结(四):1.进程管理的相关概念 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx ...

  8. linux设备驱动归纳总结(四):5.多处理器下的竞态和并发【转】

    本文转载自:http://blog.chinaunix.net/uid-25014876-id-67673.html linux设备驱动归纳总结(四):5.多处理器下的竞态和并发 xxxxxxxxxx ...

  9. 【Linux开发】linux设备驱动归纳总结(四):5.多处理器下的竞态和并发

    linux设备驱动归纳总结(四):5.多处理器下的竞态和并发 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx ...

随机推荐

  1. ios项目生成ipa文件方法

    做这些的前提是你配置好了所有的证书,如果还没先去配置证书吧. 1.打开需要生成ipa的ios项目.2.在运行按钮的后面选择ios Device3.点击Product 按钮,选择第五个Archive4. ...

  2. 为什么玩VR眼镜会头晕?

    为什么玩VR眼镜会头晕?看完本文你就懂了   很多用户都体验过各式各样的VR眼镜或者说头盔,但是不管哪一款,都很容易出现头晕的情况.相信大家都纳闷过,为什么玩VR眼镜会头晕?实际上这是和设备本身的技术 ...

  3. HttpwebClient的四种请求方式

    最近悟出来一个道理,在这儿分享给大家:学历代表你的过去,能力代表你的现在,学习代表你的将来. 十年河东十年河西,莫欺少年穷.      本文旨在发布代码,供自己参考,也供大家参考,谢谢. 正题: Ht ...

  4. uiwebview 兼容性 - IOS8及以上 WKWebView

    @import WKWebView; WKWebView *webView = [[WKWebView alloc]init......]; 使用. WKWebView兼容 IOS 及 OSX.IOS ...

  5. Synchronized及其实现原理

    并发编程中synchronized一直是元老级角色,我们称之为重量级锁.主要用在三个地方: 1.修饰普通方法,锁是当前实例对象. 2.修饰类方法,锁是当前类的Class对象. 3.修饰代码块,锁是sy ...

  6. C++Primer 第四章

    //1.当我们对运算符进行重载的时候,其包括运算对象的类型和返回值的类型都是由该运算符定义的,但是运算对象的个数和优先级,结合律都是不能改变的 //2.当一个对象被用作右值的时候,用的是对象的值(内容 ...

  7. PostgreSQL 中定义自己需要的数据类型

    PostgreSQL解决某系数据库中的tinyint数据类型问题,创建自己需要的数据类型如下: CREATE DOMAIN tinyint AS smallint CONSTRAINT tinyint ...

  8. G面经prepare: Maximum Subsequence in Another String's Order

    求string str1中含有string str2 order的 subsequence 的最小长度 DP做法:dp[i][j]定义为pattern对应到i位置,string对应到j位置时,shor ...

  9. 、JAVA-异常

    异常 1.种类(error 系统异常,无法处理)(exception 程序异常,可以处理) 1.算数异常 2.空指针异常 原因:对象没有实例化就调用他的实例方法,会造成空指针异常 2.常见异常 1.R ...

  10. JS和JQUERY的区别

    ①.根据ID取元素 { JS:取到的是一个DOM对象. 例:var div = document.getElementByID("one"); JQUERY:取到的是一个JQUER ...