(通信与信息系统专业论文)实时嵌入式linux操作系统的研究与实现.pdf_第1页
(通信与信息系统专业论文)实时嵌入式linux操作系统的研究与实现.pdf_第2页
(通信与信息系统专业论文)实时嵌入式linux操作系统的研究与实现.pdf_第3页
(通信与信息系统专业论文)实时嵌入式linux操作系统的研究与实现.pdf_第4页
(通信与信息系统专业论文)实时嵌入式linux操作系统的研究与实现.pdf_第5页
已阅读5页,还剩64页未读 继续免费阅读

(通信与信息系统专业论文)实时嵌入式linux操作系统的研究与实现.pdf.pdf 免费下载

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

北泵郾电大字坝士研冗生论文 实时嵌入式l i n u x 操作系统的研究与实现 摘要 嵌入式操作系统是嵌入式系统的软件核心。随着嵌入式应用的 深入,嵌入式应用越来越多的要面对用户级的需求,而不仅仅局限 于原来的系统级的需求。嵌入式的应用系统的开发和定制变得越来 越重要,传统的使用循环控制的方法已经不能满足需求,使得嵌入 式操作系统逐渐成为管理各种软硬件资源的核心。 本文从实时调度算法入手研究嵌入式实时操作系统的设计问 题,着重研究了实时调度理论中经典的r m 调度算法和e d f 调度算法, 对其在可调度性分析、非周期任务处理等方面进行了深入地探讨。 同时本文分析了通用l i n u x 操作系统在嵌入式实时领域的应用的优 势和局限性以及常见的实时化改造方法,发现了其中的很多不足,j 给出了直接添加l i n u x 内核调度器和修改中断处理过程的实时化方 法。本文深入研究了当前较新版本的l i n u x 内核( 2 6 1 0 ) 的结构功 能及其内部的依赖关系,重点分析了l i n u x 新内核的进程调度机制 和中断处理机制,对其新的调度算法作了详细的研究,仔细分析了 l i n u x 头文件s c h e d h 中添加的新的进程状态及其状态转换过程,以 及t a s k s t r u c t 结构定义的进程调度策略。 本文通过研究l i n u x 内核的调度器设计和中断机制并结合r m 算 法和e d f 算法的核心思想,通过在l i n u x 内核中添加r m 调度器和e d f 调度器,来代替原来的f i f o 和r r 两种调度策略对实时任务进行调 度,同时修改了l i n u x 中断处理过程,使得l i n u x 内核具有更好的 北京邮电大学硕士研究生论文 可抢占性,防止系统调用对实时任务的阻塞延迟。通过这两方面的 工作很大的提高了l i n u x 内核的实时响应能力,使得修改后的内核 能够很好的满足课题的实时要求。本文最后介绍了一个嵌入式系统 开发的主要流程,说明了l i n u x 新内核的裁减、编译等一些问题。 关键词实时系统嵌入式l i n u x 实时调度算法r m 算法e d f 算法 l i 北京邮电大学硕士研究生论文 e m b e d d e dr e a l _ t i m el i n u xr e s e a r c ha n dd e s i g n a b s t r a c t e m b e d d e do si st h es o f t w a r ek e r n e lo fa l le m b e d d e ds y s t e m w i t h t h ef u r t h e rd e v e l o p m e n to fe m b e d d e da p p l i c a t i o n s ,t h e ya r er e q u i r e d m o r ea n dm o r et of a c et h eu s e rl e v e ld e m a n d ,n o to n l yt h ef o r m e r s y s t e ml e v e ld e m a n d t h ed e v e l o p m e n ta n dc u s t o m i z a t i o no fe m b e d d e d a p p l i c a t i o ns y s t e m sb e c o m em o r ea n dm o r ei m p o r t a n t ,a n dt h e t r a d i t i o n a lr e c u r r e n tc o n t r o lm e t h o dc a n n o ts u i tt h er e q u i r e m e n t t h i s m a k e st h ee m b e d d e do sg r a d u a l l yb e c o m et h ek e m e lo fm a n a g i n g d i f f e r e n tk i n d s o f s o f t w a r ea n dh a r d w a r er e s o u r c e s i nt h i sa r t i c l e ,t h er e s e a r c h i n go fd e s i g n i n ga ne m b e d d e dr t o si s s t a r t e df r o mr e a l t i m e s c h e d u l i n ga l g o r i t h m t h em o s tc l a s s i cr m s c h e d u l i n ga l g o r i t h ma n de d fs c h e d u l i n ga l g o r i t h ma r ed e e p l y d i s c u s s e di nt h i s p a p e r a l s o ,t h ea d v a n t a g ea n dd i s a d v a n t a g e j o f a p p l i c a t i o no fg e n e r a ll i n u xi ne m b e d d e dr e a l t i m ea r ea n a l y z e dh e r e f r o mt h ec o m p a r i s o n so fn o w a d a y sp r o j e c t so fm a l 【i n gr t o sb a s e do n l i n u x ,w ef i n dl o t so fs h o r t a g ei nt h o s ep r o j e c t sa n dg i v eo u tan e w d e s i g nb yc h a n g i n gt h el i n u xk e m e ld i r e c t l y t h el a s td a yl i n u xk e r n e l ( 2 6 1 0 ) i sw e l la n a l y z e dh e r e ,i n c l u d i n gt h es t r u c t u r e s ,f u n c t i o n sa n d i n n e rd e p e n d e n c e ,t h en e wk e r n e l ss c h e d u l i n gs y s t e ma n d i n t e r r u p t s y s t e mi st w ok e y so ft h ea n a l y s i s m o r ew o r ki sg i v e nt ot h en e w l y a d d e dp r o c e s ss t a m sa n dt h e i rt r a n s f o r mf l o wi nl i n u xh e a d e rs c h e d h i i i 北京邮电大学硕士研究生论文 a n dt h ep o l i c i e sd e f i n e di nt a s ks t r e e t b yt h er e s e a r c h o ft h e d e s i g no fl i n u xk e r n e ls c h e d u l e ra n d i n t e r r u p ts y s t e mc o m p o u n d e dw i t ht h ek e r n e li d e ao fr ma l g o r i t h ma n d e d fa l g o r i t h m ,w ea d dr ms c h e d u l e ra n de d fs c h e d u l e ri nl i n u x k e r n e lt os u b s t i t u t et h ef i f oa n dr rs c h e d u l e rw h e n s c h e d u l i n g r e a l - t i m et a s k s a tt h es a m et i m e ,w ec h a n g et h el i n u xk e r n e li n t e r r u p t f l o wt om a k et h ek e r n e lh a v em o r e p r e e m p t i o nt op r e v e n tt h es y s t e mc a l l d e l a yt h er e a l t i m et a s k s b yt h e s et w oa m e n d i n g ,t h en e wk e r n e lh a s b e t t e rp r e e m p t i v ea b i l i t y , a n dm a k ei ts u i t ef o ro u rp r o j e c t sr e q u e s to f r e a l - t i m e r e s p o n s e a tt h ee n d o ft h i s p a p e r , s o m e i s s u e sa b o u t m l 。m 。m l z m ga n d :c o m p i l i n go ft h ek e r n e la r ed i s c u s s e d k e y w o r d s 。r e a l t i m es y s t e m , e m b e d d e dl i n u x ,r m ,e d f i v 北京邮电大学硕士研究生论文 独创性( 或创新性) 声明 本人声明所呈交的论文是本人在导师指导下进行的研究工作及取得的研究 成果。尽我所知,除了文中特别加以标注和致谢中所罗列的内容以外,论文中 不包含其他人已经发表或撰写过的研究成果,也不包含为获得北京邮电大学或 其他教育机构的学位或证书而使用过的材料。与我一同工作的同志对本研究所 做的任何贡献均已在论文中作了明确的说明并表示了谢意。 申请学位论文与资料若有不实之处,本人承担一切相关责任。 本人签名: 日期:劢口石乡2 - ( 关于论文使用授权的说明 学位论文作者完全了解北京邮电大学有关保留和使用学位论文的规定,即: 研究生在校攻读学位期间论文工作的知识产权单位属北京邮电大学。学校有权 保留并向国家有关部门或机构送交论文的复印件和磁盘,允许学位论文被查阅 和借阅;学校可以公布学位论文的全部或部分内容,可以允许采用影印、缩印 或其它复制手段保存、汇编学位论文。( 保密的学位论文在解密后遵守此规定) 本学位论文不属于保密范围,适用本授权书。 本人签名: 均雏日期:函翌么之星f 导师签名:日期:丝彳:弓! ;参 北京邮电大学硕士研究生论文 1 1 课题研究背景 第一章绪论弟一早珀下匕 嵌入式系统是以应用为中心,以计算机技术为基础,其软硬件可裁剪,适 用于对功能、可靠性、成本、体积、功耗有严格要求的专用计算机系统,具有便 利灵活、性价比高、嵌入性强、系统稳定等特点。 嵌入式系统的出现至今己经有3 0 多年的历史,嵌入式技术也已经历了几个 阶段的发展,从最初以单芯片为核心的可编程控制器形式的系统,到现在以嵌入 式操作系统和微处理器为标志的嵌入式系统,短短几十年时间,取得了很大的进 展。进入9 0 年代后,以计算机和软件为核心的数字化技术取得了迅猛的发展, 并渗透到了军事、通讯、工业等各个领域。随着计算机、通信、消费电子( 3 c ) 一体化趋势的日益明显,嵌入式技术再度成为一个研究热点。嵌入式技术可以应 用于工作与生活的各个领域,拉近人与计算机的距离,形成人机和谐的工作与生 活环境,在智能工控设备、消费类电子设备、军事监控设备等方面都有巨大的应 用潜力。在嵌入式操作系统领域内,传统的主流嵌入式操作系统如i n t e g r a t e d s y s t e m s 公司的p s o s ,a l a m e d a 公司的v x w o r k s ,q s s l 公司的q n x 等,都是 当今优秀的主流嵌入式实时操作系统,它们共同的特点是体积小,具有微内核; 符合p o s i x 实时扩展标准;支持网络环境;有较好的开发调试环境。但这些操 作系统也存在一些共同的问题,它们昂贵的价格带来应用上的巨大屏障,并且系 统内核源代码不公开,一切开发要依赖于操作系统提供商提供的支持,用户无法 根据自己的需求方便地进行应用开发。这些问题导致它们难以适应普及性应用的 需求。 l i n u x 以其源代码开放、具有健壮和高效的内核、强大的网络通信支持能力、 便于实施的安全策略、丰富的开放应用软件等优势,己成为当代具有影响力的主 流操作系统之一,上述优点也同样导致了l i n u x 在嵌入式领域的快速发展,嵌入 实时l i n u x 也已成为嵌入实时应用领域的主流操作系统之一。研究嵌入实时 l i n u x 的设计与开发技术及其在典型嵌入应用系统的应用技术具有重要的意义。 本课题“嵌入式实时l i n u x 研究与设计”是根据实验室多个项目所需的基 础工作,主要任务是调查各种现有的l i n u x 实时性加强技术,通过分析比较得到 嵌入式l i n u x 实时性加强方案;研究普通l i n u x 操作系统的裁剪、改造技术,以 减少l i n u x 所占空间,满足嵌入式的需求;在此基础上设计实现一个实时的嵌入 式l i n u x 原型系统,通过对通用的l i n u x 操作系统作相应的裁剪与提高实时性的 北京邮电大学硕士研究生论文 工作,使之具有满足系统要求的实时性和可靠性。这一研究工作对于开发我们自 主的嵌入式实时操作系统,将其应用于具有实时需求嵌入式应用场合具有重要的 意义。 1 2lir u x 在嵌入式领域的应用 1 2 1l i n u x 在嵌入式领域的优势 l i n u x 是类u n i x ( u n i x 1 i k e ) 操作系统大家族中的一员,从9 0 年代末开始, l i n u x 这位相对较新的成员变得非常流行,并且跻身于那些有名的商用操作系统 之列。l i n u x 最吸引人的优点在于它不是商业化的操作系统。l i n u x 遵循g n u 公 共许可证,源代码全部开放,任何人都可以获得它的源代码并对其进行研究。与 商用操作系统相比,l i n u x 具有下列优势: ( 1 ) l i n u x 是免费的,每个人都可以自由地使用l i n u x 源代码; ( 2 ) l i n u x 采用了强模块化的体系结构,可以充分定制,; ( 3 ) l i n u x 可以运行在低档便宜的硬件平台,比如流行使用的p c 机; l i n u x 是强大且高效的,充分利用了硬件的特点; ( 5 ) l i n u x 源码质量高,系统非常稳定; ( 6 ) l i n u x 内核小而且紧凑; 7 l i n u x 有很好的支持并且与很多通用操作系统兼容i 正是由于l i n u x 的迅速发展以及上面提到的众多优点,基于l i n u x 的嵌入式 实时操作系统的应用研究得到广泛关注。 1 2 2l i n t t x 在实时应用中的局限性 普通l i n u x 或没有在实时性方面做改进的嵌入式l i n u x 不能直接应用于实时 系统中,原因有以下几点: ( 1 ) 调度算法。一般的l i n u x 系统是按照分时系统的目标设计的,以达到系 统较好的平均性能,强调平衡进程之间的响应时间来保证公平的c p u 时间占用 通常采用固定时间片的分时调度算法,而实时系统的行为更多的取决于复杂的不 可预知的情况,所以不能满足实时系统短的响应时间和确定的执行行为的要求。 ( 2 ) 定时机制。时间系统是计算机重要的组成部分,其主要作用是提供系统 时间。l i n u x 系统时间依赖于硬件时钟,一般可以认为l i n u x 系统时间是硬件时 钟的计数器。为了提高系统的平均的吞吐率,l i n u x 将时钟中断的周期设置为1 0 毫秒,这个时钟周期不能满足实时系统响应时间的要求。 2 北京邮电大学硕士研究生论文 ( 3 ) 中断问题。中断完成外部设备和l i n u x 系统之间的数据通信,可以认为, 中断是实现异步数据系统之间联系的一种重要手段。l i n u x 通过v f s 方式统一管 理各种设备,捕获中断,执行中断服务。l i n u x 的内核进程经常关闭中断以尽快 完成自己的任务,如果低优先级的进程关闭了中断,那么即使有高优先级进程的 中断发生,系统也无法响应。有些系统调用的时间很长,增加了中断延时和调度 延时,这种情况在实时系统中是不允许发生的。 ( 4 ) 不完全可抢占的系统调用。一般的l i n u x 系统进程运行于内核模式,很 多都不能被抢占。也就是说一个进程一旦进入内核,并且属于不可抢占进程,那 么它将运行直到系统调用结束或者进程被阻塞,这时候一个高优先级的进程只能 等待。这样将严重影响对高优先级用户进程可能提供的服务,对于实时应用来说 这样的等待也是致命的。 ( 5 ) 虚拟内存管理。l i n u x 系统采用的虚拟内存技术,对于分时系统来讲这 是一个好的解决办法,而对于实时系统却带来不可忍受的不可预测性。 1 2 3l i n u x 实时性改进的常用方法 ( 1 ) 调度算法的改进。通用的嵌入l i n u x 系统通常将固定时间片的分时调度 算法改进为基于优先级的调度算法,这支持具有一般实时要求的应用,如采用 p o s i x 1 b 标准来添加系统的实时性能。该标准定义了优先级调度、内存锁定机 制、实时信号童、高性能的i p c 机制和定时机制等等。 ( 2 ) 采用微定时器。为系统提供更多的抢占点。但是该定时器不应该用于非 实时的进程调用,不然会增加系统更多的开销以及增加普通进程的调度延迟。 ( 3 ) 中断模拟。中断模拟器对e l i ( 关中断) 和s t i ( 开中断) 命令进行了封装。 在调用e l i ( ) 和s t i ( ) 时,并不是真正的去关中断或开中断,而是做上标记。这样 实时进程的中断就不会被屏蔽,从而增强实时进程的调度时机。 ( 4 ) 添加内核抢占点。将系统调用的过程进行细分,使得每- - d , 块执行的时 间变得很短,当- - + 块执行完毕后,启动调度机制,看有没有实时进程,从而实 现真正意义上的立即抢占调度。 ( 5 ) 采用微内核结构。用户进程在独立的地址空间运行,不同模块间的内存 管理错误不会互相影响,驱动程序可以充分利用内核提供的多线程机制。这样可 以很大程度上减少上下文切换带来的开销,提高实时响应能力。 3 北京邮电大学硕士研究生论文 1 3 论文组织结构 本文对l i n u x 内核的进程调度和中断处理机制进行了分析,研究了实时调 度理论中的r m 算法和e d f 算法,以及如何通过改进标准l i n u x 内核的调度算 法和中断处理过程以提高系统的实时性。最后,本文介绍了实现一个可用的嵌入 式l i n u x 系统的全过程。 论文的结构安排如下: 第一章,介绍本文的研究背景和意义,以及本文的研究目标和主要内容。 第二章,分析l i n u x 内核结构,对l i n u x 的进程调度和中断管理机制进行了 深入的研究,通过分析找出了提高l i n u x 实时性的改造关键。 第三章,介绍了实时系统的主要概念,并对实时调度算法进行了研究,重 点放在经典的实时算法:r m 算法和e d f 算法。 第四章,重点讨论如何在l i n u x 内核中添加实时调度器,如何在l i n u x 内核 中添加抢占点以及如何修改l i n u x 的中断处理流程。 第五章,介绍如何实现一个嵌入式l i n u x 系统,包括从编译内核到制作最 小化的根文件系统等全部流程。 第六章对全文进行了总结,并指出了下一步工作的方向。 4 北京邮电大学硕士研究生论文 第二章l in u x 内核研究 l i n u x 内核是整个l i n u x 系统的核心,它负责从硬件到软件的全面管理工作。 当前较新l i n u x 内核的稳定版本是2 6 1 4 ,本章的讨论都是基于这一版本的内核。 2 1 内核结构 l i n u x 操作系统的体系结构总体上属于层次结构,从内到外可分为三层:最 内层是系统核心,中间是s h e l l 、编译编辑实用程序、库函数等,最外层是用户 程序,包括许多应用软件。l i n u x 操作系统完成五大基本功能:进程管理,存储 管理,文件管理,设备管理,网络管理。 l i n u x 内核被分为两大部分,一部分与具体的硬件平台相关;另一部分是通 用的,移植到任何平台上都不必修改。l i n u x 内核的其他部分也使用类似的机制, 从图2 1 中可以看出,l i n u x 内核分为体系结构相关部分和体系结构无关部分, 这种设计思想使得l i n u x 能够方便地移植到多种硬件平台上。 j应用程序 : 。l 系统库 t - 、 r 上 硬件无关部分 : 内核 硬件相关部分 t 1 l i 硬件平台 图2 1l i n u x 系统结构 l i n u x 内核由五个子系统组成: ( 1 ) 进程调度控制着进程对c p u 的访问。当需要选择下一个进程运行时,由 调度程序选择最值得运行的进程。可运行进程实际是仅等待c p u 资源的进程, 5 北京邮电大学硕士研究生论文 如果某个进程在等待其他资源,则该进程是不可运行进程。l i n u x 使用了比较简 单的基于优先级的进程调度算法选择新的进程。 ( 2 ) 内存管理允许多个进程安全地共享主内存区域。l i n u x 的内存管理支持虚 拟内存,即在计算机中运行的程序,其代码、数据和堆栈的总量可以超过实际内 存的大小,操作系统只将当前使用的程序块保留在内存中,其余的程序则保留在 磁盘上。必要时,操作系统负责和内存之间交换程序块。 ( 3 ) 虚拟文件系统隐藏了各种不同硬件的具体细节,为所有设备提供了统一 的接口,支持多达数十种不同的文件系统。虚拟文件系统可分为逻辑文件系统和 设备驱动程序。逻辑文件系统指l i n u x 所支持的文件系统,如e x t 3 、f a t 等,设 备驱动程序指为每一种硬件控制器所编写的设备驱动程序模块。 ( 4 ) n 络接口提供了对各种网络标准的存取和各种网络硬件的支持。网络接 口可分为网络协议和网络驱动程序两部分。网络协议负责实现每一种可能的网络 传输协议,网络设备驱动程序负责与硬件进行通信,每一种可能的硬件设备都有 相应的设备驱动程序。 ( 5 ) 进n n n 信支持进程间各种通信机制。常见的进程间通信机制有管道、 信号、消息队列、信号量等。 图2 2 内核模块结构及其相互依赖关系 进程调度处于中心位置,所有其它的子系统都依赖它,因为每个子系统都 需要挂起或恢复进程。一般情况下,当一个进程等待硬件操作完成时它被挂起; 当操作真正完成时,进程被恢复执行。例如,当一个进程通过网络发送一条消息 时,网络接口需要挂起发送进程,直到硬件成功地完成消息的发送,当消息被成 6 北京邮电大学硕士研究生论文 功的发送出去以后,网络接口给进程返回一个代码,表示操作的成功或失败。其 他子系统以相似的理由依赖于进程调度。 各个子系统之间的依赖关系如下: 进程调度与内存管理之间的关系:这两个子系统互相依赖。在多道程序环 境下,程序要运行就必须要创建进程,而创建进程的第一件事情,就是将程序和 数据装入内存。 进程间通信与内存管理的关系:进程间通信子系统要依赖内存管理支持共 享内存通信机制,这种机制允许两个进程除了拥有自己的私有空间,还可以存取 共同的内存区域。 虚拟文件系统与网络接口之间的关系:虚拟文件系统利用网络接口支持网 络文件系统呷s ) 。也利用内存管理支持r a m d i s k 设备。 内存管理与虚拟文件系统之间的关系:内存管理利用虚拟文件系统支持交 换,交换进程( s w a p d ) i 由定期调度程序调度,这也是内存管理依赖于进程调度的 唯一原因。当一个进程存取的内存映射被换出时,内存管理向文件系统发出请求, 同时,挂起当前正在运行的进程。 除了这些依赖关系外,内核中的所有子系统还要依赖于一些共同的资源。 这些资源包括所有子系统都用到的过程。例如:分配和释放内存空间的过程,打 印警告或错误信息的过程,还有系统的调试例程等等。 2 2 内核代码结构 在大部分l i n u x 发行版本中,内核代码的主路径都是u s r s r c l i n u x ,l i n u x 内核的所有源代码都在这个目录中,也是本文所做工作的基础。 代码路径说明 d o c u m e n t a t i o n关于内核组件的一般解释及提示的文本文件 a r c h 平台相关的代码 i 3 8 6i b m 的p c 体系结构 k e r n e l 内核核心部分 m m 内存管理 m a t h e m u 浮点单元软件仿真 1 i b硬件相关的实用函数 b o o t 引导程序 - c o m p r e s s e d 内核的压缩处理 t o o l s 生成压缩内核映像的程序 - 多种硬件平台的支持 d r i v e r s 设备驱动程序 f s 文件系统,子目录中包含多种文件系统 i n c l u d e 头文件( h ) 7 北京邮电大学硕士研究生论文 a s m 。g e n e n c 平台相关的头文件 a s m i 3 8 6i b m 的p c 体系结构 - a s m - x x x 其他体系结构的头文件 1 i n u x 内核核心 - b y t e o r d e r 字节交换函数 i s d ni s d n 函数 - 其他头文件 i n i t 内核初始化代码 1 p cs y s t e mv 的进程间通信 k e r n e l 内核核心:进程、定时、程序执行、信号、模块等 l i b 通用内核函数 m m 内存管理 n e t 一组网络协议 s c r i p t s 构建内核镜像的外部程序 2 3 内核开发的特点 相对于用户空间内应用程序的开发,内核开发有很大的不同。这种差异给内 核开发带来了很大的挑战,但这并不意味着开发内核一定比开发应用程序难很 多。 这种差异使得内核成了一只性格迥异的猛兽,一些常用的准则被颠覆了,而 必须建立许多全新的准则。尽管有许多差异一目了然,但还有一些晦暗不明,最 重要的差异有以下几种。 2 3 1 没有i b c 库 与用户空间的应用程序不同,内核不能链接使用标准的c 函数库( 其他的 库也不行) 。造成这种情况的原因也很多,其中就包括先有鸡还是先有蛋这个悖 论。不过最主要的原因在于速度和大小。对内核来说,完整的c 库太大了,即 使是从中抽取一个合适的子集,效率和大小都不能被接受。 大部分常用的c 库函数已经在内核中实现,比如操作字符串的函数组位于 l i b s t r i n g c 文件中,只要包含 头文件就可以使用它们。在所有没有 实现的函数中,最著名的就是p r i n t f ( ) 函数了。内核代码虽然无法调用p 曲t f ( ) , 但是可以调用p r i n t l 【( ) 函数,p r i n t k ( ) 函数负责把经过格式化的字符串拷贝到内核 日志缓冲区上,这样,s y s l o g 程序就可以通过读取该缓冲区来获取内核信息。 p r i n t k ( ) 的用法很像p r i n t f ( ) ,他们之间的一个显著区别在于p d n t l 【( ) 可以通过指 定一个标志来设置优先级。s y s l o g 会根据这个优先级标志来决定在什么地方显示 8 北京邮电大学硕士研究生论文 这条系统消息。 2 3 2g n uc 像所有u n i x 内核一样,l i n u x 是用c 语言编写的,内核部分并不完全符合 a n s ic 标准。只要有可能,内核开发者总是要用到g c c 提供的许多语言扩展部 分。内核开发者使用的c 语言涵盖了i s oc 9 9 标准和g n uc 扩展特性。 内核代码中用到的c 语言扩展特性比较引人注意的有一下几个方面: 1 ) 内联( i n l i n c ) 函数; 2 ) 内联汇编; 3 ) 分支声明。 2 3 3 没有内存保护机制 如果一个用户程序试图进行一次非法的内存访问,内核会发现这个错误并结 束整个进程。要是内核自己非法访问了内存,那后果就难以控制了。内核中发生 的内存错误会导致“o o p s ,这是内核中出现的最常见的一类错误。在内核里, 风险常常会比外面大一些。 此外,内核中的内存都不分页二也就是说,你每用掉一个字节,物理内存就 减少个字节。 2 3 4 不要轻易在内核中使用浮点数 在用户空间的进程内进行浮点操作的时候,内核会完成从整数操作到浮点数 操作的模式转换。在执行浮点指令时到底会做些什么,因体系结构不同,内核的 选择也不同。和用户空间不同,内核并不能完美地支持浮点操作。在内核中使用 浮点数时,除了要人工保存和恢复浮点计数器,还有其他一些琐碎的事情要做。 2 3 5 容积小而固定的栈 用户空间的程序可以从栈上分配大量的空间来存放变量,甚至巨大的结构体 或者是包含许多数据项的数组都没有问题。之所以可以这么做,是因为用户空间 的栈本身比较大,而且还能动态的增长。内核栈既不大也不能动态增长它很 小而且长度固定。3 2 位机的内核栈是8 k b ,而6 4 位机是1 6 k b 。 9 北京邮电大学硕士研究生论文 2 3 6 同步和并发 内核很容易产生竞态条件( r a c ec o n d i t i o n ) 。和单线程的用户空间程序不同, 内核的许多特性都要求能够并发地访问共享数据,这就要求有同步机制保证不出 现竟态条件,特别是: 1 ) l i n u x 内核支持多处理器并发处理。所以,如果没有适当的保护,在两个 或两个以上的处理器上运行的代码很可能会同时访问共享的同一个资源。 2 ) 中断是异步到来的,完全不顾及当前正在执行的代码。也就是说,如果 不加以适当的保护,中断完全有可能在代码访问共享资源的当间到来,这样中断 处理程序就有可能访问同一资源。 3 ) l i n u x 内核支持抢占。所以,如果不加以适当的保护,内核中正在执行的 代码很可能被另外一段代码抢占,从而有可能导致几段代码同时访问相同的资 源。 常用的解决竟态条件的办法是自旋锁和信号量。 2 3 7 可移植性的重要性 尽管用户空间的程序不太注意移植问题,然而l i n u x 却是一个可移植的操作 系统j 并且要_ 直保持这种特点。,也就是说,大部分c 代码应该与体系结构无关, 在许多体系结构的计算机上都能够编译和执行。 2 4 进程调度 2 6 版本的l i n u x 内核使用了新的调度算法,称为o ( 1 ) 算法,它在高负载的 情况下执行得非常出色,并在有多个处理器时能够很好地扩展。对于2 4 版本的 调度器,时间片重算算法要求在所有的进程都用尽它们的时间片后,新的时间片 才会被重新计算。而2 6 版内核中,进程调度经过重新编写,调度程序不需每次 都扫描所有的任务,而是在一个任务变成就绪状态时将其放到一个名为“当前 的队列中。当调度程序运行时,只选择队列中最有利的任务来执行。这样,调度 可以在一个恒定的时间里完成。当任务执行时,它会得到一个时间段,或者在其 转到另一线程之前得到一段时间的处理器使用权。当时间段用完后,任务会被转 移到另一个名为“过期”的队列中,在该队列中,任务会根据其优先级进行排序。 从某种意义上说,所有位于“当前”队列的任务都将被执行,并被转移到“过期” 队列中。当这种事情发生时,队列就会进行切换,原来的“过期”队列成为“当 1 0 北京邮电大学硕士研究生论文 前”队列,而空的“当前”队列则变成“过期”队列。由于在新的“当前 队列 中,任务已经被排列好,调度程序现在使用简单的队列算法:总是取当前队列的 第一个任务来执行。这个新过程要比以前的过程快得多。 2 4 1l n u x 进程概述 l i n u x 系统中的进程必须具备如下三个条件: ( 1 ) 有一段程序供其执行。 ( 2 ) l i n u x 内核为每个进程分配一个t a s ks t r u c t 数据结构和一片用作系统空 间堆栈的存储空间。数据结构中记录了进程所占用的各种资源,对应着操作系统 理论中所谓的进程控制块p c b 。t a s k s t r u c t 数据结构和系统空间堆栈两者缺一不 可,又有紧密联系,所以在物理存储空间中也连在一起。内核在为每个进程分配 一个t a s k _ s t r u c t 结构时,实际上是分配两个连续的物理页面。这两个页面的底部 用作进程的t a s k s t r e e t 结构,而在结构的上面就用作进程的系统空间堆栈。 ( 3 ) 有专有的用户空间,进一步意味着除了系统空间堆栈外还有用户空间堆 栈。当一个进程运行于用户模式时,使用用户空间堆栈,当进程进入内核模式时, 要切换到系统空间堆栈,前面所述的发生在用户空间的中断会造成堆栈的切换就 是指当进程由用户空间进入内核空间时,会由用户空间堆栈切换到系统空间堆 栈,并在系统空间堆栈中保留用户空间堆栈指针,供进程返回用户空间时恢复堆 栈使用。 2 4 2l i n u x 进程调度分析 在i n c l u d e l i n u x s c h e d h 文件中的1 0 6 1 1 2 行定义了以下的进程状态标志: # d e f i n et a s k r u n n i n g0 # d e f i n et a s k i n t e r r u p t i b l e1 # d e f i n et a s k _ u n i n t e r r u p t i b l e2 # d e f i n et a s k s t o p p e d4 # d e f i n et a s k t r a c e d8 # d e f i n ee x i t z o m b i e1 6 # d e f i n ee x i t d e a d 3 2 ( 1 ) t a s k r u n n i n g :运行态标志,表示进程是正在运行的进程( 系统的 当前进程) 或准备运行的进程( 在r u n n i n g 队列中,等待被安排到系统的c p u 中运行) 。处于该状态的进程实际参与进程调度。 ( 2 ) t a s k _ i n t e r r u p t i b l e :可中断等待态标志,处于等待队列中的进程, 1 1 北京邮电大学硕士研究生论文 在资源有效时被唤醒,也可被其它进程发出的信号中断睡眠,唤醒后进入就绪状 态。 ( 3 ) t a s k _ u n i n t e r r u p t i b l e :不可中断等待态标志,处于等待队列中的 进程,直接等待硬件条件,在资源有效时被唤醒,不可由其它进程通过信号中断 睡眠。 ( 4 ) t a s k s t o p p e d :停止态标志,进程被暂停,通过其它进程的信号才能 被唤醒。正在调试的进程可以处在该停止状态。 ( 5 ) t a s kt r a c e d :跟踪态标志,表示进程处在被跟踪调试执行状态。 ( 6 ) e x i t z o m b i e :僵死态标志,终止的进程,是进程结束运行前的一个 过渡状态。虽然此时已经释放了内存、文件等资源,但是处于为了便于调试等目 的,在t a s k 向量表中仍有一个t a s ks t r u c t 数据结构项。 ( 7 ) e x i t _ d e a d :死亡态标志,如果进程被标志为e x i t _ d e a d ,则说明该 进程完全死亡,并且没有其它进程在等待它,它任务指针将随后被释放。 各个状态标志之间的转换关系如图2 3 所示: 图2 3 进程状态转换示意图 在内核空间,一个进程可以通过调用s c h e d u l e o 启动一次调度,一般在调用 s c h e d u l e ( ) 之前,将本进程的状态设置成为等待标志t a s k _ i n t e r r u p t i b l e 或t a s k _ u n i n t e r r u p t i b l e ,暂时放弃运行而进入睡眠,可以通过系统调用 s l e e p _ o n ( ) 或者s l e e po nt i m e o u t ( ) 来实现。 1 2 北京邮电大学硕士研究生论文 通过分析a r c h i 3 8 6 k e r n e l e n t r y s 文件中的第1 4 3 1 9 3 行可知转入 r e s u m ek e r n e l 执行n e e dr e s c h e d 段中的c a l ls c h e d u l e 语句的条件为中断或异常发 生前c p u 的运行级别为3 。即用户状态,所以当c p u 在内核空间运行时,不会 发生强制调度。从系统空间返回到用户空间只是发生调度的必要条件,而不是充 分条件。具体是否发生调度取决于代码中的n e e d r e s c h e d 段。 l i n u x 进程的调度时机发生在以下情况: 当前运行的进程自愿放弃运行。 系统调用返回前时和从中断或者异常处理返回到用户空间之前的时刻。 采用轮转法( 1 汛) 调度的进程时间片用完时由时钟中断引起新一轮调度。 2 4 3l i n u x 进程调度策略分析 n n u x 使用基于优先级的调度算法,在系统当前所有可以运行的进程中选择 优先权值最高的进程进入c p u 运行。l i n u x 中把用户进程分为非实时进程和实时 进程两类,非实时进程有两种优先级,静态优先级和动态优先级,实时进程又增 加了实时优先级。 一 l i n u x 的进程调度策略定义在s c h e d h ( l i n e :1 2 7 1 2 9 ) : # d e f i n es c h e d _ n o r m a l0 # d e f i n es c h e d _ f i f o1 # d e f i n es c h e d r r 2 t a s ks t r u e t 结构中以以下几个变量与调度算法密切相关: u n s i g n e dl o n g p o l i c y ; i n t p r i o ,s t a t i c _ p r i o ; u n s i g n e di n tt i m e _ s l i c e ,f i s r t _ t i m e _ s l i c e ; u n s i g n e dl o n g r t _ p f i o r i t y ; 其中,p o l i c y 是进程调度策略,值域为s c h e dn o r m a l ,s c h e dh f o , s c h e dr r 。p r i o 是进程的优先级,s t a t i cp f i o 是进程的静态优先级,是一个固 定值。t i m es l i c e 是进程当前剩余的时间片。f i s r tt i m es l i c e 是进程的初始分配的 时间片,它的大小由p d o 或者s t a t i c _ p r i o 决定。r t _ p r i o f i t y 是实时优先级,用于 实时进程间的选择。 首先,l i n u x 根据p o l i c y 从整体上区分实时进程和普通进程,如果p o l i c y 值 为s c h e dn o r m a l 表明该进程是普通进程;如果是s c h e df i f o 或者 s c h e d r r 表明该进程是实时进程。对于普通进程,l i n u x 采用动态优先调度, 选择进程的依据就是进程t i m e的大小。进程创建时,优先级被赋一个 初值,一般为2 0 到1 9 之间的_ 数s l 字i c e ,这个数字同时也是 的p r i 初o t i m e s l i c e 值,就是 1 3 北京邮电大学硕士研究生论文 说进程创建时两者是相等的。p r i o 代表分配给该进程的时间片,t i m es l i c e 表示 该进程剩余的时间片。在进程运行过程中,t i m es l i c e 不断减少,而p r i o 保持不 变,以便在t i m es l i c e 变为o 的时候( 该进程用完了所分配的时间片) 对t i m es l i c e 重新赋值。当一个普通进程的时间片用完以后,并不马上用p r i o 对t i m es l i c e 进 行赋值,只有所有处于可运行状态的普通进程的时间片( p t i m es l i c e = = 0 ) 都用完 了以后,用p r i o 对t i m e s l i c e 重新赋值,这个普通进程才有了再次被调度的机会。 这说明,普通进程运行过程中,t i m es l i c e 的减小给了其它进程得以运行的机会, 直至t i m e _ s l i c e 减为0 时才完全放弃对c p u 的使用,这就相对于优先级在动态变 化,所以称之为动态优先调度。 对于实时进程,l i n u x 采用了两种调度策:即f i f o ( 先来先服务调度) 和 r r ( 时间片轮转调度) 。因为实时进程具有一定程度的紧迫性,所以衡量一个实 时进程是否应该运行时,l i n u x 采用了一个比较固定的标准。实时进程的 t i m es l i c e 只是用来表示该进程的剩余时间片,并不作为衡量它是否值得运行的 标准。这和普通进程是有区别的。从前面的分析己经看到,每个进程有两个优先 级,实时优先级就是用来衡量实时进程是否值得运行的。这看来比较麻烦,但实 际上l

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论