毕业论文-基于CKCore的Android系统之Linux26移植27519.pdf_第1页
毕业论文-基于CKCore的Android系统之Linux26移植27519.pdf_第2页
毕业论文-基于CKCore的Android系统之Linux26移植27519.pdf_第3页
毕业论文-基于CKCore的Android系统之Linux26移植27519.pdf_第4页
毕业论文-基于CKCore的Android系统之Linux26移植27519.pdf_第5页
免费预览已结束,剩余60页可下载查看

毕业论文-基于CKCore的Android系统之Linux26移植27519.pdf.pdf 免费下载

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

文档简介

一基王k = q ! q 的n 盘q 量亟丕统 查l 童坠坠圣至! 鱼整撞 指导教师签名:墨国丝 论文评阅人l : 曼型j 强盗i 5 :盘4 幽犁杰墨 评阅人2 : 评阅人3 : 评阅人4 : 评阅人5 : 委员1 :【叁匠) 望趁3 盔览捷盔纠必族士等 委员2 : z 旦垄皇& 兹垣主扭丝生莹 委员3 : 臼盟! 望教撬逝渔尘量 委员4 : 难盎雾) 曼l 缸授) 墨军塑盘孽 委品5 : 答辩日期: 丛f ! 龛刍d 芝旦 摘要 近年来,随着智能移动终端在人们生活中扮演着越来越重要的角色,智能手机系统日 益火爆。a n d r o i d 是谷歌公司针对嵌入式领域推出的基于l i n u x 内核的操作系统,它依靠 高性能与开放性成为最受瞩目的系统平台之一。c k - c o r e 是杭州中天微系统推出的3 2 位 高性能嵌入式c p u ,是国内成功商业化的嵌入式c p u 之一。为了适应行业趋势,有必要在 c k c o r e 体系上支持a n d r o i d ,其中一个前提与核心问题是l i n u x 2 6 内核的移植实现。 本论文在分析了l i n u x 内核各核心模块原理的基础上,分别研究了各模块的移植接口, 剖析了若干核心技术。包括内存管理、进程管理、信号机制、定时器与中断异常五个移植 点。完整、深刻的描绘了l i n u x 内核模块与体系结构硬件之间的链接层。 通过阅读前人在l i n u x 上所做的经典的剖析,研究l i n u x 源代码,参考其他体系结构 对内核硬件接口的提炼,以及透析c k - c o r e 硬件体系的特性,从中总结出适合于c k - c o r e 体系的对l i n u x 的硬件描述层。 本文中的描述对c k - c o r e 体系是具有可操作性的,同时可以给同类工作者提供参考。 最后,希望通过本文能让大家更加理解操作系统与硬件平台间的联系,从而进一步理解软 件的本质。 关键词:l i n u x 内核,c k - c o r e ,l i n u x 移植,a n d r o i d 系统,c k 6 1 0 m 处理器 a b s t r a c t i nr e c e n ty e a r s ,w i t ht h es m a r tm o b il ed e v i c e sp l a ya ni n c r e a s i n g l yi m p o r t a n t r o l ei np e o p l e sl i v e s ,s m a r tp h o n es y s t e m sa r ei na ni n c r e a s i n g l yp o p u l a rt o o 6 0 0 9 l e sa n d r o i dw a sl a u n c h e df o rt h ee m b e d d e df i e l db a s e do fl i n u xk e r n e l ,i t r elie so nt h eh i g h p e r f o r m a n c ea n da sa no p e np l a t f o r mt ob e c o m eo n eo ft h em o s t p o p u l a rs y s t e m c k - c o r ei sr e d u c e d3 2 一b i th i g h p e r f o r m a n c ec p uf o re m b e d d e df i e l d b yh a n g z h o uc s k ym i c r o s y s t e ml t d 。i ti sas u c c e s s f u lc o m m e r c i a li z a t i o ni nc h i n a b e c a u s eo ft h ei n d u s t r yt r e n d s ,i tisn e c e s s a r yt os u p p o r ta n d r o i ds y s t e mf o r c k c o r e ,a n dt h ep r e m i s e ,a l s ot h ec o r ei s s u e ,i st ot r a n s p l a n tl i n u x 2 6k e r n e l t h i sp a p e rf i r s t l ya n a l y z e st h ep r i n c i p l eo ft h ec o r em o d u l e si nl i n u xk e r n e l , t h e n ,f o c u so nt h em i g r a t i o n si n t e r f a c eo fe a c hm o d u l e ,a l s oa n a l y z e ss o m ec o r e t e c h n o l o g y t h e r ea r ef i v em o d u l e st of o c u so n :m e m o r ym a n a g e r ,p r o c e s sm a n a g e r , s i g n a l i n gm e c h a n i s m ,t i m e r ,i n t e r r u p ta n de x c e p t i o n i tc o m p l e t e l ya n dd e e p l y d e p i c t st h el i n kl a y e rb e t w e e nl i n u xk e r n e lm o d u l e sa n dt h ea r c h i t e c t u r eh a r d w a r e b yr e a d i n gt h ep r e v i o u sc l a s s i cb o o k so fl i n u x ,d e e ps t u d yo ft h es o u r c ec o d e , r e f e r e n c et oo t h e ra r c h i t e c t u r e s i n t e r f a c e st ot h ek e r n e l ,a n dd i a l y s i s c h a r a c t e r i s t i c so ft h ec k - c o r eh a r d w a r e ,w es u m m a r i z e sf o rt h et r a s p l a n t a t i o no f l in u xb a s e do nc k c o r eh a r d w a r e d e s c r i p t i o ni nt h i sa r t i c l ei so p e r a b l ef o rt h ec k c o r eh a r d w a r e ,w h i l em a y b er e f r e n c ef o rf o l l o ww o r k e r s f i n a l l y ,ih o p et h i sa r t i c l ec a nm a k ey o uab e t t e r u n d e r s t a n d i n go ft h ec o n t a c tb e t w e e no p e r a t i n gs y s t e ma n dh a r d w a r ep l a t f o r m , s o a st ou n d e r s t a n dt h ee s s e n c eo ft h es o f t w a r e k e yw o r d s :l i n u xk e r n e l ,c k c o r e ,l i n u xt r a s p l a n a t i o n ,a n d r o i ds y s t e m ,c k 6 1 0 m p r o c e s s o r 图目录 图i i 研究的c k - c o r e 系统框架2 图2 1l i n u x - 2 6 3 0 内核目录结构- 4 图2 2 内存管理之物理内存管理子系统6 图2 3 内存管理之虚拟内存管理系统7 图2 4l i n u x 2 6 的0 ( 1 ) 调度算法示意1 0 图2 5 内核各层次模块示意:1 7 图2 6v f s 在文件系统中的角色1 8 图4 1c k 6 1 0 m 的m m u 虚拟地址映射2 3 图4 2t l be n t r y 2 4 图4 3c k - c o r el i n u x 页表项定义2 s 图4 4 内存使用的实际流程。2 9 图4 5t l b i n v a l i d l 异常处理流程图。3 0 图4 6 _ l i o r e m a p 内部函数调用层次3 2 图4 7 信号处理流程示意3 7 图4 8 执行用户信号处理函数时堆栈变化示意3 8 图4 9 定时器函数调用关系4 4 图4 1 0t i m e i n i t0 处理流程4 5 图4 1 1t i m e r i n t e r r u p t0 处理流程。:4 5 图4 1 2d o g e t t i m e o f d a y0 处理流程4 6 图4 1 3 中断处理流程5 0 图5 1a n d r o i d 架构5 2 表2 1 表4 1 表4 2 表4 3 内核调用t l b 函数接口一3 1 表4 4 地址映射接口函数一3 2 表4 s 进程移植相关函数接口3 5 表4 6 体系结构相关信号处理函数一3 9 表4 7t i m e r 系统接口函数4 4 表4 8t i m e r 板级相关函数接口4 6 表4 9 中断与异常初始化涉及主要数据s 0 表4 1 0 中断与异常系统函数接口5 0 表4 1 1c p u 异常入口函数5 1 致谢 i 摘要一ii 插图和附表清单i 目次 第1 章绪论1 1 1 前言】 1 2 研究目的l 1 3 研究意义2 1 4 论文结构3 第2 章l i n u x 2 6 主要模块解析4 2 1 内存管理6 2 2 进程管理8 2 3 信号机制一1 3 2 4 设备驱动1 6 2 5 文件系统嘲1 8 2 6 内核启动:1 9 第3 章开发环境及测试平台介绍2 l 3 1 开发环境2 1 3 2 测 武平台2 1 第4 章l i n u x 2 6 内核移植2 3 4 1 内存管理2 3 4 2 进程管理3 2 4 3 信号机制3 7 4 4 定时器4 1 4 5 中断与异常4 6 第5 章a n d r o i d 中对l i n u x 的改变5 2 第6 章结论5 5 参考资料一5 6 作者简历5 8 浙江大学硕士学位论文 第1 章绪论 1 1 前言 第1 章绪论 l i n u x 作为一个开源的操作系统,是众多计算机专业人员及爱好者的学习平台。同时, 在商业上,l i n u x 也扮演着越来越重要的角色。毫无疑问,自由、开源是l i n u x 在争夺市 场上的重要优势:然而,它也是一个高性能、高稳定性、高安全性的操作系统,从其在服 务器领域取得的成绩可见一斑。随着u b u n t u 等优秀的桌面系统的出现,l i n u x 在p c 领域 也取得了可观的进步。因此在各个领域,l i n u x 的用户数量都在迅速增长。 随着嵌入式智能设备的持续升温,尤其是以智能手机为代表的移动终端,正逐渐成为 网络用户的主体形态。它们将代表着未来网络最主要的用户群,这些更是给l i n u x 带来 无限的发展机遇与退想空间。近年,日益火爆的a n d r o i d 系统,是g o o g l e 公司向移动领 域进军的主打产品,而a n d r o i d 正是基于l i n u x 内核。以及n o k i a 与i n t e l 合作开发的 m e e g o 系统也是基于l i n u x 。这些正是l i n u x 的自由性、高性能、高可扩展性所带来的效 应。可见,l i n u x 是一套开放的标准,并且紧跟着甚至引领着技术及应用的发展与进步。 1 2 研究目的 c k c o r e 是面向嵌入式系统和s o c 应用的3 2 位高性能低功耗处理器i p 核,目前的产 品有c k 5 1 0 与c k 6 1 0 两大c p u 核系列。为了提高其在嵌入式应用领域的竞争力,可以说对 l i n u x 的支持是不可避免的。更进一步,c k - c o r e 将追随行业的热门与趋势,不断开拓与 提升应用领域,下一步目标就是移动互联网包括手机、平板电脑、互联网t v 等。因 此,a n d r o i d 系统被列入c k - c o r e 的下一个软件平台目标。l i n u x 作为a n d r o i d 系统的操 作系统内核,将是我们切入的首要任务与核心之一。本研究的目的可以参考图1 1 ,简单 的可以描述为:建立l i n u x 内核与c k - c o r e 硬件平台之间的纽带。 浙江大学硕士学位论文第1 章绪论 图1 1 研究的c k - c o r e 系统框架 本课题研究针对c k - c o r e 的c k 6 1 0 m 处理器( 具备m m u ) ,在对l i n u x 2 6 各模块进行 研究剖析的基础上进行内核移植。移植过程涉及大部分的l i n u x 原理:内存管理、进程管 理、信号机制、设备驱动、文件系统以及内核引导等等。在实现相应内核的模块时,我们 针对的是c k 6 1 0 m 的硬件模块,因此可能要提出全新的底层驱动方法。根据硬件特性剪裁 内核,且尽可能的实现代码加速,以最大的发挥c k - c o r e 的效率。 1 3 研究意义 对绝大部分的l i n u x 爱好者与开发者来说,他们都是在现有的l i n u x 已经支持的体系 结构上进行裁剪与配置( 比如最常见的a r m 架构) 。无非是简单的内核功能的配置,更复 杂点则再加上修改过的外围硬件驱动移植,存储设备的变更,应用新的文件系统等。而对 体系结构支持内核的核心部分却可以“不闻不问”。本研究针对的是全新的体系架构 ( c k c o r e ) ,大部分新的外围硬件所构成的硬件平台。在完成这份工作时,l i n u x 的自由 是我们得以成功的重要原因,所以作为回报,本篇文章将与大家来分享整个工作过程。研 究主要有以下几点意义: 1 内核模块原理的学习,包括内存管理、进程管理、信号机制、设备驱动、文件系 统以及内核引导等。 2 剥离出内核各模块对底层硬件的接口,这也是移植的核心工作。 3 在有限的平台资源下,对内核进行调试及测试平台的搭建提供了参考。 浙江大学硕士学位论文 1 4 论文结构 第1 章绪论 绪论之后,第二章对内核主要模块进行了原理分析,这是移植的理论基础;第三章将 介绍代码完成后进行内核调试与测试的平台环境;接着第四章详细介绍各个模块移植的核 心,即内核与体系结构的接口描述;第五章是为a n d r o i d 系统环境下的l i n u x 做简单的区 别分析;最后进行总结。 , 3 浙江大学硬士学位论文 第2 章l i n u x 2 6 主要模块解析 第2 章l i n u x 2 6 主要模块解析 经过多年的积累,l i n u x 内核已然成长为一个庞大的体系,代码量大、复杂、严密, 同时也具有历史的传承性。既然要移植整个l i n u x 内核到c k - c o r e 体系,那么肯定要对内 核原理有较清晰的认识。因此,在进行实际的移植工作之前,本章简要分析l i n u x 2 6 内 核的核心模块。由于篇幅及本人水平所限,本章中只介绍内核各模块的概念,以及笔者认 为的重点。另外,相对于l i n u x 的早期版本,l i n u x 2 6 在多方面进行了更成熟的改进, 也将挑若干进行简要分析,如0 ( 1 ) 调度算法等。 在了解各模块之前,先看看l i n u x 2 6 的代码树,用以对内核结构有个总体的认识, 对各模块代码所在位置,以及移植工作的位置有初步的印象,见图2 1 。 图2 1l i n u x - 2 6 3 0 内核目录结构 l i n u x - 2 6 3 0 中各子目录功能: a r c h 这是比较重要的一个文件夹,移植一个l i n u x 大部分编写的代码都位于这个 目录下。这个目录实现的就是所谓的操作系统的h a l ( 硬件抽象层h a r d w a r ea b s t r a c t l a y e r ) ,和具体硬件平台相关,有部分代码是需要汇编实现。注意,自1 i n u x - 2 6 2 8 版 本之后,原来在i n c l u d e a s m x x x 下与体系结构相关的头文件,都放在了 a r c h x x x i n c l u d e a s m 目录下,定义了平台相关的参数,宏定义和函数原型等,有部分 汇编代码。 d r i v e r s 驱动程序目录,里面是在1 i n u x 内核中实现的设备驱动的代码。包括字符 设备,块设备,以及其他一些具体设备的驱动实现代码。 4 浙江大学硕士学位论文第2 章l i n u x 2 6 主要模块解析 f s 文件系统实现的代码。 k e r n e l 内核核心部分代码,包括进程调度,信号处理,定时器等。 i p c 进程通信部分实现代码,p o s i x 标准定义了进程通信( i n t e r p r o c e s s c o m m u n i c a t i o n ) 接口,这部分是它的实现代码。 m 与平台无关的内存管理( m e m o r ym a n a g e m e n t ) 模块代码,包括分页,s l a b 机制 实现,页交换等,和平台相关的内存管理部分在在a r c h x x x m m 下。x x x 是平台名。 i n i t 系统初始化部分代码。当系统启动后,完成必要的最基本的初始化后( 一般 是一段汇编程序) ,都会跳到位于该文件夹下m a i n c 文件的s t a r t k e r n e l 函数中。这可 以说是l i n u x 内核开始执行地方。m a i n c 是内核最早开始运行地方,实现了整个系统的 初始化。 s c r i p t s 该目录不包含任何核心代码,该目录下存放了用来配置内核的脚本和应用 程序源码。当输入m a k em e n u c o n f i g 之类的命令进行内核配置时,系统会首先编译应用程 序程序的源码,生成可执行文件,然后运行。该可执行文件接着读取当前内核源代码根目 录中生成一个c o n f i g 文件。除此之外,这些脚本还负责提取可执行内核镜像v m l i n u x 的 符号表信息,存入文件s y s t e m m a p 中拱内核调试使用。 b l o c k 实现块设备的基本框架与块设备的i o 调度算法。 u s e r 用来制作一个压缩的c p i o 归档文件:i n i t r d 的镜像,它可以为内核启动后挂 接( m o u n t ) 的第一个文件系统( 一般用不到) 。 n e t 网络协议部分实现的代码。 d o c u m e n t a t i o n 1i n u x - 2 6 内核相关文档。 i n c l u d e 内核代码用到的一些头文件,包括宏定义和函数原型等。和平台无关的定 义都位于i n c l u d e 1 i n u x 中,还有一些库的头文件定义,比如s s l 库,n e t 库,c r p t 库 等,这些也是和平台无关的。 l i b 内核代码中用到的一些库程序的代码。内核中不能使用g l i b c 和u c l i b c 这样 的库程序,这些c 库是给用户程序用的,内核中如果用到类似的代码,就要单独编写。库 程序也是一些经常用到的代码的集合。 c r y p t o 存放相关的加密算法的代码。 s e c t u r i t y 存放安全框架的实现代码。 s o u n d 存放声音系统架构,如o p e ns o u n ds y s t e m ( o s s ) 、a d v a n c e dl i n u xs o u n d s 浙江大学硕士学位论文 a r c h i t e c t u r e ( a l s a ) 的相关代码和具体声卡的设备驱动程序。 2 1 内存管理 第2 章l i n u x 2 6 主要模块解析 内存管理是l i n u x 内核中最核心、也是其最复杂的子系统,其任务是为内核本身以及 用户进程分配与管理内存。操作系统内存管理系统的性能影响了整个系统的性能。 页式内存管理是目前最流行的内存管理方式。物理内存分为固定大小的页( p a g e ,如 4 k b y t e s ) ,内核统筹管理所有页。页对用户进程是透明的,虽然用户进程还是按连续地址 来使用内存,但是这里的内存是虚拟的,且由内核统一管理。因此,内存管理子系统的工 作有两个:一方面管理所有物理页面,就像仓库管理员,仓库里存放该计算机系统所有的 内存;另一方面管理所有用户进程的虚拟空间,也可以比喻为为每一个需要内存的进程配 货。 2 1 1 物理内存管理 本节简要分析l i n u x 分页机制下的物理内存管理。 见图2 2 ,物理内存被按固定大小( 如4 k b y t e ) 分成若干页,对应的每个页用数据结 构p a g e 表示。为便于索引与转换,将所有p a g e 结构的指针存放于全局的数组m e mm a p 中。如此,根据页号( p f n ) 可以换算出页所在物理地址以及得到p a g e 结构,相反,也可 根据p a g e 结构换算出页号与页所在物理地址。 l tn 蒯_ q - - _ - 一 笏笏缪 r p f h - l _ n i p k 霾 - l l o l 曲w i p 辨 o f k l _ i 口 日f 目舻 p o l h c c j m 篇:缓缓缓 i “ f t r t _ f n u l d l r 。、稿0 二l 哆多夕 l | c c m d 2 l l 缸- l 咐f l l r 鲰j m i o 】 一剖t 蛔r 。 l l 图2 2 内存管理之物理内存管理子系统 6 浙江大学硕士学位论文 第2 章l i n u x 2 6 主要模块解析 内核中用伙伴算法来管理与分配物理内存。见图2 2 ,将所有空闲页面经由数组 f r e e _ a r e a 管理,数组每个成员都是一个链表头,指向连续页面的基地址。每个成员所 在的链表的连续页面数为数组索引的2 次幂,即从f r e e _ a r e a 0 到f r e e _ a r e a 1 0 为连续 1 个到连续2 加个空闲页面链表头。内核在分配空闲物理页面时,根据所需页面数量从对 应链表中“抽取”,或者用更大的页面“切分”或小页面“拼合”,并且更新所有链表成员。 2 1 2 虚拟内存管理 虚拟内存是对用户进程而言的,所以针对每一个用户进程,内核都必须为其管理全部 的用户空间( c k - c o r e 体系为o 3 g ) 。 见图2 3 ,每一个用户进程的虚拟内存使用情况都由对应的m m _ s t r u c t 数据结构描述。 其中,进程所使用的虚拟空间都在m m a p 成员所指向的v m _ a r e a _ s t r u c t 结构链表中记录, v m _ a r e as t r u c t 结构记录了该段虚拟空间的起始和终止地址、访问属性等信息。 图2 3 内存管理之虚拟内存管理系统 而内核的物理空间管理与虚拟空间管理是如何建立联系的呢? 答案是页表。再看图 2 3 ,进程的m m _ s t r u c t 结构的成员p g d 指向该进程的页表索引。以二级页表为例,p g d 指向的只是页目录表( p g d ) ,页目录表项指向页表( p t ) ,p t 中的页表项p t e 才是最终指 向一个物理页面。这样页表描述的所有地址空间与进程用户虚拟空间将构成一一对应的关 7 浙江大学硕士学位论文第2 章l i n u x 2 6 主要模块解析 系。 内核将用户进程要访问的虚拟地址通过页表一一对应索引到页表项,由页表项索引到 真正的存储数据的物理地址。而页表项对应的物理页面是通过物理空间管理模块的伙伴算 法获得的。可以看出,页表即是l i n u x 内核物理空间管理与虚拟空间管理的纽带。 2 2 进程管理 可以说,计算机的终极目的就是满足用户的需求,而这种满足往往通过软件( 程序) 的运行及结果反馈来反映。操作系统的作用就是让人们更好的开发与运行软件。在我的理 解中,可以把完成用户需求的过程分为若干独立的任务个体来管理,在操作系统中这每个 任务个体就是进程。进程可以是某个程序,也可以是程序中的某条运行路径。如果放任一 个进程运行,它将占据着整个计算机系统资源,若它因为缺少某个资源将使得整个系统被 迫等待,或者某个紧急任务( 进程) 需要运行时将无法得到及时的响应等。所以操作系统 统一管理系统中的所有进程,即进程管理子系统,进程管理的宗旨就是充分利用系统资源 且最合理的运用系统资源。 l i n u x 中,每个进程有唯一的p i d ( p r o c e s si d ) ,且用进程描述符( 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 u c t ) 的 管理,包括进程调度、进程切换、进程创建、进程消亡等。 2 2 1 进程的内容 一般来说,一个进程拥有以下内容:独立的内核堆栈( 如8 k ) ;一个进程描述符 t a s k s t r u c t ;专用的用户空间;并利用这些资源运行的一个或者多个程序。 在软件系统中,我们通过数据结构来描述事物,下面我们就从进程描述符 t a s k s t r u c t 数据结构( 位于i n c l u d e 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 2 6 中进程有以下几种状态: t a s kr u n n i n g :可运行。 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 i e :睡眠等待。i n t e r r u p t 指软中断, 即信号。前者可被信号唤醒,后者不能。 8 浙江大学硕士学位论文第2 章l i n u x 2 6 主要模块解析 t a s ks t o p p e d :暂停状态。主要用于调试。 t a s kt r a c e d :进程被监控。 t a s k d e a d :死亡状态。进程退出( 调用d o e x i t 0 ) 。 调度信息操作系统根据这个信息公平地决定哪一个进程最需要被运行,且调度它。 身份标识系统中的每一个进程都有一个进程标识符,即p i d ,p i d 只是一个数字。 每一个进程也都有用户和组( u s e ra n dg r o u p ) 的标识符。用来控制进程对于系统中文件 和设备的访问权限。 进程问通信( i p c ) l i n u x 支持传统的u n i xi p c 信号机制,管道以及信号灯 ( s e m a p h o r e s ) ,也支持共享内存、信号灯和消息队列等i p c 机制。 关系链在l i n u x 中,没有一个进程是和其他进程完全无关的。系统中的每一个进程, 除了最初的进程i n i t 之外,都有一个父进程。新进程不是创建的,而是通过拷贝,或者 说从前一个进程克隆的( c l o n e ) 。每一个进程的t a s k s t r u c t 中都有指向它的父进程和兄 弟进程( 拥有相同的父进程的进程) 以及它的子进程的的指针。另外所有的进程都存放在 一个双向链表中,根是i n i t 进程,这个表让l i n u x 可以查到系统中的任何一个进程。 l i n u x 2 6 中,管理方式更加复杂但是快速,这在下一节进程管理中会详述。 时间与计时器在一个进程的生命周期中,内核除了跟踪它所占用的c p u 时间还记录 了其他时间。每一个时间片( c l o c kt i c k ) 过后,内核更新j i f f i e s 中当前进程在系统和 用户态所花的综合时间。l i n u x 也支持进程使用计数器,进程可以使用系统调用创建计时 器,在计时器到期的时候发送信号给自己。这种计时器可以是一次性的,也可是周期性的。 文件系统信息进程可以根据需要打开或者关闭文件,进程的t a s k s t r u c t 结构存 放了每一个打开的文件描述符的指针和指向两个v f s i 节点( i n o d e ) 的指针。每一个v f s i 节点唯一描述一个文件系统中的一个文件或目录,也提供了对于底层文件系统的通用接 口。 第一个i 节点是该进程的根( 它的主目录) ,第二个是它的当前或者说p w d 目录。 虚拟内存信息多数进程都有属于自己的虚拟内存( 内核线程和内核守护进程没有) , l i n u x 内核必须知道这些虚拟内存是如何映射到系统的物理内存中的。这种虚拟与物理内 存的映射通俗的讲,就是进程的页表。 进程上下文进程可以看作是系统当前状态的总和。只要进程运行,它就要使用处理 器的寄存器、堆栈等等。当一个进程暂停的时候,这些进程的上下文、和c p u 相关的上下 文必须保存到进程的t a s k s t r u c t 结构中。当调度者重新启动这个进程的时候,它的上下 9 浙江大学硕士学位论文第2 章l i n u x 2 6 主要模块解析 文就从这里恢复。进程的上下文是每个体系对进程管理的重要工作。 2 2 2 进程的管理 为了有效管理所有进程,内核采用了双向链表将系统中的所有进程链接起来,该双向 链表基于进程描述符中的类型为s t r u c tl i s t _ h e a d 的成员变量t a s k s 。内核中定义了各 种操作用于便利、添加与删除进程。 l i n u x 2 6 中对进程的管理的最大亮点在于其0 ( 1 ) 调度算法,使得系统的可伸缩性极 大提高,大大优化了进程切换的响应速度,同时更好的兼顾了进程调度的公平性。而0 ( 1 ) 调度机制的核心在于采用了新的运行队列。 图2 4l i n u x 2 6 的0 ( 1 ) 调度算法示意 如图2 4 ,按照优先级将进程描述符分组挂在不同的链表中,且将所有链表头按照优 先级从高到低排列在就绪进程数组中,如此即可从该数组索引到所有的可运行进程。而对 应优先级是否存在就绪进程是通过一个位图描述,进程调度时,只要扫描该位图,遇到的 第一个非空点时即找到了对应优先级的链表,从链表头中取出进程作为换入进程即可。 l i n u x 中,进程描述符的队列根据不同的应用需求还有很多,但是这些并不影响我们 对进程管理的理解,而且根据需求的变化,队列种类也在变化,所以就不再详述。 1 0 浙江大学硕士学位论文 2 2 3 进程的创建 当系统启动的时候它运行在内核态,这时,只有一个进程:初始化进程。像所有其他 进程一样,初始进程有一组用堆栈、寄存器等等表示的机器状态。当系统中的其他进程创 建和运行的时候这些信息存在初始进程的t a s k _ s t r u c t 数据结构中。在系统初始化结束 的时候,初始进程启动一个内核线程( 叫做i n i t ) 然后执行空闲循环,什么也不做。当 没有什么可以做的时候,调度程序会运行这个空闲的进程。这个空闲进程的t a s k s t r u c t 是唯一一个不是动态分配而是在内核连接的时候静态定义的,为了不至于混淆,叫做 i n i t t a s k 。 i n i t 内核线程或进程拥有进程标识符1 ,是系统的第一个真正的进程。它执行系统 的一些初始化的设置( 比如打开系统控制它,安装根文件系统) ,然后执行系统初始化程 序。依赖于你的系统,可能是e t c i n i t ,b i n i n i t 或s b i n i n i t 其中之一。i n i t 程序使用e t c i n i t t a b 作为脚本文件创建系统中的新进程。这些新进程自身也可能创建 其它进程。例如:g e t t y 进程可能会在用户试图登录的时候创建一个l o g i n 进程。系统 中的所有进程都是i n i t 内核线程的后代。 新的进程的创建是通过克隆旧的进程,或者说克隆当前的进程来实现的。一个新的任 务是通过系统调用创建的( f o r k 或c l o n e ) ,克隆发生在内核态。在系统调用的最后, 产生一个新的进程,等待调度程序选择它运行。从系统的物理内存中为这个克隆进程的堆 栈( 用户和内核) 分配一个或多个物理的页用于新的t a s k s t r u c t 数据结构。一个进程 标识符将会创建,在系统的进程标识符组中是唯一的。但是,也可能克隆的进程保留它的 父进程的进程标识符。新的t a s k s t r u c t 进入了t a s k 向量表中,旧的( 当前的) 进程 的t a s k s t r u c t 的内容拷贝到了克隆的t a s k _ s t r u c t ( 参见k e r n e l f o r k c d o f o r k 0 ) 。 克隆进程的时候,l i n u x 允许两个进程共享资源而不是拥有不同的拷贝。包括进程 的文件,信号处理和虚拟内存。共享这些资源的时候,它们对应的c o u n t 字段相应增减, 这样l i n u x 不会释放这些资源直到两个进程都停止使用。例如,如果克隆的进程要共享 虚拟内存,它的t a s k s t r u c t 会包括一个指向原来进程的m m _ s t r u c t 的指针, g u l ls t r u c t 的c o u n t 域增加,表示当前共享它的进程数目。 克隆一个进程的虚拟内存要求相当复杂的技术。必须产生一组v ma r e a _ s t r u c t 数据 结构、相应的m ms t r u c t 数据结构和克隆进程的页表,这时没有拷贝进程的虚拟内存。 浙江大学硕士学位论文 第2 章l i n u x 2 6 主要模块解析 这会是困难和耗时的任务,因为一部分虚拟内存可能在物理内存中而另一部分可能在交换 文件中。作为替代,l i n u x 使用了叫做“c o p yo n w r i t e ”的技术,即只有两个进程中 的一个试图写的时候才拷贝虚拟内存。任何不写入的虚拟内存,甚至可能写的,都可以在 两个进程之间共享而不会产生什么害处。只读的内存,例如执行代码,可以共享。为了实 现“c o p yo i lw r i t e ”,可写的区域的页表条目标记为只读,而描述它的v m a r e a _ s t r u c t 数据结构标记为“c o p yo i l w r i t e ”。当一个进程试图写这个虚拟内存的时候会产生p a g e f a u l t 。这时l i n u x 将会制作这块内存的一份拷贝并处理两个进程的页表和虚拟内存的 数据结构。 2 2 4 进程的调度 自愿的调度随时可以进行,一个进程可以通过s c h e d u l e0 启动一次调度。进程的调 度时机与引起进程调度的原因和进程调度的方式有关。在l i n u x 2 6 中,除内核应用主动 调用调度器之外,内核还在应用不完全感知的情况下在以下三种时机中启动调度器工作: 1 从中断或系统调用返回到用户态: 2 某个进程允许被抢占c p u ; 3 主动进入休眠状态。 当进程在用户空间运行时,不管自愿不自愿,一旦有必要,内核就可剥夺其运行权力, 可是一旦进程进入内核空间,内核明知要剥夺该进程的运行,实际却不会发生,一直要到 该进程回到用户空间的前夕才剥夺其运行。 有三种调度策略:s c h e d o t h e r 、s c h e df i f o 和s c h e d r r 。 s c h e d _ o t h e r :普通进程,基于优先级进行调度。 s c h e df i f o :实时进程,实现一种简单的先进先出的调度算法。 s c h e d r r :实时进程,基于时间片的s c h e d f i f o ,实时轮流调度算法。 s c h e d f i f o 与s c h e d r r 的区别是:当进程的调度策略为前者时,当前实时进程将一 直占用c p u 直至自动退出,除非有更紧迫的、优先级更高的实时进程需要运行时,它才会 被抢占c p u ;当进程的调度策略为后者时,它与其它实时进程以实时轮流算法去共同使用 c p u ,用完时间片放到运行队列尾部。 0 ( 1 ) 调度器是以进程的动态优先级p r i o 为调度依据的,它总是选择目前就绪队列中 优先级最高的进程作为候选进程n e x t 。由于实时进程的优先级总是比普通进程的优先级 浙江大学硕士学位论文第2 章l i n u x 2 6 主要模块解析 高,故能保证实时进程总是比普通进程先被调度。 l i n u x 2 6 中,优先级p r i o 的计算不再集中在调度器选择n e x t 进程时,而是分散在 进程状态改变的任何时候,这些时机有: 1 进程被创建时; 2 休眠进程被唤醒时: 3 从t a s k i n t e r r u p t i b l e 状态中被唤醒的进

温馨提示

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

评论

0/150

提交评论