(计算机应用技术专业论文)嵌入式操作系统μclinux剖析与研究.pdf_第1页
(计算机应用技术专业论文)嵌入式操作系统μclinux剖析与研究.pdf_第2页
(计算机应用技术专业论文)嵌入式操作系统μclinux剖析与研究.pdf_第3页
(计算机应用技术专业论文)嵌入式操作系统μclinux剖析与研究.pdf_第4页
(计算机应用技术专业论文)嵌入式操作系统μclinux剖析与研究.pdf_第5页
已阅读5页,还剩95页未读 继续免费阅读

(计算机应用技术专业论文)嵌入式操作系统μclinux剖析与研究.pdf.pdf 免费下载

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

文档简介

武汉理工大学硕士学位论文 摘要 随着现代计算机技术的飞速发展和互联网技术的广泛应用,人类社会从p c 时代过渡到了以个人数字助理、个人电脑和信息家电为代表的3 c ( 计算机、通 信、消费电子) 一体的后p c 时代。在后p c 时代里,嵌入式系统扮演着越来越 重要的角色,被广泛应用于信息电器、移动计算机设备、网络设备和数控仿真 等领域。嵌入式系统的开发必将成为未来i t 行业的技术热点【7 】 ”。 嵌入式操作系统 a c l i n u x 是专门为没有存储器管理部件的微处理器而设计 的,l a c l i n u x 由于其代码的开放性、系统的稳定性、强大的网络功能以及优秀的 文件系统支持,在嵌入式设备中得到了广泛的应用。 本文从p c l i n u x 的基本架构出发,对p c l i n u x 操作系统作了深入的探讨,分 析了p c l i n u x 的c 运行库、进程管理、内存管理、文件系统,最后介绍了其在嵌 入式方面应用的有关知识,重点分析了其在进程管理方面的实现原理及方法。 本论文以p c l i n u x 操作系统内核2 6 x 版本为基础,对其各部分源代码做了深入 研究。全文共分为七个章节: 第一章主要确立课题的研究内容,并对l a c l i n u x 操作系统的基本知识作了分 析与引入;第二章重点介绍了p c l i n u x 操作系统的基本架构、启动过程以及其运 行时间库p c l i b c ,从总体上把握p c l i n u x ;第三章详细介绍了i a c l i n u x 进程管理 有关的知识,重点分析了l a c l i n u x 的进程有关各数据项,通过有关函数调用的分 析对进程的创建、状态转换及终止作了深入研究,然后分析了l a c l i n u x 进程调度 器以及进程同步的相关部分,并对2 6 版本与2 4 版本的进程管理做了对比研究; 第四章介绍了p c l i n u x 内存管理,针对没有m m u 的特点,对p c l i n u x 内存管理 的实现过程做了详细分析,章节的最后对l a c l i n u x 与标准l i n u x 的内存管理作了 对比研究;第五章针对l a c l i n u x 操作系统在嵌入式领域应用的特点,对嵌入式系 统中常用的文件系统作了分析和介绍,尤其根据v f s 文件系统的源代码重点剖 析了v f s 文件系统的实现原理和方法:第六章对l _ l c l i n u x 在嵌入式领域的应用 相关知识作了介绍,并重点对p c l i n u x 的移植过程做了分析;第七章对本论文做 了总结和展望,指出了p c l i n u x 的发展前景和p c l i n t t x 对于国内软件业的发展的 重大际遇。 关键字:p c l i n u x ,p c l i b c ,嵌入式系统,进程管理,内存管理,文件系统 武汉理工大学硕士学位论文 a b s t r a c t w i t ht h ed e v e l o p m e n to f t e c h n o l o g yi nc o m p u t e ra n dt h ea p p l i c a t i o no f h t e r n e t , w ea r eg o i n gi n t ot h ep o s t - p ca g ea f t e re x p e r i e n c i n gt h ep ca g e 。i nw h i c hp d a ( p e r s o n a ld i g i t a l a s s i s t a n t ) ,p c a n d i a ( i n f o r m a t i o n a p p l i a n c e ) a l e t h e l e a d e r i n t h ef i e l do f 3 c ( c o m p u t e r ,c o m m t m i c a t i o na n dc o n s u m e ) 。i nt h ea g eo f p o s t - p c , e m b e d d e ds y s t e mp l a y sam o r ea n dm o r ei m p o r t a n tr o l ea n di sw i d e l ya p p l i e dt o i n f o r m a t i o na p p l i a n c e ,m o b i l ed g v i c e ,n e t w o r kd e v i c ea n dn u m e r i c a lc o n t r o l e m u l a t o r ,e t e 。i t ss u r et h a t t h ed e v e l o p m e n to f e m b e d d e ds y s t e mw i l lb et h ef o c u so f r r i n t h e f u t u r e 。 p c l i n u x ,t h ee m b e d d e ds y s t e m , i sd e s i g n e df o rt h em i c r o p r o c e s s o rw i t h o u t m m u t e c h n i c a l l y 。p c l i n u x f o l l o w s t h e g p l ( g e n e r a l p u b l i c l i c e n s e ) a n d i t ss o i i w :e c o d e si sf r e e 。f o rt h el 般k q o no fi t sw e l ls t a b 嘶,s t r o n gs u p p o r 曲gn e t w o r ka n df i l e s y s t e m ,l l c l i n u xi sa p p l i e dw i d e l yi nt h ee m b e d d e dd c v i 渊。 f r o mt h eb a s i ca r c h i t e c t u r eo fp c l i n u xo n ,t h i sp a p e ra n a l y z e st h ep c l i n u x o p e r a t i n gs y s t e mi nd e t a i l ,a n di 招c o n t e n t si n c l u d ec n m t i m el i b r a r yp c l i b c ,p r o c e s s s c h e d u l i n g ,m e m o r ym a n a g e m e n t ,f i l es y s t e ma n do t h e r sr e l a t e dt oa p p l i c a t i o no f e m b e d d e ds y s t e m ,a n da m o n gt h e mt h ep r o e m ss c l i e d u l m gi st h em o s ti m p o r t a n t t h e a n a l y s i si sb a s e d0 1 1t h es o u r c ec o d e so f t h ev e r s i o n2 6 xo f p c l i n n x 。t h ep a p e ri s c o m p o s e do f s e v e nc h a p t e r s c h a p t e ro n et e l l st h em a i nc o n t e n to ft h i sp a p e ra n di n t r o d u c e st h ea b ca b o u t t h ee m b e d d e do p e r a t i n gs y s t e mp c l i n u x 。c h a p t e rt w oi n t r o d u c e st h ep c l i n u xb a s i c a r c h i t e c t u r e ,t h es t e p so f b o o t i n ga n dp c l i b c ,a n dg i v e sa no u t l i n eo f t h ee m b e d d e d s y s t e mp c l i n u x 。c h a p t e rt h r e ei n 仃o d u c e st h ek n o w l e d g ea b o u tp r o c e s ss c h e d u l i n g , s p e c i a l l yt h er e l a t e df i e l d so fap r o c e s sa n da n a l y z e st h ep r o c e s sa b o u tc r e a t i o n , w a n s i t i o na n dd e a t hi nd e t a i la n di nt h ee n do ft h i sc h a p t e r ,c o m p a r e st h ep r o c e s s s c h e d u l i n gb e t w e e nt h ev e r s i o n2 6a n dv e r s i o n2 4 。c h a p t e rf o u ri n t r o d u c e st h e m e m o r ym a n a g e m e n tu n d e rh a v i n g1 1 0m m u ,a n a l y z e st h ei m p l e m e n t a t i o no f m e m o r ym a n a g e m e n to fp c l i n u xa n df i n a l l yc o m p a r e st h em e m o r ym a n a g e m e n t 武汉理工大学硕士学位论文 b e t w e e ns t a n d a r dl i n u xa n dp c l i n u x 。c h a p t e rf i v ei n g o d u c e st h ec o m l n o nf i l e s y s t e m sb a s e do i lt h ea p p l i c a t i o no fe m b e d d e ds y s t e ma n da n a l y z e st h ep r i n c i p l eo f v f st h r o u g hi t st h es o u r c ec o d e s 。c l 1 a :p t e rs i xi n t r o d u c e st h ek n o w l e d g ea b o u t d e v e l o p m e mo fe m b e d d e ds y s t e ma n da n a l y z e st h ep o r t i n go fl a c l i n u xs p e c i a l l y 。 c h a p t e rs e v e ni sr e g a r d e da sas u m m a r yo ft h ef u l lt h e s i s ,t e l l i n gt h eb l u c p r i mo f p c l i n u xa n di n d i c a t i n gp c l i n u xi st h eo p p o r t u n i t yo f s o f t w a r ei nc h i n a 。 k e y w o r d s :l a c l i n u x ,p c l i b c ,e m b e d d e ds y s t e m , m a n a g e m e n t ,f i l es y s t e m 1 1 1 武汉理工大学硕士学位论文 1 1 研究背景 第1 章绪论 随着计算机技术的发展和微处理器工艺的改进,价格低廉、功能强大、结 构小巧的c p u 和外设为嵌入式设备提供了稳定可靠的硬件架构,从而快速地促 进了嵌入式系统的发展,目前嵌入式系统被广泛应用到网络、手持通信设备、 国防军事、消费电子和自动化控制等各个领域。 嵌入式系统的广泛应用前景和发展潜力使其成为2 1 世纪的应用热点之一。 嵌入式系统通常是面向特定应用的【“。它与p c 上的应用系统不同,嵌入式系统 在于结合微处理器或微控制器的系统电路与其专属的软件,来达到系统操作效 率与成本的最高比。随着后p c 时代的来临,家电、玩具、汽车、新一代手机、 数码相机、先进的医疗仪器乃至于即将到来的智能型房屋、智能型办公室、以 及其他与电有关的器材设备更是缺少不了嵌入式系统这个核心技术。 从八十年代起,国际上就有一些r r 组织、公司,开始进行商用嵌入式系统 和专用操作系统的研发。这其中涌现了一些著名的嵌入式操作系统,如m i c r o s o f t 公司的w i n c e 和w i n d r i v e r 公司的v x w o r k s 就分别是非实时和实时嵌入式操作 系统的代表 2 】。但是商用产品的造价都十分昂贵,用于一般用途将提高产品成本 从而失去竞争力。 与此同时,全球每年生产的c p u 数量大概在二十亿颗左右,其中大部分是 应用于专用性很强的各类嵌入式系统。大部分嵌入式系统为了减少系统复杂程 度、降低硬件开发成本和运行功耗,在硬件设计中取消了内存管理单元( m m u ) 模块 3 1 4 j 。最初,运行于这类没有m m u 的c p u 之上的都是一些很简单的单任 务操作系统,或者更简单的控制程序,甚至根本就没有操作系统而直接运行应 用程序。在这种情况下,系统无法运行复杂的应用程序,或者效率很低,并且 所有的应用程序需要重新开发,还要求开发人员十分了解硬件特性。这些都阻 碍了不含m m u 的嵌入式产品开发的速度和应用水平。p c l i n u x 作为当前开放源 代码的嵌入式操作系统,专门针对没有m m u 的c p u 而设计,并且为嵌入式系 统做了许多小型化的工作,在全球嵌入式l i n u x 市场领域所占份额一路飙升,根 武汉理工大学硕士学位论文 据l i n u x d e v i c e s c o r d 网站2 0 0 6 年的调查结果显示,嵌入式l i n u x 在全球嵌入式 市场中所占份额为4 5 4 ,在所有嵌入式操作系统中占据第一位,遥遥领先于其 它嵌入式操作系统,与此同时,在所有嵌入式l n i u x 系统版本中,嵌入式p c l i n u x 占第二位 5 】。 因此对嵌入式操作系统p c l i n u x 进行深入剖析和研究,深入了解其内部架 构,对于进一步做好嵌入式系统的研究和学习有重要作用。 1 2 嵌入式系统操作系统p c l i n u x 1 2 1p c l i n u x 简介 p c l i n u x 是一个g n u 的项目,被设计用在微控制应用领域,其代码完全开 放【6 】m 。 c l i n u x 专门针对没有m m u ( m e m o r ym a n a g e m e n tu n i t ) 的处理器设计, 支持多任务,具有完备的t c p i p 协议栈并支持多种网络协议。p c l i n u x 支持多 种文件系统,如r o m f s 、n f s 、e x t 2 、j f f s 、m s d o s 及f a t l 6 3 2 等。实际上, p c l i n u x 已经成功应用于路由器、网络摄像机、机项盒、p d a 等诸多领域 8 1 。 1 9 9 8 年1 月p c l i n u x 发行第一版,该版本基于p a l mp d a 实现;1 9 9 9 年2 月份成功移植到m o t o r o l a 的c o l d f i r e 系列处理器m c f 5 2 0 6 和m c f 5 3 0 7 :p c l i n u x 发行至今已经历多个版本,目前p c l i n u x 支持包括a r m 、m i p s 、s h 、6 8 k 、x 8 6 甚至s p a r c 等高性能处理器,并在6 0 个以上基于这些处理器的开发平台成功 实现【8 】。 1 2 2p c l i n u x 的特点 p c l i n u x 是针对控制领域的嵌入式l i n u x 操作系统,它从l i n u x 内核派生而 来,沿袭了主流l i n u x 操作系统的绝大部分特性。适合不具各内存管理单元 ( m m u ) 的微处理器或微控制器。没有m m u 是p c l i n u x 与标准l i n u x 的基本 差掣9 1 。 标准l i n u x 是针对有m m u 的处理器设计的。在这种处理器上,虚拟地址被 送到m m u ,把虚拟地址映射为物理地址。通过赋予每个任务不同的虚拟物理 地址转换映射,支持不同任务之问的保护【“。 2 武汉理工大学硕士学位论文 对l a c l i n u x 来说,其设计针对没有m m u 的处理器,不能使用处理器的虚拟 内存管理技术。但p c l i n u x 仍然采用存储器的分页管理,系统在启动时把实际存 储器进行分页,在加载应用程序时程序分页加载。但是由于没有m m u 管理, 所以实际上p c l i n u x 采用实存储器管理策略。p c l i n u x 系统对内存的访问是直接 的,所以程序中访问的地址都是实际的物理地址【1 1 】【1 2 1 1 3 】。操作系统对内存空间 没有保护,各个进程实际上共享一个运行空间。一个进程在执行前,系统必须 为该进程分配足够的连续地址空间,然后全部载入主存储器的连续空间e e t l 4 1 。 同时,p c l i n u x 有着特别小的内核和用户软件空间,它既没有内存保护,也 没有虚拟内存模型。 1 3 课题研究的主要内容 本课题在跟踪嵌入式操作系统p c l i n u x 不断发展进步的基础上,以当前最稳 定内核版本2 6 x t l 辄1 6 1 1 7 1 8 】为对象,对p c l i n u x2 6 x 进行深入剖析和研究。本文 主要将主要完成如下几个方面的工作n 9 1 【2 0 】【2 1 】i 竭: ( 1 ) 剖析与研究) l c l i m a x 内核基本架构,对其启动过程以及c 运行时间库 p c l i b e 等进行剖析。 ( 2 ) 剖析与研究g c l i n u x 进程管理,通过关键函数的分析了解其实现原理 及o ( 1 ) 调度算法等。 ( 3 ) 剖析与研究l a c l i n u x 内存管理的实现,与l i n u x 内存管理策略相对比, 分析其优劣。 ( 4 ) 剖析与研究p c l i n u x 文件系统,针对嵌入式应用的特点,p c l i n u x 的文 件系统的特殊性。 ( 5 ) l a c l i n u x 应用研究,介绍相关软件开发知识及移植过程。 武汉理工大学硕士学位论文 第2 章基本架构 2 1 a c l i n u x 基本架构 嵌入式操作系统p c l i n u x 主要有三个基本部分组成:引导程序、p c l i n u x 内 核( 由内存管理、进程管理和中断处理等构成) 和文件系统【2 3 】f 2 4 】。其基本架构 如图2 - 1 所示。 图2 - 1p c l i n u x 的基本架构 由图所示结构可以看出,其功能与l i n u x 基本相同,不同的只是对内存管理 和进程管理进行改写,以满足无m m u 处理器的要求。下面对图中主要组成部 分作简要介绍。 ( 1 ) 启动模块 启动模块负责用来启动p c l i n u x 内核,包括c h i ps e l e c t o r 初始化,系统堆栈 初始化,把压缩的p c l i n u x 映像从f l a s h 中解压到r a m 中,并把控制权交给内 核的初始化例程。 ( 2 ) 内核初始化 内核初始化的入口地址是:s t a r t _ k e r n e l ( 在i n i v m a i n c 中) ,它初始化内核 的其他部分,包括异常( t r a p ) 、中断( i r q ) 、内存页( p a g e ) 、调度( s c h e d u l i n g ) 、 4 ilf刮引引llj_11f。,-。【 门目田d 武汉理工大学硕士学位论文 驱动程序等,并启动i n i t 进程进入多任务环境【2 5 1 。 ( 3 ) 系统调用处理异常处理 当i n i t 程序运行后,内核对整个系统的运行不再进行直接控制,而是通过系 统调用给应用程序提供服务和响应外部及内部的异步事件。用户程序如果想得 到系统资源,必须通过系统调用。当用户进程发生中断后,内核获得控制权, 取得系统调用的参数,并调用相应的处理程序,而用户一直被挂起,直至0 内核 完成处理并返回。 ( 4 ) 驱动程序 驱动程序是p c l i n u x 内核的主要组成部分,它们控制着操作系统和外部设备 的交互。p c l i n u x 中驱动程序是可选的,但典型的系统通常包括一个控制台 ( c o n s o l e ) 驱动程序,一个通用串口驱动程序以及一个块设备驱动程序。 ( 5 ) 文件系统 i j c l i n u x 与l i n u x 一样支持多种文件系统,并针对嵌入式系统的特点作了一 些取舍。在p c l i n u x 中,由于硬件资源和使用环境的限制,通常采用的文件系统 有r o m f s 文件系统,虚拟6 山d i s k 、j f f s 文件系统,对于网络设备的系统, 还可以使用n f s 文件系统。 ( 6 ) 内存管理 p c l i n u x 是针对没有m m u 的处理器设计的,不能使用处理器的虚拟内存管 理技术,但仍然采用存储器的分页管理,系统在启动时把实际存储器进行分页。 在加载应用程序时程序分页加载。但是由于没有m m u 管理,所以实际上p c l i n u x 采用实存储器管理策略,这种策略导致用户程序和内核以及其他用户程序在同 一个地址空间,所以要在开发时就考虑程序间的安全保护问题。 ( 7 ) 进程管理 1 1 c l i n u x 不支持m m u ,这对它的多进程管理造成了一定的影响。在标准 l i n u x 中,父进程用系统调用f o r k 来创建子进程,子进程是父进程的精确拷贝, 父子进程拥有各自的地址空间,从f o r k 调用后同时开始运行。标准l i n u x 中的 f o r k 操作是非常高效的,这主要是由于采用了写拷贝( c o p yo i lw r t e ) 技术,这 种技术依赖于m m u 的支持,因而无法用于l a c l i n u x 。在l a c l i n u x 中,所有进程 共享一个全局的地址空间,f b r k 产生的子进程中的指针仍然指向父进程中的数 据。基于以上两点原因,l a c l i n u x 取消了f o r k 操作。标准l i n u x 还可以用系统调 用v f o r k ( v i r t u a lf o r k ) 来创建进程,但其语义和f o r k 是不同的。在v f o r k 调用之 武汉理工大学硕士学位论文 后,父进程将自己的内存空间租借给子进程,即父子进程占据同一块内存区域, 父进程在v f o r k 调用之后开始睡眠,直到子进程调用e x c c 或e x i t ,内核才将内存 空间返还给父进程,并将之唤醒。v f o r k 不涉及整个地址空间的数据复制,且不 会产生子进程中的指针指向父进程中的数据这样的问题,因此它的语义更加适 合于l a c l m u x 环境。事实上,l a c l i n u x 正是采用基于v f o r k 的进程创建方案。需 要指出的是,由于v f o r k 调用之后父子进程共享同一块内存区域,子进程必须尽 快的调用e x e c ( e x i t ) ,并且在v f o r k 和e x ( e x i t ) 之间不修改父进程的数据, 也不破坏父进程的堆栈环境,否则极易引起系统崩溃【2 酗。另外,大量现代的应 用程序( 如许多网络服务程序) 依靠f o r k 的语义来提高系统的吞吐率和缩短响 应时间,它们必须经过适当的修改才能在p c l i n u x 上运行。 ( 8 ) 运行时间库 运行时间库( cr u n t i m el i b ) 提供了用户程序和内核程序的接口,它和内 核共同决定了系统的性能。l a c l i b e 就是经过裁减后的适用于嵌入式设备的c 运 行时间库。它由g n ug l i b c 库移植而来。除了去掉了大部分不适合嵌入式系统的 代码以外,还对应用程序的入口代码,系统调用的a p i ,输入输出过程等进行了 修改,并增加了对平板存储器结构的支持。 2 2p c l i n u x 启动过程 根据内核是否压缩以及内核是否本地执行,p c l i n u x 通常有两种启动方式: f l a s h 本地执行方式和压缩内核加载方式。第二种方式是将内核的压缩映像固化 到f l a s h 上,系统启动时在内存中解压,然后在内存中执行,这种启动方式较之 第一种方式运行速度更快。 | l c l i n u x 系统启动过程可以总结为三个阶段: ( 1 ) b 0 0 t l o a d e r 初始化阶段; ( 2 ) p c l i n u x 内核初始化阶段; ( 3 ) p c l i n u x 加载引导完成,启动i n i t 进程。 2 2 1b o o t l o a d e r 初始化 b o o t l o a d e r 是在操作系统内核或用户应用程序运行之前运行的一段小程序, 通过这段小程序,可以初始化硬件设备、建立内存空间的映射图,从而将系统 武汉理工大学硕士学位论文 的软硬件环境带到一个合适的状态,以便为最终调用操作系统内核或用户应用 程序准备好正确的环境。在本质上,b o o t l o a d e r 不属于操作系统内核,它采用汇 编语言编写,依赖于具体的硬件实现,因此针对不同的c p u 体系结构,这一部 分代码不具有可移植性 2 7 1 ,在移植操作系统时,这部分代码必须加以修改。这 部分的代码实现主要在文件a r c h 3 8 6 k e m e l h e a d s 中。 概括来讲,b o o t l o a d c r 在系统启动时主要完成以下几项工作: ( 1 ) 将操作系统内核从f l a s h 复制到s d r a m 中,如果是压缩格式的内核, 还要进行解压缩; ( 2 ) 改写系统的m e m o r ym a p ,原先f l a s h 起始地址映射为0 地址,此时需 要将r a m 的起始地址跌射为0 ; ( 3 ) 设置堆栈指针并将b s s 段清零,以备以后执行c 语言程序和调用子函 数时使用; ( 4 ) 改变p c 值,使得c p u 开始执行真正的操作系统内核。 2 2 2 ) a c l i n u x 内核初始化 b o o t l o a d 日程序执行完上述各项操作后,通过跳转指令j i 印s t a r tk e r n e l 转移 到i n i t m a n c 文件中的函数s t a r tk e r n e l ( ) 开始操作系统内核初始化。 s t a r tk e r n e l 0 完成一系列初始化的工作【2 8 】: ( 1 ) p r i n t k ( ) ,显示 l c l i n u x 内核的版本信息。 ( 2 ) s e t u p _ a r c h ( ) ,做与体系结构相关的初始化工作。 ( 3 ) p a r s ea r g s ( ) ,解析传递给内核的参数。 ( 4 ) 们p - i 血( ) ,设置系统异常的入口点。 ( 5 ) i n i t _ i r q ( ) ,初始化系统中断服务。 ( 6 ) r 沁h r ai n i t ( ) ,初始化系统调度器。 ( 7 ) m f l i r qi n i t ( ) ,初始化系统软中断。 ( 8 ) t i m e _ i n i t ( ) ,初始化时钟、定时器。 ( 9 ) c o n s o l ei n i t ( ) ,初始化控制台。 ( 1 0 ) m e a li n i t ( ) ,初始化内存。 ( 1 1 ) k m e mc a c h e _ i n i t ( ) ,初始化内核c a c h e 。 ( 1 2 ) c a l i b r a t e _ d e l a y ( ) ,校准,进入时延校准循环。 ( 1 3 ) f o r k _ i n i t ( ) ,建立u i d c a c h e ,并根据系统内存大小确定最大进程数目。 7 武汉理工大学硕士学位论文 ( 1 4 ) b u f f e r i n i t ( ) ,初始化块设备缓冲区。 ( 1 5 ) c h c c k _ b u g s ( ) ,检查体系结构漏洞。 2 2 3 启动i n i t 进程 函数s t a r t _ k e r n e l ( ) 运行结束之后,基本的a c l i n u x 核心环境就确立了,在 s t a l lk e r n e l ( ) 函数的最后调用i n i t ( ) 函数,开始启动i n i t 进程。i n i t ( ) 函数 作为核心线程,将会首先锁定内核( 仅对s m p ( s y m m e t r i cm u l t i p r o c e s s o r ,对 称式多处理器) 系统有效) ,然后调用d ob a s i cs e t u p ( ) 来完成外部设备及其驱 动程序的加载。 在d o _ b a s i cs e t u p ( ) 函数调用完成后,会返回i n i t ( ) ,待释放了初始化内 存段( 由函数f r e ei n i u n a n ( ) 完成) 函数所用的内存空间并给内核解锁以后, i n i t ( ) 将打开d e v c o n s o l e 设备,并重定向s t d i n 、s t d o u t 和s t c l 廿 r 到控制台,最 后,搜索文件系统中的i n i t 程序( 或者由i n i t = 命令行参数指定的程序) 并使用 c x o c v c ( ) 系统调用加载执行i n i t 程序。此时,p c l i n u x 内核的初始化工作全部 完成,开始用户态进程的初始化工作。 2 3p c l i n u x 系统的运行时间库p c l i b c 分析 p c l i n u x 早期使用的c 运行库是1 j c 1 i b c ,它是基于l i n u x 8 0 8 6c 库的源码 开发的。虽然这是一个相对比较完善的c 运行库实现,但仍然有许多不足,比 如有些a p i 是非标准的,尤其有相当多的常用c 库程序并没有设计出来,当时 的设计追求就是小而精,一般情况下,p c 1 i b c 能稳定的支持m 6 8 0 0 0 、c o l d f i r e 以及不带m m u 的a r m 架构。u c 1 i b c 设计过程中,尽力去迎合当时的众多标 准,而且其a p i 也尽量更多的与1 i b c 库兼容,但最终是事与愿违。 p c l i b c 正是为了解决前述的问题而设计出来的,它修正了所有的a p i 标准, 补充了许多遗漏的程序,而且能够被移植到更多的体系架构中去。p c l i b c 能够 提供西i b c ( g n uc 库) 一样的兼容性,这使得它的应用程序的移植变得很容易, 但体积却比g l i b c 小很多,以当前p c l i b c 最新版本为例,其基本c 语言函数库仅 为3 0 3 k ,而通常g l i b c 为1 4 m 左右。为了达到更紧凑的目的,在众多的有m m u 支持的平台上也能够被编译为共享库。 武汉理工大学硕士学位论文 2 3 1 用户程序的入口 用户程序般从m a i n 开始口明,其入口点是c 运行库的一部分。这部分代码 执行初始静态数据,并将参数a r g c 和a r g v 传递到m a i n 函刻刈。参数和环境变 量一般根据宏程序s t a r t _ t h r e a d ( 在i n c l u d e p r o c p r o c e s s o r h 中定义) 的调用约定, 放在寄存器或者堆栈中。系统调用s y s利用建立一个虚拟环e x e c v e s t a r tt h r e a d 境,程序入口代码可以把s t a r t _ t h r e a d 所建立的环境恢复出来,并调用文件 u c l i b c l i b c m i s c i n t e m a l s u c l i b cm a i l l c 中的u c l i b cm a i n 。在u c l i b cm a i n 中再调用用户程序的m a i n 。宏s t a r tt h r e a d 的定义如下: # d e f i n es t a r tl l l r e a d ( r e g s ,n we i p ,n e w _ e s p ) d o 、 a s m ( ”m o v lo d ) ,缸;m o v l 0 ,铲”:y ( 0 ) ) ; 、 - t _ f s ( u s e r _ d s ) ; r e g s - x d s2 _ _ u s e r _ d s ; 、 r e g s 榴= _ _ u s e r _ d s ; 、 r e g s - t ;= v s e rd s ; 、 r e 爹- x c s = u s e rc s ; r c g s - e i p = n e weip;| ”g s - 卸2 n e we s p ; ) w h i l e ( o ) 2 3 2 用户程序的堆和栈分配 用户程序通过调用m a l l o c 从堆( h e a p ) 中分配内存。在标准l i n u x 中由于 有虚拟存储器,支持分段存储,所以可以在堆的最高端到栈的最低端之间留有 很大的虚拟空间用作堆空间的扩展。但p c l i n u x 为平面存储系统,没有虚拟空间, 所以堆空间改用m m a p 调用来分配。在 _ l c l i b c 中,内存分配算法非常简单直接, 存储器的管理完全依靠内核的页机制来完成。参照图2 2 所示。 武汉理工大学硕士学位论文 高端地址 d o o o 删 ( 虚拟地 址) 虚拟间隙 高端地址 0 0 e a - 6 0 0 0 ( 物理地 址) 低端地址 o o c g - 0 0 0 0 ( 物理地 址) 【) 虞拟存储( b ) 平扳存储 图2 2 虚拟存储与平板存储 从图2 - 2 中可以看出,堆栈与静态数据物理上相连,因此它们必须要有足够 的空间以防止覆盖静态数据和代码。标准l i n u x 程序中可以通过在堆和栈之间留 有足够大的空间同时监控页的使用情况来防止堆栈溢出,而p c l i n u x 中由于没有 内存保护机制,在程序链接时必须合理设定堆栈的大小来防止堆栈溢出。 2 3 3 用户程序的执行文件格式 p c l i n u x 系统使用f l a t 可执行文件格式,可以使用e l i 2 f l t 工具把e l f 格式的 可执行文件转化为f i a t 文件。当用户执行一个应用时,内核的执行文件加载器 ( f s b i n f m t _ f l a t c ) 将对f l a t 文件作进一步处理,主要是对代码段和数据段进行 修正。之所以要修正,是因为应用程序在链接时并不知道它要在系统哪一段地 址上面运行,这就要求程序在任何地址上都要能运行,也就是说与地址无关。 这个特性由针对p c l i n u x 的编译器和连接器来提供。 2 3 4 用户程序的执行 用户编写的c 程序由m a i n 函数开始执行,之所以如此,是由运行时间库 p c l i b c 决定的,一般用户用c 语言开发时会调用一些库函数,编译成o b j 文件后, 要通过链接程序把库函数的二进制代码链接到程序中,最后形成二进制可执行 文件。在链接过程中,链接器会在用户程序前插入一些初始化代码,这段代码 在u c l i b c l i b c s y s d e p s l i l l l i ) 【c n o s 中。在文件c r t o s 的最后会包含个转移指令 1 0 武汉理工大学硕士学位论文 c a i u c l i b cm a i n ,这条指令使得用户程序都要从m a i n 函数开始执行。 下面以u c i i n u x 中f l a t 格式可执行文件为例,分析m a i n 函数的a r g c ,a r g v 参 数传递过程。首先假设已经将用户程序转换成n a l 格式。在执行程序的时候,操 作系统会调用d o _ e x c c v e ( ) ,该操作将根据文件路径打开文件,装入内存,a r g v 存放命令行参数,e n v p 存放环境变量。装入文件时,系统会根据不同的文件格 式调用不同文件的装入处理程序h a n d l e r ,对于f l a t 格式,系统会调用 l o a de a tb i n a r y ( ) ( 定义在f s b i n f i n t _ f l a t c 中) 。根据所传递的a r g v 、e n v p 等参 数,在函数c r e a t e f i a t t a b l e s 里建立参数表。函数实现代码如下: s 喇ci m s i g n e dl o n gc r e a t ef l a tt a b l e s ( u n s i g n e dl o n gp p , 蚰 u c tl i n u xb i n p r m b p r m ) 严以下6 语句是变量声明,其中a r g c 和c n v c 分别记录前面已经计算出来参 数个数和环境变量参数个数。p :p p 是参数和环境变量数组的指针,s p 是要执行 程序的用户区堆栈。 u n s i g n e dl o o g 娜 c a r p ; 瑚s i 酗d l o n g + s p ; c h a r + p2 ( c h a r * ) p p ; i ma r g c2 b p r m - - a r g c ; 缸e n v c2b i e m - e n v c ; c h a rd u m m y ; 印= ( t m s i g n e ,dl o n g + ) ( ( - ( u n s i g u e dl o n g ) s i z e o f ( c h a r 。) ) & ( u a s i g n e dl o n g ) p ) ; 以下4 语句是一次堆栈调整,首先印移动翩v c + 1 个单位,这e n v c + 1 个单 位空间用来存放一共e n v c 个e n v p o v a v c e n v p - 1 元素的地址,多余一个放0 , 表示e n v p 数组结束。然后s p 再移动a r g c + 1 个单位,留出a r g c + 1 个单位空间, 这a r g c + 1 个单位用来存放a r g c 个a r g v o - a r g v a r g c - 1 】元素地址,多余一个也放 0 ,表示a r g v 数组结束。经过堆栈调整,a r g v 和c n v p 各自指向自己在堆栈中的 位置。如果开始堆栈初值记为i n i l s p ,则现在e n v p = i n i t _ s p - ( 哪c + 1 ) , a r g v = c n v p - ( a r g c + 1 ) a 。 s p 。e n v c + l ;一, e n v p 2s p ; 即。a r g o + l ; a r g v 5 印; 武汉理工大学硕士学位论文 f l a t _ s t a c k _ a l i g n ( s p ) ; ,以下5 语句又是一次堆栈调整,s p 再移动1 个单位,然后将e n v p 放入这 个地址( 此时e n v p = i n i t _ _ s p - ( e n v 叶1 ) ) ,然后又将s p 移动一个单位,将a r g v 写 入,接着将a r g c 写入。 i f ( i l a t _ a r g v pe n v po n _ s t a c k o ) - - s p ;p u tu m ( ( u m i g n * dl o n g ) e n v p ,s p ) ; - s p ;p l l t - u s e ( u n s i g n e dl o n g ) a r g v s p ) ; ) p u t _ u s e r ( a r g c ,唧) ; ,以下1 8 条语句将a r g v o - a r g v a r g c 一1 】( 在p 所指向地方) 依次写入a r g v 所指堆栈区域中,然后再将, n

温馨提示

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

评论

0/150

提交评论