Linux内存管理和进程调度的实时化研究和改进
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
Linux内存管理和进程调度的实时化研究与改进
计算机应用专业
研究生卜俊伟指导教师徐虹
摘要
随着计算机,网络和通信技术地发展,实时系统越来越多得被应用于工业控制、网络通信、实时监控,多媒体等领域。
这些新的实时网络应用的出现给实时系统地发展提出了新的要求和挑战。
同时,随着开源项目的兴起,作为典型代表的Linux得到了迅速普及和发展,已成长为稳定的、性能优秀的操作系统。
但是Linux本身是一个只是一个类UNIX的通用的操作系统,其在实时性能方面有着比较大的缺陷。
然而基于Linux本身的特点,将其改造成为一个合适的实时系统是完全可行的。
论文在深入分析和研究Linux2.4版本内核源代码的基础上,结合实时操作系统的原理.选择了对Linux在内存管理和进程调度这两方面进行研究和实时化改进,取得了显著的效果。
首先通过对内核代码的分析,了解到Linux的内存管理是采用了虚拟内存管理的方式,使得系统中的每个进程可以使用比实际内存多很多的虚拟内存,提高了系统内存的使用效率。
但正是由于虚拟内存的存在,使得进程每次获得的内存都是先分配虚拟内存,在分配物理内存。
系统对物理内存的分配总是会放在最后一步,即在相关指令执行的时候才进行,而且也仅将进程所需要的部分内存分配给进程。
当进程所需要的页面不在内存时,系统会发生缺页中断,将进程所需的页面调入内存,而这个中断时间是不确定的,那么就必然不能满足实时进程的需求,又考虑到虚拟内存的强大功能,在不删除虚拟内存结构的情况下,针对实时进程采用一次将实时进程所需的内存全部分配的方法来完成在内存管理这块的改进。
同时在研究分析的过程中,发现系统中的空闲内存总量需要放在一个较高的量上才有可能使系统中有足够的内存可以满足一般实时进程对内存的需求,那么有必要提高系统中空闲内存的数量,从而加快实时进
程的响应时间。
由于Linux的进程调度是采用的不可抢占式的内核调度。
其进程调度发生在每次中断发生的时刻,因此要提高Linux在调度方面的实时性,改变时钟中断的粒度是首要工作。
适当提高系统的时间粒度,可以有效地提高系统的实时性。
但如果将时间粒度提到无限高,则系统会频繁发生时钟中断,从而严重影响系统性能。
其次在进程刚生成时,Linux让子进程和父进程保持同样的优先级别,不利于系统对实时进程的响应,因此必须要修改进程的优先级,并将实时进程挂在符合其优先级别的可运行队列中去。
论文中详细阐述了针对Linux操作系统进行的实时化改进方案和具体实施过程,最后对改进后的系统进行了测试,达到了预期的,平均响应时间只有改进前的40%,系统性能有了大幅度地提高。
关键词:实时化,Linux,内存管理,进程调度
The real-tims’ study and improvement of memroy management and
process schedule of Linux
Abstract
With the computer , network and the technology communicating by letter, the field develops,the real-time system is making big effect on people’s life and it will be applicated in more and more fields for people’s life. These new real time network applications applies such that appearing to be developed systematically by real time having brought forward the new request and challenge. Meanwhile, Linux, as its open source, high stability, low cost and some other characteristics,has become the fastest developing operating system in this field. But Linux is one that are similar to the UNIX universally OS, it has big defects in real-time fuction. But owing to Linux self characteristic, that is reformed becoming a right real time system is completely feasible.
Union real-time OS principle,the thesis is mounted in going deep into the basis having analysed the Linux2.4.0 core, Researched and real-time improved of memory mangagement and process scheduler of Linux.then get good effect.
We knowing the memory management had adopt virture memory management by analyzing the Linux core that make the process of system can get more memory than real. improved system memory sigmatism efficiency,but because of the existence of virture memory,the distribute of system will be the last and only distribute the a part of memory of process that needed.When the memory of process which needed is not at system.The system will interrupt then take the memory into the system.But the time of interrupt is uncertain,so it is meet the need of real-time process. And consider the big function of virture memory. Under the situation of not deleting virture memory structure, accomplish improvement managing this piece in memory coming allocated all required of real-time process memory specifically for the real-time process at once. Analytical process is middle in studying at the same time,find the free time memory of quantity must keep at a high level to meet the need of real-time process.So we need to inhance the free memory of quantity.
Because Linux use unpreemptible seheduler,it’s sechedule is happening at interruption.So the first job is to change the time size,we can inhance the time size appropriate not unlimit,otherwise the system will interrupt frequently, thereby affect system function,scendly when the process just produce.Linux make child process has the same priority.it not meet the request of real-time process.so we need to change the process’ priority to make the real-time process meet itself.
Key words: real-time ,Linux, memory management ,process schedule
声明
本人声明所呈交的学位论文是本人在导师指导下进行的研究工作及取得的研究成果。
据我所知,除了文中特别加以标注和致谢的地方外,论文中不包含其他人已经发表或撰写过的研究成果,也不包含为获得成都信息工程学院或其他教育机构的学位或证书而使用过的材料。
与我一同工作的同志对本研究所做的任何贡献均已在论文中作了明确的说明并表示谢意。
本学位论文成果是本人在成都信息工程学院就读期间在导师的指导下取得的,论文成果归成都信息工程学院所有,特此声明。
作者签字:指导教师签字:
第一章绪论
1.1 Linux操作系统简介与特点
Linux操作系统是一个免费发行的类UNIX操作系统在微机上的实现,它是由Linus Torvalds首先于1991年开始开发,很快越来越多的程序开发人员和编程爱好者参与了该系统的开发工作。
如今,Linux的内核已经升级到2.6.20版本,是UNIX的完整实现,并且得到了众多软硬件厂商的支持。
作为一个发展最为迅速、影响最为深远的操作系统,Linux主要有如下特色:
(1)Linux操作系统是一个“免费软件”。
Linux的发行与使用遵循GPL(通用公共许可证) 的版本声明。
GPL是“GNU工程”的产物,它制定了“免费软件”的发行和修改的规则条款。
这里的“免费”一词是英文的“free”,它不仅有免费的意思,更有自由的含义。
具体地说,拥有GNU软件,你就拥有了三种特定的自由。
首先是复制程序并把它送给你的朋友或同事的自由;而后是通过获得完整的源代码按照你的意愿修改程序的自由;最后是发布该软件的改进版的自由。
Linux就是这样的一个公开源代码、可以动态配置、任意剪裁、自由修改的操作系统。
(2) Linux是一个纯32位的、多任务、多用户的操作系统,性能极好。
Linux 核心的开发利用了Intel 80386和80486处理器的保护模式,特别是利用了保护模式基于描述符的存贮管理模式以及这两类处理器所具有的其他许多先进的性能,因此,它是一个纯32位的操作系统。
核心支持多进程,完全多任务、多用户,这使得系统极其稳定,很少出现系统崩溃的情况,更适合用做Internet上的各种服务。
测试结果表明,在同等硬件配置和平台上,其性能远比其他PC操作系统好。
而且,Linux在源代码级几乎与UNIX标准兼容,可移植性好。
Linux 是一个十分优秀的操作系统。
(3) Linux的网络功能强大,安全性好。
Linux可以说是一群遍布于全世界的Internet上的自愿人员开发出来的操作系统,其发展与Internet有着密切的联系,故它在核心级提供了TCP/IP协议的完备实现,同时也支持完备的Internet服务,如FTP,Telet,SMTP等,并且对传统的Internet服务和技术有所
扩充,如IP伪装、端口转发等。
安全性是一个操作系统必须考虑的因素,尤其是在今天的网络时代。
Linux源代码公开,程序中的bug极少,即使有安全漏洞也会很快被发现,因此,Linux又是一个安全可靠的操作系统。
1.2国内外研究现状和选题的意义
1.2.1国内外的研究现状
Linux操作系统的核心最早由25岁的芬兰大学生Linus Torvalds于1991年8月在芬兰赫尔辛基大学发布在Internet上后,得到了积极的响应,很快就有数百名程序员和爱好者通过Internet加入了Linux的行列,他们不断的对程序进行修改和完善,经过几年的努力,Linux终于在全球普及,成为了当今最为流行的操作系统之一。
随着Linux的风行,很多大学和研究机构开始基于Linux构建实时操作系统,目前实时化的相关研究主要集中在下面三个方向:
(1)调度的改进
对调度的改进包括对实时进程的调度改进和交互式非实时进程的改进。
Linux的调度器是基于优先级的调度器。
为了缩短对外界实时请求的反应时间,就必须尽可能早地进行调度。
因为只有进行了调度,实时进程才有可能得到运行。
调度算法将直接影响到内核对任务的响应时间。
常见的改进方法是用实时调度算法代替Linux中的调度器或者是增加调度程序执行的时机。
例如:KURT 系统就支持FIFO调度策略、轮转调度策略和UNIX分时调度策略,还增加了SCHED-KURT调度策略,这是一种静态调度策略,使用一个特殊的调度文件记录预先定义好的待调度进程的参数;而RT-Linux中采用的调度算法有:基于优先级的抢占式调度和EDF调度;基于优先级的调度使用“单调率算法”,它直接支持周期任务,同时用户可自行编写调度程序,它们可实现为可加载的核心模块,具有较好的通用性。
(2)时钟的改进
计算机是以严格精确的时间进行数值运算和数据处理的,最基本的时间单元是时钟周期。
系统时间是以“时钟嘀哒”为单位,而时钟中断的频率决定了一个时钟嘀哒的长短。
时钟频率的选择对实时操作系统来讲十分重要,频率低了,对请求的反应就慢;频率高了,调度频繁,上下文切换也频繁,系统开销
大。
所以时钟频率的选择要兼顾反应时间和系统开销。
Linux的时钟频率对实时进程是不够的,因此一些研究者对Linux的时钟系统进行了改造,常见的改进时钟的方法有细化时钟粒度和修改时钟中断程序。
我国中科院软件研究所在Linux基础上开发的RFRTOS,其方法是在Linux中实现了一个具有精密时钟刻度的实时核心时钟。
其独立的实时时钟方便维护,具有实用性,RFRTOS的定时器时间开销控制在l0us左右。
KURT提出不同于硬实时和软实时的严格实时(Firm Realtime)概念,采用的方法是修改Linux的时钟中断机制,采用非周期的时钟中断方式,改变了时钟中断的固定频率的模式,通过编程实现重新设定时钟中断时间,提高了时钟粒度,使响应时间达到了微秒级。
国内不少基于Linux开发嵌入式实时操作系统几乎无一例外的对时钟系统进行了修改,而且大多数修改方法和KURT的类似,即采用非周期性的时钟中断。
(3)内核抢占的改进
Linux中的进程运行在两种模式下:系统模式(核心态)和用户模式(用户态)。
核心态下的进程比用户态下的进程有更多的特权,用户态下的进程不能直接对系统数据进行操作,而只能通过系统调用,进入核心态后,再对系统数据进行操作。
系统调用是有限的,主要是处于对系统数据进行保护的目的。
用户态的进程是可以被抢占的,而核心态的进程不可以被抢占,除非进程自己因为某种原因而放弃处理器。
实时进程有可能因为非实时进程长期占用CPU得不到响应。
所以可以在内核中插入可抢占点,增加抢占发生的几率从而使实时进程能得到及时的响应。
但可抢占内核有时也有不利的地方,即实时进程也可能被其他进程抢占而失去运行机会。
因此可抢占内核的具体实现策略要根据应用而定。
目前用来构建实时Linux的方法主要通过修改进程的调度方式,修改系统的运行状态或者直接通过加载新的实时内核,用双内核的方式来完成对其实时化的改进。
1.2.2论文选题的意义
分析Linux内核源代码有助于计算机学科的教学和科研。
目前在国外,已经有很多大学把linux作为教学用操作系统。
许多科研机构和企事业单位也采用Linux作为试验和开发的平台。
分析Linux内存管理和进程调度源代码并应用于学校实验平台,有利于提高开发水平。
目前Linux的源代码中包含了世界各地数百名计算机高手的作品,分析这些源代码对于我们掌握核心技术会起到事半功倍的作用。
1.3论文组织结构
本文共分为七章:
(1)论文的第一章节介绍了一下Linux操作系统的来源以及其特点,并且说明了选择本课题的理论意义和实际意义。
并在第一章节的最后部分概述了本论文的主要内容。
(2)论文的第二章节详细的介绍了什么是实时系统,并且介绍了几个关于实时系统的重要概念和衡量一个系统是否是实时系统的几个相关的重要指标。
并且在第二章的最后部分介绍了目前几个流行的由几个大学和研究机构所开发的实时操作系统。
(3)论文的第三章首先说明了Linux内存管理方面的特性,接着根据研究的所得到的结果对内存管理的分配,映射等方面做出了一些实时化的改进。
(4)论文的第四章首先说明了Linux的调度机制,并根据其独特的调度机制作出了一些实时化改进。
(5)论文的第五章详细说明了改进后的实时Linux是如何生成的,并且对生成后的实时Linux进行测试。
得出的实验数据证明自己所做的修改是有效的(6)在论文的最后总结了一下自己的工作,并说明了自己在做这个课题中所学到的一些东西以及研究中所存在的一些不足之处。
第二章实时操作概述
经过多年的发展,Linux已经迅速成长为一个功能强大性能稳定的通用操作系统。
它支持多用户和多进程,支持TCP/IP等网络协议,具有图形用户界面和强大的开发工具,而且大部分Unix上的应用程序都已经移植到Linux之上。
由于它的成熟和开放性,Linux得到了日益广泛的应用。
另一方面,随着硬件性能的不断提高,价格的不断降低,嵌入式实时应用对操作系统的功能也提出了越来越高的要求,如图形用户界面和网络功能等。
一些嵌入式实时操作系统的提供商已经提供了这些功能,但这同时意味着非常高的价格。
由于Linux代码公开,遵循GPL条款,相对于价格昂贵的专用实时操作系统(如pSOS, VxWroks等)具有巨大的优势,并且具有适应于多种CPU和多种硬件平台、性能稳定、剪裁性能好、开发和使用都很容易的特点,因此越来越多的人开始考虑将Linux应用到嵌入式实时环境之中。
这同时也对Linux的实时性提出了很高的要求。
Linux本身上是一个分时系统,在实时性方面存在较大的不足,不能直接应用在实时环境里。
这就有必要采用一定的技术方法,对其实时性能进行改进,使其达到实时操作系统的要求。
因此,对Linux操作系统的实时化技术研究是一个具有意义和价值的课题。
2.1 什么是实时系统
实时系统在工业、商业和军事等领域都有非常广泛的用途,并且已经有很多实际的应用。
一般来说,实时系统通常是比较复杂的,因为它必须处理很多并发事件的输入数据流,这些事件的到来次序和几率通常是不可预测的,而且还要求系统必须在事先设定好的时限内做出相应的响应。
那么,是不是响应时间在多少毫秒或者多少微秒以内的系统就是实时系统,而超出这个时限的就不算呢?事实上,实时系统并非是指“快速”的系统,实时系统有限定的响应时间,从而使系统具有可预测性。
实时系统与其他普通的系统之间最大的不同之处就是要满足处理与时间的关系。
在实时计算中,系统的正确性不仅仅依赖于计算的逻辑结果,而且依赖
于结果产生的时间。
对于实时系统来说最重要的要求,就是实时操作系统必须有满足在一个事先定义好的时间限制中对外部或内部的事件进行响应和处理的能力。
因此,实时系统可以定义为“一个能够在事先指定或确定的时间内完成系统功能和对外部或内部,同步或异步时间作出响应的系统”。
实时系统又可以分为“硬实时系统”和“软实时系统”。
硬实时和软实时的区别就在于对外界的事件做出反应的时间。
硬实时系统必须是对及时的事件做出反应,绝对不能错过事件处理的deadline情况。
在硬实时系统中如果出现了这样的情况就意味着巨大的损失和灾难。
比如说核电站中的堆芯温度控制系统,如果没有对堆芯过热做出及时的处理,后果不堪想象。
软实时系统是指,如果在系统负荷较重的时候,允许发生错过deadline的情况而且不会造成太大的危害。
比如说程控电话系统允许在105个电话中有一个接不通。
实时系统具有以下一些特点,从而区分于其他系统:
嵌入式系统:实时系统通常是嵌入式的系统,也就是由封装好的软件系统控制与其相关的硬件。
与外部环境交互:实时系统通常需要与外部环境进行交互,例如,可以控制机器及生产过程,或者监控化学反应并随时汇报危急情况,这种情
况通常需要从外部接收数据并提供输出和控制外部环境。
“反应”系统:很多实时系统都是“反应”的系统,也就是说,由事件驱动并且必须对外界事件进行响应。
并发处理: 绝大多数实时系统的一个重要特点是并发处理,通常,事件发生的顺序是不可预测的。
2.2 实时操作系统RTOS
实时系统的核心是一个支持实时多任务的操作系统RTOS.
RTOS本质上是实时嵌入式系统在启动之后运行的一段背景程序。
应用程序是运行在这个基础之上的多个任务。
RTOS根据各个任务的要求,进行资源(包括存储器、外设等)的管理、消息管理、任务调度、异常处理等工作。
在RTOS支持的系统中,每个人任务都有优先级别,RTOS根据各个任务的优先级来动态的切换各个任务,保证对实时性的要求。
这种体系结构简化了编程结构,比过去的
循环控制的体系结构有了很大的改进。
从性能上讲,RTOS和普通的OS存在的区别主要是在“实时”二字上。
实时操作系统一般符合以下的一些要求:
可确定性:是指它可以按照固定的、预先确定的时间或时间间隔执行操作。
响应性:是指在系统得到中断后系统为中断提供服务的时间。
用户控制:是指允许用户细粒度地控制任务的各种属性(任务优先级、任务权限等)。
可靠性;
故障弱化运行:是指系统在故障时尽可能多地保存其权能和数据的能力。
一般来说,RTOS内核的实现都为微内核的体系结构。
所谓微内核技术是指将必需的功能(如进程管理、任务通信、中断处理、进程调度)放在内核中,而将那些不是非常重要的核心功能和服务(文件系统、存储管理、网络通信、设备管理)等等作为内核之上可配置的部分。
这样,整个操作系统就是由提供一些基本服务机制的微内核加上一些服务进程构成,系统的各个系统调用和服务都是由内核发消息到不同的服务进程,服务进程执行相应的操作,然后以消息的方式返回内核。
2.3 关于RTOS的几个重要概念
1.多任务:
多任务运行的实现实际上是靠CPU(中央处理单元)在许多任务之间转换、调度。
CPU只有一个,轮番服务于一系列任务中的某一个。
多任务运行很像前后台系统,但后台任务有多个。
多任务运行使CPU的利用率得到最大的发挥,并使应用程序模块化。
在实时应用中,多任务化的最大特点是,开发人员可以将很复杂的应用程序层次化。
使用多任务,应用程序将更容易设计与维护。
一个任务,也称作一个进程,是一个简单的程序,该进程可以认为CPU完全只属该进程自己。
实时应用程序的设计过程,包括如何把问题分割成多个任务,每个任务都是整个应用的某一部分,每个任务被赋予一定的优先级,有它自己的一套CPU寄存器和自己的栈空间。
典型地、每个任务都是一个无限的循环。
每个任务都处在以下5种状态之一
的状态下,这5种状态是休眠态,就绪态、运行态、挂起态(等待某一事件发生)和被中断态。
休眠态相当于该任务驻留在内存中,但并不被多任务内核所调度。
就绪意味着该任务已经准备好,可以运行了,但由于该任务的优先级比正在运行的任务的优先级低,还暂时不能运行。
运行态的任务是指该任务掌握了CPU的控制权,正在运行中。
挂起状态也可以叫做等待事件态WAITING,指该任务在等待,等待某一事件的发生,(例如等待某外设的UO操作,等待某共享资源由暂不能使用变成能使用状态,等待定时脉冲的到来或等待超时信号的到来以结束目前的等待,等等)。
最后,发生中断时,CPU提供相应的中断服务,原来正在运行的任务暂不能运行,就进入了被中断状态。
2.上下文切换(Context Switch or Task Switch)
Context Switch实际含义是任务切换,或CPU寄存器内容切换。
当多任务内核决定运行另外的任务时,它保存正在运行任务的当前状态(Context),即CPU 寄存器中的全部内容。
这些内容保存在任务的当前状况保存区(Task's Context Storage area),也就是任务自己的栈区之中。
入栈工作完成以后,就是把下一个将要运行的任务的当前状况从该任务的栈中重新装入CPU的寄存器,并开始下一个任务的运行。
这个过程叫做任务切换。
任务切换过程增加了应用程序的额外负荷。
CPU的内部寄存器越多,额外负荷就越重。
做任务切换所需要的时间取决于CPU有多少寄存器要入栈。
实时内核的性能不应该以每秒钟能做多少次任务切换来评价。
3.内核(Kernel)
多任务系统中,内核负责管理各个任务,或者说为每个任务分配CPU时间,并且负责任务之间的通讯。
内核提供的基本服务是任务切换。
之所以使用实时内核可以大大简化应用系统的设计,是因为实时内核允许将应用分成若干个任务,由实时内核来管理它们。
内核本身也增加了应用程序的额外负荷,代码空间增加ROM的用量,内核本身的数据结构增加了RAM的用量。
但更主要的是,每个任务要有自己的栈空间,这一块吃起内存来是相当厉害的。
内核本身对CPU 的占用时间一般在2到5个百分点之间。
4.调度(Scheduler)
调度(Scheduler)这是内核的主要职责之一,就是要决定该轮到哪个任务运行了。
多数实时内核是基于优先级调度法的。
每个任务根据其重要程度的不同
被赋予一定的优先级。
基于优先级的调度法指,CPU总是让处在就绪态的优先级最高的任务先运行。
然而,究竟何时让高优先级任务掌握CPU的使用权,有两种不同的情况,这要看用的是什么类型的内核,是不可剥夺型的还是可剥夺型内核。
RTOS的进程调度策略是直接影响实时性能的因素。
尽管调度算法多种多样,但大多由单调速率算法(RM)和最早期限优先算法(EDF)变化而来。
前者主要用于静态周期任务的调度,后者主要用于动态调度。
在不同的环境状态下,两类算法各有优劣。
在商业产品中采用的实际策略常常是各种因素的折中。
2.4 衡量操作系统实时性能的几个重要指标
通常,判断一个操作系统是否是一个RTOS,主要有以下几个指标衡量:
1.确定性(Deterministic)
实时操作系统中,在一定的条件下,系统调用的运行时间可以预测。
这并不是指所有系统调用都总是执行一个固定长度的时间,而是指不论系统负载如何,系统调用的最大执行时间可以确定。
2.可抢占(Preemptive)
实时操作系统应该是可抢占的。
抢占是指当系统处于核心态运行时,允许任务的重新调度。
换句话说就是指正在执行的任务可以被打断,让另一个任务运行。
抢占提高了应用对异步事件的处理能力,操作系统内核的可抢占,并不是说任务调度在任何时刻都可以发生。
例如当一个任务正在通过系统调用访问一个共享数据时,重新调度和中断都被禁止。
3. 上下文切换时间(Context Switching)
多任务系统中,上下文切换是指CPU的控制权由运行任务转移到另外一个就绪任务所发生的事件,当前任务转化为就绪(或者挂起。
删除等)状态,另一个被选定的就绪任务转化为当前任务,上下文切换时间包括当前任务的运行环境的保存时间,恢复将要运行任务的运行环境,上下文的内容依赖于具体的CPU。
4. 中断延迟(Interrupt Latency)
中断延迟是指从硬件中断发生到开始执行中断处理的第一条指令之间的时间,影响中断延迟的最大因素就是系统关中断的这段时间。
5. 调度延迟(Scheduling Latency)。