设为首页 - 加入收藏
广告 1000x90
您的当前位置:78345黄大仙救世网报 > 进程调度 > 正文

关于嵌入式Linux中进程调度的内容浅析

来源:未知 编辑:admin 时间:2019-05-12

  )是整个计算机系统的核心资源,在多进程的操作系统中,进程数往往多于处理机数,这将导致各进程互相争夺处理机。进程调度对系统功能的实现 及各方面的性能都有着决定性的影响,其实质就是把处理机公平、合理、高效地分配给各个进程。调度是实现多任务并发执行的必要手段,不同的操作系统有着不同 的调度目标。在传统的Unix类分时系统中,保证多个进程公平地使用系统资源,提供较好的响应时间是调度的主要目标;而在强实时操作系统中,总是优先级高 的任务优先获得处理机的使用权。

  Linux具有内核稳定、功能强大、可裁减、低成本等特点,非常适合嵌入式应用。但是Linux内核本身并不具备 强实时特性,且内核体积较大,因此,想要把Linux用于嵌入式系统,必须对Linux进行实时化、嵌入式化。Linux结合实时进程和非实时进程(普通 进程)自身的特点,综合了上述几种调度策略,实现了高效、灵活的进程调度。

  TASK_RUNNING:可运行状态。处于该状态的进程可以被调度执行而成为当前进程。

  TASK_INTERRUPTIBLE:可中断的睡眠状态。处于该状态的进程在所需资源有效时被唤醒,也可以通过信号或定时中断唤醒。

  TASK_UNINTERRUPTIBLE:不可中断的睡眠状态。处于该状态的进程仅当所需资源有效时被唤醒。

  TASK_ZOMBIE:僵尸状态。表示进程结束且已释放资源,但其task_struct仍未释放。

  TASK_STOPPED:暂停状态。处于该状态的进程通过其他进程的信号才能被唤醒。

  Linux中的每个进程都分配有一个相对独立的虚拟地址空间。该虚存空间分为两部分:用户空间包含了进程本身的代码和数据;内核空间包含了操作系统的代码和数据。

  Linux采用“有条件的可剥夺”调度方式。对于普通进程,当其时间片结束时,调度程序挑选出下一个处于TASK_RUNNING状态的进程作为当前进程 (自愿调度)。对于实时进程,若其优先级足够高,则会从当前的运行进程中抢占CPU成为新的当前进程(强制调度)。发生强制调度时,若进程在用户空间中运 行,就会直接被剥夺CPU;若进程在内核空间中运行,即使迫切需要其放弃CPU,也仍要等到从它系统空间返回的前夕才被剥夺CPU。

  (1)SCHED_OTHER。SCHED_OTHER是面向普通进程的时间片轮转策略。采用该策略时,系统为处于TASK_RUNNING状态的每个进程分配一个时间片。当时间片用完时,进程调度程序再选择下一个优先级相对较高的进程,并授予CPU使用权。

  (2)SCHED_FIFO。SCHED_FIFO策略适用于对响应时间要求比较高,运行所需时间比较短的实时进程。采用该策略时,各实时进程按其进入可 运行队列的顺序依次获得CPU。除了因等待某个事件主动放弃CPU,或者出现优先级更高的进程而剥夺其CPU之外,该进程将一直占用CPU运行。

  (3)SCHED_RR。SCHED_RR策略适用于对响应时间要求比较高,运行所需时间比较长的实时进程。采用该策略时,各实时进程按时间片轮流使用CPU。当一个运行进程的时间片用完后,进程调度程序停止其运行并将其置于可运行队列的末尾。

  Linux只有一个可运行队列,处于TASK_RUNNING状态的实时进程和普通进程都加入到这个可运行队列中。Linux的进程调度采用了动态优先级 和权值调控的方法,既可实现上述三种调度策略,又能保证实时进程总是比普通进程优先使用CPU。描述进程的数据结构task_struct中用以下几个数 据作为调度依据:

  counter的值是动态变化的,进程运行时,每一个时钟滴答后,其值减1。当counter值为0时,表示该进程时间片已用完,该进程回到可运行队列中,等待再次调度。

  为保证实时进程优于普通进程,Linux采取加权处理法。在进程调度过程中,每次选取下一个运行进程时,调度程序首先给可运行队列中的每个进程赋予一个权 值weight。普通进程的权值就是其counter和优先级nice的综合,而实时进程的权值是它的rt_priority的值加1000,确保实时进 程的权值总能大于普通进程。调度程序检查可运行队列中所有进程的权值,选取权值最大者作为下一个运行进程,保证了实时进程优先于普通进程获得CPU。 Linux使用内核函数goodness()对进程进行加权处理:

  /*判断如果任务的调度策略被置为SCHED_YIELD的线,返回。系统调用SCHED_YIELD表示为“礼让”进程,其权值为最低*/

  /*先对普通进程进行处理(由于多数是普通进程,这样做有利于提高系统效率)*/

  /*如果当前进程的counter为0,则表示当前进程的时间片已用完,直接返回*/

  /*对进程权值进行微调,如果进程的内存空间使用当前正在运行的进程的内存空间,则权值额外加1*/

  /*将权值加上20与进程优先级nice的差。普通进程的权值主要由counter值和nice值组成*/

  /*对实时进程进行处理,返回权值为rt_priority+1000,确保优先级高于普通进程*/

  从goodness()函数可以看出,对于普通进程,其权值主要取决于剩余的时间配额和nice两个因素。nice的规定取值范围为19~-20,只有特 权用户才能把nice值设为负数,而表达式(20-p-》nice)掉转方向成为1~40。所以,综合的权值在时间片尚未用完时基本上是两者之和。 如果是内核进程,或者其用户空间与当前进程相同,则权值将额外加1作为奖励。对于实时进程,其权值为1000+p-》rt_priority,当 p-》counter达到0时该进程将移到队列的尾部,但其优先级仍不少于1000。可见当有实时进程就绪时,普通进程是没机会运行的。

  由此可以看出,通过goodness()函数,Linux从优先考虑实时进程出发,实现了多种调度策略的统一处理,其设计思想可谓非常巧妙。

  Linux的进程调度由调度程序schedule()完成,通过对schedule()的分析能更好理解调度的过程。schedule()首先判断当前运行进程是否具有SCHED_RR 标志,本文取一部分加以分析:

  prev-》counter代表当前进程的运行时间配额,其值逐渐减小。一旦减至0,就要从可执行队列runqueue中当前的位置移到末尾,宏操 作NICE_TO_TICKS根据系统时钟的精度将进程的优先级别换算成可以运行的时间配额,即恢复其初始的时间配额。把该进程移到末尾意味着:如果没有 权值更高的进程,但是有一个权值与这相同的进程存在,那么,那个权值相同而排列在前的进程就会被选中,从而顾全了大局。

  容易理解:如果发现进程处于TASK_INTERRUPTIBLE状态且有信号等待处理,则内核将其状态设为TASK_RUNNING,让其处理完信号, 接下来仍有机会获得CPU;如果没有信号等待,则将其从可运行队列中撤下来;如果处于TASK_RUNNING状态,则继续进行。然后,将 prev-》need_resched的值恢复成0,因为所需的调度已经在运行。

  c=-1000; /*进程的综合权值,初始时是0号进程,-1000是可能的最低值*/

  调度之前,将待调度的进程默认为0号进程,权值置为-1000。0号进程比较特别,既不会睡眠,又不能被杀死。接下来内核遍历可执行队列run queue中的每个进程,为每个进程通过goodness()函数计算出它当前所具有的权值,然后与当前的最高值c相比。如果两个进程具有相同权值的话, 那么排在前面的进程胜出。

  上面的代码告诉我们,如果当前进程想要继续运行,那么在挑选进程时以当前进程此刻的权值开始。这意味着,相对于权值相同的其他进程来说,当前进程优先。

  若发现当前已选进程的权值为0,则需要重新计算各个进程的时间配额,schedule()将转入recalculate部分。限于篇幅,在此不再展开。

  以上结合代码简要介绍了Linux中进程调度的基本思想、依据和策略,容易发现Linux高效率和较强支持并发进程等特点。近年来,嵌入式Linux的研 究正在成为一个热点,理解Linux进程调度的原理,并在此基础上改进调度算法可能存在的缺陷,可以进一步增强其对实时性的支持,使之进一步适应在嵌入式 系统领域内的应用。

  课程从0开始,讲到云计算结束,按阶段授课,从入门到跑路,适合初学者,也适合定制,需要哪个模块学哪个模块2,包含初级运维工

  众所周知,现在的分时操作系统能够在一个CPU上运行多个程序,让这些程序表面上看起来是在同时运行的。l...

  嵌入式系统由硬件环境、嵌入式操作系统和应用程序组成,硬件环境是操作系统和应用程序运行的硬件平台,它随...

  Linux 中允许众多不同的文件系统共存,如 ext2, ext3, vfat 等。通过使用同一套文...

  北京华兴万邦管理咨询有限公司的专业分析师团队赴德国纽伦堡参加了“2019年嵌入式世界展览及会议(Em...

  单片机和嵌入式,其实没有什么标准的定义来区分他们,对于进行过单片机和嵌入式开发的开发者来说,都有他们...

  本文档详细介绍的是176条DevOps人员常用的linux命令速查表资料合集

  书籍内容基于主流 Linux 系统编写,全书总共20个章节,16开本超400页,通用于RHEL、Ce...

  过去几周,Arch Linux 维护人员比较了不同的压缩算法,最终计划使用 zstd 取代 devt...

  据一项专业调查显示,机器视觉行业正凸显出向嵌入式视觉和模块化发展的趋势。制造商们看到了嵌入式视觉解决...

  Linux系统目前主要应用在企业服务器上,学习Linux,更多的是向Linux系统/运维工程师方向进...

  专用性很强:嵌入式操作系统的优势在于个性化很强,其中的软件系统和硬件的结合非常紧密,一般要针对硬件进...

  嵌入式系统是一种“完全嵌入受控器件内部,为特定应用而设计的专用计算机系统”,根据英国电气工程师协会的...

  嵌入式系统有过很长的一段单片机的独立发展道路,在实现最低层的嵌入式系统应用,使其有着明显的电子系统设...

  嵌入式系统是面向用户、面向产品、面向应用的,它必须与具体应用相结合才会具有生命力、才更具有优势。因此...

  内存是计算机的主存储器。内存为进程开辟出进程空间,让进程在其中保存数据。我将从内存的物理特性出发,深...

  嵌入式系统正随着Internet的发展而在各个领域得到广泛的应用,作为一个优秀的操作系统,VxWor...

  随着嵌入式计算机应用的发展,嵌入式CPU的主频不断提高,这就造成了慢速系统存储器不能匹配高速CPU处...

  云计算的到来让许多人对底层的基础架构产生了‘误解’,认为在云时代企业将不再需要硬件。事实恰恰相反,尤...

  操作系统技术包含服务器和客户机操作系统两套技术,目前支持瘦客户机计算的服务器技术主要是VNC、Cit...

  SUSE 创办于 1992 年,是全球首家企业级开源 Linux 操作系统供应商。1994 年,他们...

  售价129美元的Jetson Nano模块尺寸70x45mm,今年6月份上市,面向网络录像机、家用机...

  以前在上面的系统上,手机上的游戏基本是不可以玩的,好在如今出来了一个模拟器,安装了它就可以玩大部分的...

  嵌入式工程师主要负责嵌入式系统设计和开发,包括硬件系统的建立和相关软件开发、移植、调试等工作。(客户...

  说了好多好多,有的时候后悔离开北京来到这里,北京的机会真的是太多太多了,或者上海。既然安顿了,就继续...

  或许这样的标题,应该是由像Linus或Greg KH这样的大师级的高手才有资格写的吧。但是作为我来说...

  社会的不断进步和科学技术的飞速发展,为电力系统的发展和进步提供了广阔的空间和新的技术手段,对于电网的...

  根据VDC Research的最新报告,风河在实时操作系统、商用嵌入式Linux、嵌入式Hyperv...

  “USBType-C”并不是电子产品的新术语,它已经上市超过四年,你可能每天都在使用它。但是,这项技...

  提供标准和定制化嵌入式计算机主板与模块的领导厂商-德国康佳特科技,在2019纽伦堡嵌入式展中首先全球...

  嵌入式系统是一种专用的计算机系统,作为装置或设备的一部分。通常,嵌入式系统是一个控制程序存储在RO...

  便携式医疗监护仪已成为人们日常生活中不可缺少的一部分。便携式设备是由硬件与软件紧凑组合的一个单元模块...

  奇趣科技公司日前推出了一款基于嵌入式linux的面向单一应用嵌入式产品的开发平台qtopiacore...

  早前的专栏中曾讨论过在许多情况下需要优化的嵌入式系统的关键特征,包括系统时序、代码大小、RAM使用率...

  首先,我要说的是,就业成功最关键的因素在于扎实的基础,很宽的知识面,丰富的实践经验。这些都是,工作学...

  这个报告是根据美国求职网站 Hired 从超过 1 万名求职者简历和 1 万多家公司的招聘信息中分析...

  操作系统是一种在计算机上运行的软件,它的主要任务是管理计算机上的系统资源,为用户提供使用计算机及其外...

  本视频主要详细介绍了中国操作系统有哪些,分别是SPG思普操作系统[简称SPGnux]、深度Linux...

  本文主要详细介绍了为什么黑客都用linux,分别有黑客不给自己开发的功能加上图形界面、欧美国家的Li...

  进程管理是操作系统的最重要的功能之一。有效率的进程管理能保证一个程序平稳而高效地运行。

  STM32是一种功能比较强大的32位单片机,广泛应用于各种嵌入式设备中,由于它的普及性及丰富的资源,...

  本视频主要详细介绍了Linux字符界面转图形界面的操作教程,具体的跟随小编一起来了解一下。

  通常,我们获得一款软件通常是通过百度等方式搜索得到结果进入各种社区获得相应的资源,从而进行下载。但是...

  本视频主要详细介绍了linux系统适合什么人用,分别是追求时尚的用户、计算机专业学生、进行科学研究,...

  反响性系统-反响性计算的意思是系统(主要是软件部分)依据传感器信息对环境作出呼应,并使用鼓励器操控环...

  linux的源文件一般是不适合安装的,所以linux都是安装发行版的。建议安装ubuntu,cen...

  cd命令这是一个非常基本,也是大家经常需要使用的命令,它用于切换当前目录,它的参数是要切换到的目录的...

  Linux是一套免费使用和自由传播的类Unix操作系统,是一个基于POSIX和UNIX的多用户、多任...

  学习大多类似鹿丁解牛,对事物的认识一般都是由浅入深、由表及里的过程,循序才能渐进。学习Linux同...

  本视频主要详细介绍了linux系统的特点,分别有开放性、多用户、多任务、良好的用户界面、设备独立性。

  由于Linux的内核大部分是用C语言编写的,并采用了可移植的Unix标准应用程序接口,所以它支持如i...

  本视频主要详细介绍了linux和windows的区别,分别有特点不同、软件获取的途径不一样、源代码公...

  由于Internet技术的渗透,嵌入式系统正变得越来越智能化并具有越来越多的网络友好特性。Web技术...

  TI AM437x高性能处理器基于ARM Cortex-A9内核。 这些处理器通过3D图形加速得到增强,可实现丰富的图形用户界面,还配备了协处理器,用于进行确定性实时处理(包括EtherCAT,PROFIBUS,EnDat等工业通信协议)。该器件支持高级操作系统(HLOS)。基于Linux的® 可从TI免费获取。其它HLOS可从TI的设计网络和生态系统合作伙伴处获取。 这些器件支持对采用较低性能ARM内核的系统升级,并提供更新外设,包括QSPI-NOR和LPDDR2等存储器选项。 这些处理器包含功能方框图中显示的子系统,并且后跟相应的“说明”中添加了更多信息说明。 处理器子系统基于ARM Cortex-A9内核,PowerVR SGX图形加速器子系统提供3D图形加速功能以支持显示和高级用户界面。 可编程实时单元子系统和工业通信子系统(PRU-ICSS与ARM内核分离,允许单独操作和计时,以实现更高的效率和灵活性.PRU-ICSS支持更多外设接口和EtherCAT,PROFINET,EtherNet /IP,PROFIBUS,以太网Powerlink,Sercos,EnDat等...

本文链接:http://rainy-monday.net/jinchengdiaodu/57.html
上一篇:没有了
下一篇:如何理解进程调度?

相关推荐:

网友评论:

栏目分类

现金彩票 联系QQ:24498872301 邮箱:24498872301@qq.com

Copyright © 2002-2011 DEDECMS. 现金彩票 版权所有 Power by DedeCms

Top