已阅读5页,还剩86页未读, 继续免费阅读
(计算机科学与技术专业论文)嵌入式linux建立企业产品研发核心技术的机遇与挑战.pdf.pdf 免费下载
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
j 旧篮 小叟刈嵌入式l i n u x 技术进行了系统分析,并详细介绍了 个完磐的嵌入 i 。i n u x 系统,就其各个主要子系统,如初始化、中断处理子系统、进程调度、 f 仃钎理子系统、文件子系统、网络子系统、p c m c i a 子系统、m t d r 系统、 i f f s 2 文件系统以及p p p 设备进行了详细分析,同时分析了适刚j :嵌入系统 n 0 俐形外发环境m i c r o w i n d o w s 系统及其控件库,另外介绍了汉字系统的。丈现披 术。通过个成功应用实例:网络电话机项目,充分说明了l i n u x 系统足 个 “uj 用性的系统,虽然它在丌发环境方面与商业嵌入式操作系统相比柯 定趴 ,i j ,f 日这丝毫不影响将它可作为一个企业产品丌发的核心软件技术所具有的t e 篮一t l - ,只要有一定的投入,它能为企业带来巨大的市场空日j 。 天键宁 嵌入式l i n u x ,源代码开放软件,软件丌发平台 a b s l i t a c i i nt h i sp a p e r , w ea n a l y z e dt h et e c h n o l o g yo fe m b e d d e dl i n u xs y s t e m a t i c a l l ya n d i n t r o d u c e dac o m p l e t ee m b e d d e dl i n u xs y s t e m ,a n da n a l y z e ds o m eo fi t ss u b s y s t e m s i nd e t a i l ,i n c l u d i n gi n i t i a l i z a t i o n ,i n t e r r u p ts u b s y s t e m ,p r o c e d u r es c h e d u l i n g m e m o r y m a n a g e m e n ts u b s y s t e m ,f i l es y s t e m ,n e t w o r ks u b s y s t e m ,p c m c i as u b s y s t e m ,j f f s 2 l i l es y s t e ma n dp p pd r i v e r i na d d i t i o n ,w ea n a l y z e dt h eg u is u i t a b l ef o re m b e d d e d s y s t e m s - - t h em i c r o w i n d o w ss y s t e ma n df l n x ,w ea n a l y z e d t h ec h i n e s ec h a r a c t e r s y s t e mt o ob yas u c c e s s f u la p p l i c a t i o np r o j e c t - - n e t w o r kt e l e p h o n e ,i ti sc e r t i f i e dt h a t l i n u xs y s t e mi sas y s t e mo fh i g ha v a i l a b i l i t y , t h o u g hi t si n t e g r a t e dd e v e l o p m e n t e n v i r o n m e n ti sl e s sp o w e r f u lt h a nc o m m e r c i a le m b e d d e do p e r a t i n gs y s t e m s b u tt h i s d o e s n tl e s s e ni t s i m p o r t a n c eo fb e i n gak e ys o f t w a r et e c h n o l o g y f o rt h ep r o d u c t d e v e l o p i n go fa ne n t e r p r i s e u p o nl e s si n v e s t m e n t ,i tw i l lb r i n ga b o u th u g em a r k e t s p a c ef o ra ne n t e r p r i s e k e yw o r d s e m b e d d e dl i n u x o p e ns o u r c es o f t w a r e ,s o f t w a r ed e v e l o p m e n tp l a t f o r m 1 前言 例络电话是f :海电信技术研究所( :海理想信息技术有限责仟公r d ) 投资 ”发的一项新产品。该产品集电话、网络与固网短消息功能j 二一体,h 标侄 为川户提供幕j + p s t n 网络的低价格高性能的信息获取丁段。 小管掌握关键技术、提高公司的产削t 丌发能力、提高公q 综合竞争能j 的 1 导思想,公司决定从硬件到软件完全自主丌发,并以咳产品的门发为契机, 为公i i jj :发适合市场需求的系歹0 产品做技术准备。 本人在站工作前期通过一系列的分析论证,认为在上海电信技术研究所的 信息电话上使用嵌入式l i n u x 作为操作系统具有可行性,因此在公司内部赢项 纠j 从事嵌入式l i n u x 方面的研究开发,希望通过这项工作探索一条复杂嵌入 式软件系统自主丌发之路。实践证明,在互连网高度发达的今天,将自由软f t + 作为我国企业嵌入式系统开发的软件基础具有很高的可用性与灵活性,对于提 高企业的产品丌发能力具有重要意义。 2 网络电话机系统描述 硬件方面,本产品以s t r o n g a r m 3 2 位r i s cc p u 为基础,而在软件方面, l i n u x 技术正符合我们的要求,因此该产品的软件系统开发定位在以嵌入式l i n u x 为基础的软件开发上。 一个完整的嵌入式l i n u x 系统应包括系统引导程序、l i n u x 内核、( j 选) 图彤用户接口( 包括汉字系统) 、用户应用程序等部分。本文以下各部分是基j : a r m 系列c p u 的。 系统引导程序是系统加电时运行的第一个程序。系统引导程序所完成的i 作包括对s d r a m 控制器的初始化,以及将内核与r a m d i s k 装裁进内存,斤 将拧制转移到内核。本系统所采用的系统引导程序为b l o b ,并埘其进行j 了 b 功能扩充,使它更适合我们的应用环境。 l i n u x 内核是整个软件系统的核心部分,它管理系统的各种n j 用资源,并为 j 岖j | j f zj 手提供服务。 图形系统( 包括汉字系统) 采用类似x 的实现方式,以服务器的形式仃化 j 系统中,负责管i 里系统的帧缓存设备,并为应用程序提供图形,汉州务。 为7 给应用程序提供较为友好的编程环境,在图形系统的基本a p i 之 i 又提供 控件库,使用户界面的编程比较方便。 用户应用程序系统的设计采用了大量的进程问通信手段,使刖,1 的操作变 f ! j s t j 能的简荦方便。 仵接下来的儿章中将就l i n u x 内核、图形用户接l 1 的实现进 j - 分析,最后 刈信息f l i 话的整个软件系统进行介绍,并对基r 信启、电话的软件i 慢什、 ,台j 能进行的产品延申进行分析。 在对l i n u x 内核分析时将根据功能划分进行。l i n u x 是一个跨c p u 、f 台的 操作系统,本文也将对l i n u x 内核中与平台无关部分为c p u 所提供的接口进行 分析,为将l i n u x 移植到新的c p u 平台提供参考。而在g u i 部分将重点分析g u i 图形功能要素以及控件层的设计。 3 l i n u x 内核部分 根据功能不同,l i n u x 内核的模块可基本划分为进程管理、内存管理、嘲络 系统、文件系统与进程通信几部分。这种划分方式是从用户程序的角度为出发 点的。从内核开发本身的角度看,l i n u x 内核应包括初始化、中断处理、进样 凋度、内存管理几个基本部分。在此基础之上引入文件系统、网络系统、总线 管j t h 系统等。而与之相关的设备驱动程序的管理也是这些子系统的功能。本竹 将从内核本身的角度,分系统初始化、中断处理、进程调度、内存管理、文件 系统网络系统、p c m c i a 子系统、p p p 设备、m t d 设备以及j f f s 2 文件系统等 部分对l i n u x 内核进行介绍。 3 1 初始化 l i n u x 是一个跨平台的系统,其内核代码中与平台无关的部分是从i n i t m a i nc 文件中s t a r t k e r n e l ( v o i d ) 函数处丌始执行的。在此之前所执行的程序主要完成内 核延仃堆奉环境的建立,包括查找处理器类型、奁找机器结构、建系统系统 运行所需最m i 内存【j :表、激活m m u 、设霄系统衲始化任务栈、保存处卵器i d 0 机器类掣等参数供c 代码部分使用。 从s t a r tk e r n e l ( 1 丁1 :始,内核将完成其余的初始化工作。卜而重点分析从 s i a l l tk e r n e l ( ) 丌始的系统仞始化工作。 s t a r t k e r n e l ( ) ) i 亡调用l o c k k e r n e l ( ) ,由j :嵌入式环境中 般不会刖剑l i n u x 的 s m p 支持,与s m p 相关的一些函数一般定义为空循环,没有实质意义。 仞始化过程然后调用s e t u p a r c h ( ) 。该函数完成与特定机器相关的砦数据 初始化。这些数据包括: r o o td e v ,这个参数决定了系统在装载根文件系统时使用哪个改 备上的文件系统; p r o ci n f o ,该结构记录了c p u 名称与c p u 制造商名称: s y s t e mu t s n a m e ,该结构记录了系统名称、机器名称( 可由s e t h o s t n a m e ( ) 系统调用设置) 、机器名称、系统版本号、域名( 可由s e t d o m a i n n a m e ( ) 系统调用设置) 等。 i n i tm e m ,该结构记录了内核中代码的起始位置、数据起始位置等存储 器信息。 m e m i n f o ,该结构记录了系统中存储器的分布情况,包括系统有几个存 储器b a n k ,每个b a n k 的大小。 除了初始化上述数据结构之外,s e t u p a r c h ( ) 还初始化了系统的页表,对传 递给系统的命令行参数进行整理,并进行部分处理,总的来说,系统运行所;l j 要的基本数据都是在这里初始化。s e t u p _ a r c h o 是与体系结构紧密相关的。 仞始化过程接着调用p a r s e _ o p t i o n s o 函数对命令行参数进行分析处理,将命 令行参数中的各个环境变量分割出来保存到e n v p _ i n i t 数组中,将命令行参数的 的内核选项分离并保存到a r g v i n i t 数组中。这两个数组将用于后续的初始化过 程。 系统在分析命令行参数后,调用t r a p i n i t o 对系统中断向量表进行初始化。 中断向量初始化时系统与体系结构相关的接v i 函数是t r a p _ i n i t o 。在a r m 结 构中,该函数在文件a r c h a r m l k e r n e l e n t r y a r m v s 中实现。该函数将中断向硅拷 b 1 剑化j 虚地址o x 0 0 0 0 0 0 0 0 的内存中,同时将町囊定化的r f f 断处州剃又部 ( s t u b l 拷贝到虚地址o x 0 0 0 0 0 2 0 0 的内存中,从而完成r i l 断向量表的仞始化过程。 t 断向董表初始化后,调用i n i ti r q 0 函数对中断处理分配农i r q d e s c 数纠 逍行卡j 始化,为符个中断分配缺省处理函数。 ,断处理是操作系统。| 个瞳监 的“l :分它jc p u 结合得比较紧密,4 i 剐c p u 的r t ,断处胖过科住i i 十牛段人, l k l l b el i n u x 中j 中断处理相关的代码大部分都是在与体系结构相关的,j 接11 也 捌对较粗。 中断分配表仞始化后,调用s c h e di n i t o x t 进程调度所用到的数据结构进 j 例始化。s c h e di n i t 0 所初始化的数据中包括: p i d h a s h 数组,这是一个t a s ks t r u c t 结构的指针数组。该数组初始化为 空指针。p i d h a s h 数组用于根据p i d ( 进程标识号) 来快速查找其对应的 t a s k s t r u c t 结构体。它所用的h a s h 函数为( ( ( x 8 ) “x ) & ( p i d h a s h s z - 1 ) ) 。由于l i n u x 可同时支持多个进程,通过h a s h 表柬查找p i d 所刈应的 任务结构可大大加速查找的速度。 t v l 、t v 2 、t v 3 、t v 4 、t v 5 。t v l 一t v 5 是时问向量,用于处理系统的计时器 功能。它们的初始化是通过调用i n i tt i m e r v e c s ( ) 进行的。 b hb a s e 数组。b hb a s e 是一个函数指针,用于系统的中断下半n j ( t o t t o m h a l f ) 处理。s c h e di n i t ( ) 初始化了b hb a s e 数组中的三个成员: t i m e rb h 、t q u e u eb h 、i m m e d i a t eb h 。这是通过调用i n i tb h ( i n t n r , v o i df + r o u t i n e ) ( v o i d ) ) 1 函数完成的。 调用s c h e di n i t 之后,调用t i m ei n i t 0 函数对系统时钟变量x t i m e 初始化, 然后安装系统时钟中断处理函数。 初始化过程接着调用s o f t i r q函数进行软中断处理仞始化。它所涉及的_init0 数据结构b ht a s kv e c 数组、s o f i i r q 数组。这些数据用_ 实现系统的机_vec b h 制jt a s k l e t 机制。 s o f t i r q _ i n i t o 之后,调用c o n s o l e i n i t ( ) 进行控制台初始化。c o n s o l e i n i t 之 后,内核中的p r i n t k 0 语句就可以产生打印输出了。 控制台初始化之后,系统调用m m s l a b c 中的函数k m e mc a c h ei n i t ( ) ,该函 数初始化l i n u x 的s l a b 分配器中的基本数据结构c a c h ec a c h e 、c a c h ec h a i ns e m 、 c a c h ec h a i n 。这儿个数掘用于s l a b 分配器中的c a c h e 管理,荚y - s l a b 分配器将 “2 4 常内存管理中有较详细的描述。 卡j 始化过雅接卜来调用s t i ( ) 打丌中断,然后调刖c a l i b r a t e d e l a y ( ) ( 化r i n i t m a i n c ) 估算l o o p s j ) e r j i f t y 的值。l o o p s g e rj i f f y 的值是c p u 的计算能力 f 1 j 个半h 略估计,因此它的值称为b o g o m i p s ,即假的m i p s 值。该值用r “b 瞰r 力秤序r f ,进行非常短到期的时延而调用d e l a y ( d e l a y ) l - ) 数时汁篼参数d e l a 3 | 0 值。 初始化过程接着调用l n e mi n i t o 函数,该函数根掂m e m i n f o 结构f i ;j 信,u , , o j 始化系统基于页的内存管理系统的所有数据结构,标i : 系统中所有空闲内存的 睛况,并输出系统最初的内存使用情况。m e m i n i t o 之后,系统就可以使用g f p ( 即页面分配与释放) 功能了。 m e r ei n i t o 之后,系统调用k m e mc a c h es i z e si n i t o 函数,它的作刚是建、j 系统内部以及通用的c a c h e 。 系统随后调用f o r k _ i n i t ( m e m p a g e s ) 函数,它的作用是根据系统中的空闲内存 的多少( 即m e m p a g e s 值) 确定系统所的充许线程数量,其确定标准为线程结 构最多u ,点占用半的系统内存。 之后调用p r o c c a c h e s _ i n i t o n 数创建进程管理子系统用到的儿个c a c h e ,它 们包括:s i g n a la c t 、f i l e sc a c h e 、f sc a c h e 、v ma r e as t r u c t 、m ms t r u c t 等。 随后调用v f sc a c h e si n i t ( ) i 函数创建虚拟文件系统的几个c a c h e ,它们包括: b u f f e r h e a d 、n a m e s c a c h e 、f l i p 、d q u o t 、d e n t r yc a c h e 等,并初始化d e n t r y 哈存 表d e n t r y h a s h t a b l e 。 初始化过程接着调用b u f f e ri n i t ( ) 函数初始化b u f f e r 哈希表。关于虚拟文 件系统所用到的这些数据结构将在文件系统一节中介绍。 系统接着调用p a g e _ c a c h e i n i t ( ) 初始化p a g e 哈希表p a g e h a s h t a b l e ,该 数据用十系统中文件内存映射功能。 继p a g e c a c h e i n i t ( ) 之后,仞始化过程将分别凋h 】k i o b u f _ s e t u p o 、 s i g n a l s i n i t o 、b d e v i n i t o 、i n o d e i n i t o 、i p c i n i t ( ) 函数。其中k i o b u fs e t u p o t 4 1 数 建立k i o b u f 类型的c a c h e ,用于抽象的内核空问i o 缓冲,s i g n a l s i n i t ( ) 函数建立 s i g q u e u e 类型c a c h e ,用于系统的信号处理队列管理,b d e v i n i t o 函数初始化块 岐簖系统,建立b l o c k d e v i c e 结构类型的 喻希表,j :建市i n o d e 结构类型的c a c h e , r f 与消息队列三种进程通信机制。 c a c h e ,i n o d e l n i t ( ) 函数初始化i n o d e i p c j n i t ( ) 函数则初始化信号、k1 # 内 系统初始化过程执行到此时,系统最基本的部分鄙已经钏始化完卢,化拨 l 、水的初始化过程中将初始化其他的子系统,如网络f 系统、各j 丈什系统、 p c m c i a p c i 等总线,系统,斤初始化所有内核中的设箭驱z 力柑睁,释放内 饮卡j 始化部分的代码区域,最后加载根文件系统,并门。始执行用户缴的仞始化 氍序,至此,内核的初始化过程结束。 3 2 中断处理 中断处理是0 s 的一个重要部分,它是c p u - b # b 设通信的重要手段。本节 介绍l i n u x 的中断处理过程以及l i n u x 为处理中断所提供的接口。 不同的c p u 其中断方式有所不同,下面以a r m 系列c p u 为例介绍l i n u x 的中断处理过程。 3 2 1 a r m 的中断类型 a r m 支持7 种类型的中断,对应每种中断类型有一种优先级处理状态。a r m 的7 种中断类型是: 复位中断:复位中断是由处理器的复位信号引起的中断,系统加电时止 进入复位中断处理向量。复位中断时系统进入s v c 模式,m m u 失效, 系统从物理位置0 x 0 处丌始执行程序,中断与快中断均关闭。 无定义指令中断:当系统执行了非法指令时进入该中断,中断矢量位j 0 x 4 ,处理器进入是u n d e f 模式,中断关闭,快中断状念不变。,fl i n u x 中,陔中断用于在没有浮点支持的c p u 中模拟浮点处理指令。 软件中断:系统执行s w i 指令后进入软件中断,中断矢量位于0 x 8 ,处 理器进入s v c 状态,中断关闭,快中断状态不变。该中断用于实现l i n u x 中的系统调用。 预取指令失败中断:当系统从内存中预取到的指令无效时系统进入陔 中断处理,中断矢量位于o x c ,处理器进入a b o r t 状态。 坝取数掂失败中断:当系统从内存中预取到的指令无效时,系统进入【敌 中断处理,中断矢量位于o x l o ,处理器进入a b o r t 状态。预1 1 ) ( 指令火 败p 断与预取数据失败中断在l i n u x 中用于系统的页面失效处理。 , t l 断请求中断:当处理器的i r q 输入信号有效时,系统进入t r 断i t 求 处理,中断矢量位于o x l8 ,处理器进入i r q 状态。【| 1 断请求中断住l i n u x 1j j :一般外设中断处理,它也是l i n u x 巾使刖最多的- ”断。 快。析清求中断:当处理器的f i q 输入信号有效时,系统进入快l t l 惭 请求处理,中断矢量位十o x l c ,处理器进入f i q 状态。这种炎w 门- | l 断在l i n u x 中没有很好的支持。 3 2 2 l i n u x 的中断处理要求与接口 l i n u x 只定义了两种类型的运行状态即用户态与内核态,l i n u x 的中断处啦 是在内核态下执行的。对于a r m 系统c p u 来说,系统存在u s e r 、a b o r t 、s v c 、 i r q 、f i q 、u n d e f 等执行状态,并且在这些状态下可见的寄存器也1 i 样, i 纠此要求在进入到证规的中断处理程序之前先进入f 确的c p u 执行状态。 在a r ml i n u x 中,用户念对应a r m 的u s e r 状态,而内核念则对应a r m 的s v c 状态。在a r m 处理器发生中断时,c p u 进入相应的运行状态,在这砦 状态下最初执行的几条指令需要保存这些状态下运行环境,然后进入s v c 状 态,以便l i n u x 执行讵常的中断处理程序。 l i n u x 的中断处理部分为内核其他部分提供了标准的接口,这些接口可分为 二二类: 中断的申请与释放: 中断的申请: i n tr e q u e s t i r q ( u n s i g n e di n ti r q ,v o i d ( + h a n d l e r ) ( i n t ,v o i d + s t r u c tp t r e g s + ) u n s i g n e dl o n gi r q _ f l a g s ,c o n s tc h a r + d e v n a m e ,v o i d + d e v i d ) ; 其中i r q 为申请的中断号,h a n d l e r 为中断处理函数,i r qf l a g s 为申请的中断 处理属性,d e vi d 用于标识共享中断的设备号。通常,中断申请函数的返叫值 为0 表示申请成功,返回值为负时表示申请失败的错误码。 中断的释放: v o i df r e e i r q ( u n s i g n e di n ti r q ,v o i d + d e v j d ) i 其中i r q 为申请释放的中断号,d e v i d 为共享中断时相应的设备号,即f _ = 销 l id e vi d 相应的中断处理程序。 中断的打丌与关闭: v o i de n a b l e i n ( u n s i g n e di n ti r q ) ; v o i dd i s a b l e i r q ( u n s i g n e di n ti r q ) : 这两个函数的作用分别为打 与关闭与i r q 拥关的叶,断。 。| j 断的下半部处理: 。”断的卜i 半部分( b h ) 处理负责完成中断处理过程中比较耗时的_ l j | :部分i 作任务。中断程序可以调用函数 m a r k _ b h ( i n tn r ) ; 柬激活n r 所对应的中断下半部分处理,驱动程序一般使用i m m e d i a t e b h 进 行中断的f 半部分处理,而通过调用函数 q u e u e _ t a s k ( & s h o r u a s k ,& t q _ i m m e d i a t e ) ; 束将中断下半部分处理函数所在的t q _ s t r u c t 结构s h o r t t a s k 挂到t qi m m e d i a t e 处理队列中,s h o r t t a s k r o u t i n e 即为处理中断下半部分的函数,而s h o r t t a s k d a t a 足传递给该函数的参数,用以标识下半部分处理函数。 3 2 3 a r ml i n u x 的中断处理 l i n u x 的中断处理除下半部分( b h ) 处理以外都是与c p u 紧密相关的。d f j i 中断的打丌与关闭以及中断的申请与释放只是对相关的数据结构进行了操 作,或是调用了对中断控制硬件进行操作的函数,因此在这罩就不加以详细分 析,下面重点分析a r ml i n u x 中的中断处理过程。 a r ml i n u x 的中断处理过程主要是在d oi r q o 函数中进行的。中断处理在 进入d oi r q ( ) t 函数之前所做的工作主要是中断现场的保护,并从相应的处理机 运行状态转到s v c 状态下运行。而从d o i r q o 函数返回之后中断处理烈序所做 的j :作主要是根据进入中断处理d u 系统的运行状态束进行相应的中断退m 处 理:如果进入中断处理自口系统运行在用户态下,即a r m 的u s e r 状态,! j ! j 。 i c 复 被中断的程序的执行环境,但并不恢复它的运行,而是调用s c h e d u l e ( ) 调度其他 介适的进仃运行:如果进入中断处理程序之前系统运 _ i - d ! 核心念,刘a r m f n s v ( 状念,则。恢复被r p 断的程序的执行环境,并恢复浚程序的运行。卜面卜要介 “ d oi r q o 。 d o i r q o i 鬈i 数原型为a s m l i n k a g ev o i dd o 一1 r q ( i n ti r q ,s t r u c tp t r e g s + r e g s ) :z : a s m l i n k a g e 说明该函数可以从汇编程序直接调用,两个参数i r q 与r e g s 分别表小 丁引起中断的中断号与中断现场的寄存器值。 d o i r q 丽数主要完成两个功能: 首先,它根据i r q 的值,从数组i r qd e s c 取出元素i r qd e s c i r q ,渊川 i r q _ d e s c i r q a c t i o n 链表中的所有中断处理函数。 1 r q 的所有中断处理函数调用完毕后,d o i r q 检查系统中是否有软中断( 包 括b h 处理、t a s k l e t 等) ,如果有则调用d o s o f t i r q o 执行软中断处理。 a r ml i n u x 的中断处理用到的核心数据结构是i r q _ d e s c n r i r q s 。这足 个s r u c ii r q d e s c 类型的结构,n r _ i r q s 是系统所充许的最多中断数,f 面足其 定义: s t r u c ti r q d e s c u n s i g n e di n t n o m a s k :l ;p 中断处理时不屏蔽陔中断+ u n s i g n e di n te n a b l e d :l ; + 该中断当前允许+ u n s i g n e di n tt r i g g e r e d :1 ; p 本中断已经发生+ u n s i g n e di n tp r o b i n g :1 ;+ 本中断萨在检测+ u n s i g n e di n tp r o b eo k :1 ; + 本中断可以被检测+ u n s i g n e di n t v a l i d :l ;p 本中断可以被申明+ u n s i g n e di n tn o a u t o e n a b l e :l ; p 不自动允许本中断+ u n s i g n e di n t u n u s e d:2 5 : v o i d ( + m a s k a c k ) ( u n s i g n e di n ti r q ) ; 幸本中断的屏蔽且应答函数+ v o i d ( + m a s k ) ( u n s i g n e di n ti r q ) ; + 本中断的屏蔽函数+ v o i d ( + u n m a s k ) ( u n s i g n e di n ti r q ) ;+ 中断允许函数+ s t r u c ti r q a c t i o n * a c t i o n ;+ 中断处理函数队列+ ,+ + 中断锁枪测: + u n s i g n e di n t u n s i g n e di n t u n s i g n e di n t s t r u c ti r q a c l i o n 定义为: s l r u c ti r q a c t i o n v o i d ( + h a n d l e r ) ( i n t ,v o i d + s t r u c tp t r e g s + ) ; u n s i g n e dl o n gf l a g s ; u n s i g n e dl o n gm a s k ; c o n s tc h a r * n a m e ; v o i d + d e vi d ; s t r u c ti r q a c t i o n + n e x t ; ) ; 它记录了中断处理函数h a n d l e r 的属性,包括名称、属于哪+ 个设备等。 从上面可以看出,i r q _ d e s c n i l i r q s 数组包含了所有用_ rc p 断管理与处理 的信息,是a r ml i n u x 中断处理的核心数据结构,除软件中断外的所有中断处 理功能都是围绕该数据在进行。 3 3 进程调度 进程调度是o s 的基本组成部分。l i n u x 中的进程运行在用户态时可以被抢 占调度,但当进程运行在内核态时是以非抢占的方式进行调度的。关于l i n u x 的进程管理、进程在内核中的表示方式、进程的创建、进程的调度策略等已仃 很多文献做了详细的分析,在此,我们将结合a r m 处理器分析l i n u x 的进干【i ! 渊度过程。 l i n u x 的进程调度过程可以用图1 来形象地表示: 州一删且 咄 伙 呔 一 、 、 , 斟l进程渊度过程_ i 崽| 兰| 图中虚线部分表示单个进程,实线部分表示当前时刻正在执行的进程。“j 前f 在执行的进程当发生系统调用而进入核心态执行,相应系统调用服务程序 执行完毕后将调用s c h e d u l e ( ) ;或者,当前进程运行在用户态时系统产生中断, 目应中断处理程序执行完毕,用户态程序运行环境恢复之后,从中断处理返叫 之6 u 也将调用s c h e d u l e ( ) 。进入s c h e d u l e 程序之后,内核将从就绪进程队列- ,选 取一个进程作为当前进程,s c h e d u l e 程序退出之后即恢复该进程的运行。 l i n u x 的进程调度包括调度策略与上下文切换两个部分,其中调度策略是与 c p u 无关的,是l i n u x 进程调度的该心部分,而上下文切换则是与c p u 紧密相 关的,它涉及许多硬件管理的细节,是进程调度程序的基础。 3 3 1 进程调度策略 对于特定进程使用的调度算法称为调度策略。通常情况f ,进程的渊艘策 略和进程有关,这在进程的s t r u c tt a s ks t r u c t 结构的p o l i c y 成员中有所反映。 般情况下,p o l i c y 是s c h e do t h e r 、s c h e df i f o 、s c h e dr ri m 0 个f t 集,但它也可能含有s c h e dy i e l d 位集,它表示进程决定交出c p u ,该位ir j + 通过系统调用s c h e dy i e l d 来设置。 s c h e do t h e r 表示着传统的调度策略,改进程不是个实时进程。 s c h e df i f o 意味着这是一个实时进程,对于该进程的调度需要遵守 p o s i x 1 b 标准的f i f o 调度方式。该进程会一直运行,直到它发生i o 阻塞而 释放c p u ,或者有一个实时优先级更高的实时进程在等待运行。 s c h e dr r 表示该进程是一个实时进程,对它的调度遵守p o s i x i b 的r r 调度规则。该进程有一个时间片,时间片用完之后就使用相同的实时优先级将 该进程放到s c h e df i f o 与s c h e d r r 队列的未必术尾。 s c h e d u l e ( ) 函数是在文件k e m e l s c h e d c 中实现的,其函数流程图如图2 所示。 p r e v 2c u r r e n t ; t h i s _ e p u 2p r e v p r o c e s s o r ; 上 i f ( i n _ i n t e r r u p t ( ) ) 给出错误提 示并返回l i i f ( s o f l i r q _ a c t i v e ( t h i s _ c p u ) & s o f l i r q _ m a s k ( t h i s _ c p u ) ) d o _ s o f l i r q o ; 上 如果当前进程为r r 进样,且时间片结束,则重 新计算时间片,并将当前进程择剑r r 队列尾部 j 在所有就绪队列中,根据g o o d n e s s ( ) 所计算的值选 取优先级晟高的任务,并将其地址赋予n e x t 指针 0 将c p u 的页表切换剑任务n e x t 的页表 上 s w i t c h _ t o ( p r e v , n e x t ,p r e v ) ; 士 s c h e d u l e 0 返同,执行凋度剑的进捌 i 划2s c h e d u l e o 流科 s c h e d u l e ( ) l 函l 数首先确认当前任务的a c t i v e _ m m 指针非空,然后将p r e y 指针 置为当前任务,并取得当前任务运行的c p u 号。 调度函数然后判断当前指令是否在中断处理函数中运行,如果是则立即返 回,如果不是则继续以下处理。 调度程序随后释放全局内核锁与全局中断锁,并判断系统中是否存在软件 中断,如果有软中断发生则先处理软中断。 调度程序接着从就绪队列中选取一个最合适的任务,即g o o d n e s s ( ) 返回值最 高的任务,并将n e x t 指针指向该任务,随后调用s w i t c h t o ( ) i 垂l 数完成进程的上下 文切换。g o o d n e s s ( ) i 垂t 数的计算充分考虑了上述进程调度策略。 3 3 2 s w i t c ht o 函数实现 在a r ml i n u x 的实现中,s w i t c h _ t o 的定义为: # d e f i n es w i t c h , t o ( p r e v , n e x t ,l a s t ) d of l a s t = s w i t c h _ t o ( p r e v , n e x t ) ;、 m b 0 ; ) w h i l e ( 0 ) 其中的关键函数蔓bs w i t c h _ t o ( p r e v , n e x t ) ;该函数是用汇编语苦实现的 e n t r y ( _ _ s w i t c h _ t o ) l :s t m f d s p ! ,( r 4 一s l ,f p ,i r 2 :m r si p ,c p s r 3 :s t r i p ,【s p 群- 4 】1 4 :s l rs p ,【r 0 ,# t s s s a v e 】 5 :i d rs p “r l ,# t s s s a v e 】 6 :l d rr 2 ,【r l ,# t s s d o m a i n 】 7 :l d ri p ,f s p l ,# 4 8 :r n c r p l 5 ,0 ,r 2 ,c 3 ,c o 9 :m s rs p s r , i p l o :l d m f d s p ! , r 4 一s l ,f p ,p c “ 上面第1 行程序将大部分寄存器保存在栈中,3 保存s v c 状态的机器状态 字c p s r , 4 保存s v c 状态的栈指针,5 恢复保存的s v c 状态的栈指针,8 设旨 域寄存器,9 将保存c p s r 的恢复到s p s r 中,1 0 恢复以前保存的其它寄存器。 以上函数是a r m 系列c p u 进程上下文切换的过程,在切换过程中将当前 进程的任务环境保存到任务结构中,然后从需要切换到进程的任务结构中恢复 任务环境。在a r m 中,c p u 的任务环境包括寄存器r 4 r i5 ,c p s r 、s p s r 等。 3 4 内存管理 本节分析l i n u x 的内存管理机制,这里我们只涉及内核的内存管理部分, 由g c c 库程序实现的用户程序部分的内存管理机制本节不做分析。 l i n u x 内核提内存内存管理分为两个层次:基于页面的内存管理与基于c a c h e 的内存管理。基于页面的内存管理是内核内存管理的基础,它为系统其他部分 提供了页面分配与释放界面,即所谓的g f p 函数;丽基于c a c h e 的内存管理则 为内核其他部分提供了方便与统一的存储功能界面,并具有很高的性能。本节 将重点介绍l i n n x 基于c a c h e 的内存管理,即块分配器( s l a ba l l o c a t o r ) ,这是现 代u n i x 操作系统常用的内存管理技术。 3 4 1 基于页面的内存管理部分 基于页面的内存管理是l i n u x 内核内存管理模块的基本部分,它主要提供 了两部分功能: 为内核其他部分提供基于页的内存分配与释放接l j 实现所谓的虚拟内存 j t # 6 0 摹于页而的内存管理主要是在m m p a g e a l l o c e 与m m v m s c a nc 中文蚍的。 l i n u x 页面管理部分所提供的g p f 函数界面主要有: u n s i g n e dl o n g _ g e t f r e e _ p a g e s ( i n tg f p _ m a s k ,u n s i g n e dl o n go r d e r ) : u n s i g n e dl o n gg e t _ z e r o e d _ p a g e ( i n tg f p m a s k ) ; v o i df r e e _ p a g e s ( u n s i g n e dl o n ga d d r ,u n s i g n e dl o n go r d e r ) ; 一g e t - f r e e _ p a g e s ( ) 函数有两个参数,g f p m a s k 参数说明贝t f u5 n 勺力, 常用值有g f p k e r n e l 与g f p a t o m i c ,使用前者时当系统资源不足时可能 会引起进程调度,而当系统资源恢复可用后最分配,而后者则不会引起进程调 度,当系统资源不足时直接返回0 。c r d e r 参数表示所需要申请的页面数,所申 请的页面数量为2 的o r d e r 次方。函数返回值是系统为内核分配的页面的在虚地 址。 g e t z e
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 网架结构工程施工监测方案
- 设备安装工程安全管理培训方案
- 农村道路改造提升项目初步设计
- 氯乙烯项目投资计划书
- 市政工程绿色施工管理实施方案
- 涂料车间5S管理制度
- 园林绿化数字化巡检管理制度
- 2026年广东人保考试模拟试卷带答案
- 2026年宁夏高校毕业生三支一扶招募4500人笔试备考模拟试题及参考答案
- 综合管廊防水施工专项方案
- 2026中国邮政联合校园招聘笔试参考题库(含答案解析)
- (一模)嘉兴市2026-2027学年第一学期高三教学质量检测语文试卷(含答案)
- 2026中国洗衣干衣行业市场现状需求分析投资布局发展策略研究文献
- 2027年湖北交通投资集团有限公司秋季校园招聘131人笔试备考题库及答案解析
- 2026山东青岛水务集团有限公司招聘笔试历年参考题库附带答案详解
- 2026年党支部基层总结报告
- T∕CCEAS008-2026 建设工程造价咨询成果文件质量标准
- 2018 机械通风冷却塔 第1部分:中小型开式冷却塔
- 中国膀胱癌诊疗指南2025版
- 梅尼埃病前庭功能检测
- 凉山2025年四川凉山州雷波重点国有林保护局招聘27人笔试历年参考题库附带答案详解
评论
0/150
提交评论