(计算机系统结构专业论文)基于网关安全平台的虚拟线程体系结构.pdf_第1页
(计算机系统结构专业论文)基于网关安全平台的虚拟线程体系结构.pdf_第2页
(计算机系统结构专业论文)基于网关安全平台的虚拟线程体系结构.pdf_第3页
(计算机系统结构专业论文)基于网关安全平台的虚拟线程体系结构.pdf_第4页
(计算机系统结构专业论文)基于网关安全平台的虚拟线程体系结构.pdf_第5页
已阅读5页,还剩48页未读 继续免费阅读

(计算机系统结构专业论文)基于网关安全平台的虚拟线程体系结构.pdf.pdf 免费下载

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

文档简介

华中科技大学硕士学位论文 摘要 多线程机制对于操作系统来说是至关重要的。n c o s 作为一个基于网关安全平 台的专用操作系统,在充分考虑到网关安全操作系统的灵活性和健壮性的同时,却 忽略了一个重要的方面:即如何构造一个高效的、适合于网关平台的多线程机制。 为了解决这个问题,本文提出了一种新的多线程体系结构一一虚拟线程体系结 构( v t s ) 。该体系结构将线程处理虚拟化,使用虚拟接口在线程和内核调度实体之 f h j 建市映射,以便适应不同的操作平台。在保证效率的同时,带来了可移植性和可 | :r 展性的便利。和原有的l i n u x t h r e a d s 相比,v t s 是种更加灵活和高效的构造方式, 能够适应网络协同计算和网关安全平台等关键应用。 对当前的l i n u x t h r e a d s 进行了深入分析,并指出它所存在的缺陷,如复杂而低 效的体系结构、过高的资源占用率、无法与标准兼容等。经过论证并结合网关安全 操作系统的特点,构造出虚拟线程体系结构。 虚拟线程体系结构包括系统整体结构、虚拟线程内核抽象、核心调度算法、虚 拟线程接口、线程同步和互斥机制、以及虚拟线程信号处理等各个部分。描述了各 部分的功能和实现细节。 在n c o s 操作系统的基础上开发出了v t s 的一个实现原型。v t s 的核心是虚 拟线程调度器。描述了线程调度器的工作流程和实现细节,解决了线程创建、线程 - 剧度、线程互斥等关键技术问题。详细设计了包括系统调用和用户函数在内的各种 系统接口。 对v t s 的原型进行了测试。在n c o s 操作系统中,对线程系统的性能进行了测试, 并与原有的l i n u x t b r e a d s 线程库进行对比。测试结果表明,采用虚拟线程结构模型, 线程的创建开销小于传统线程库。线程创建速度为l i n u x t h r e a d s 库的两倍以上。实 践证明,该模型是可行的,并具有较好的性能。 关键词:虚拟线程体系结构,网关,安全操作系统 l 华中科技大学硕士学位论文 a b s t r a c t m u l t i t h r e a d i n gt e c h n o l o g yi s a ne s s e n t i a lc a p a b i l i t yo fm o d e mo p e r a t i n gs y s t e m s a sa r l o p e r a t i n gs y s t e mb a s e do nn e t w o r kc o m p u t i n ge n v i r o n m e n t s ,n c o s ( n e t w o r k c o o r d i n a t e do p e r a t i n gs y s t e m ) i sd e d i c a t e dt ot h ec o n s t r u c t i o no fa n i m p r o v e do p e r a t i n g s y s t e mw i t hh i g hf l e x i b i l i t ya n dr o b u s t n e s s h o w e v e r , o n ei m p o r t a n tt h i n gi sn e g l e c t e d : t h ec o n s i d e r a t i o no fa ne f f i c i e n tm u l t i t h r e a d i n g s y s t e mt h a t i ss u i t a b l ef o rn e t w o r k g a t e w a yp l a t f o r m v i s u a lt h r e a d sa r c h i t e c t u r e ( v t s ) i si n t r o d u c e dt os o l v et h i sp r o b l e m v t si sa m u l t i t h r e a d i n gs y s t e md e s i g n e dt ow o r ko ns p e c i a l i z e do p e r a t i n gs y s t e m so fn e t w o r k g a t e w a y s i ta b s t r a c t st h et h r e a ds c h e d u l i n gm e c h a n i s mb yu t i l i z i n gv i r t u a li n t e r t h c et o m a p b e t w e e nv i r t u a lt h r e a d sa n dr e a lk e r n e ls c h e d u l i n ge n t i t i e s t h u si tc o m e sw i t ht h e f e a t u r e so fs c a l a b i l i t ya n dp o r t a b i l i t yw i t h o u tl o s i n gi t s p e r f o r m a n c e a l s oi t c a nb e a d a p t e dt o v a r i o u sp l a t f o r m s c o m p a r e dw i t ht h el i n u x t h r e a d sl i b r a r y , v t si sm o r e e f f i c i e n ta n df l e x i b l e ,a n dc a nb eu s e dt of u l f i l lt h ec r i t i cc o m p u t i n ge n v i r o n m e n t ss u c h a sn e t w o r kc o o r d i n a t e dc o m p u t i n go rs e c u r en e t w o r k g a t e w a yp l a t f o r m s a ni n t e n s i v ea n a l y s i so fc u r r e n tl i n u x t h r e a d sl i b r a r yi sp e r f o r m e dt od e d u c et h e t h e o r yo fm u l t i t h r e a d i n gm e c h a n i s m b a s e do nt h ea n a l y s i s ,f l a w so f l i n u x t h r e a d sa r e r e v e a l e d ,s u c ha st h ec o m p l i c a t e da n dl o we f f i c i e n ta r c h i t e c t u r e ,h i g ho v e r l o a do fs y s t e m r e s o u r c e s ,f a i l u r et ok e e pc o m p a t i b l ew i t hp o s i xs t a n d a r d ,e t c a f t e rt h i s ,t h ec o n c e p t i o n o fv i r t u a lt h r e a d sa r c h i t e c t u r ei sp r o p o s e d i nt h ec o n s e q u e n tc h a p t e r s ,v a r i o u sc o m p o n e n t so fv i r t u a lt h r e a d sa r c h i t e c t u r ea r e d e s c r i b e di n d e t a i l s ,i n c l u d i n g i t so v e r a l l s t r u c t u r e ,v i r t u a lt h r e a d i n ga b s t r a c t ,c o r e s c h e d u l i n ga l g o r i t h m ,v i r t u a l t h r e a d s i n t e r f a c e ,t h r e a d ss y n c h r o n i z i n g a n dm u t u a l e x c l u d i n g ,a n d v i r t u a lt h r e a d s s i g n a l i n g ,a s w e l la st h ei n t e r n a ld e t a i l so fe a c h c o m p o n e n t af u n c t i o n a lp r o t o t y p eo fv t si sp r o d u c e db a s e do nt h en c o s o p e r a t i n gs y s t e m t h ec o r eo fv t si st h ev i r t u a lt h r e a ds c h e d u l e r t h ei n t e r n a l sa n di m p l e m e n t a t i o no ft h e v i r t u a lt h r e a ds c h e d u l e ra r ed e s c r i b e d k e yt e c h n o l o g i e sa r ea n a l y z e da n di m p l i m e n t e d , i n c l u d i n gt h ec r e a t i n go f t h r e a d s ,t h r e a ds c h e d u l i n g ,a n d t h r e a dm u t u a le x c l u d i n g t e s t i n gr e s u l t sa r ep r o v i d e d a ni m p l e m e n t a t i o no f v t s p r o t o t y p ei st e s t e da g a i n s t t h el i n u x t h r e a d sl i b r a r yb a s e do nt h en c o s o p e r a t i n gs y s t e m a c c o r d i n g t ot h et e s t i n g l i 华中科技大学硕士学位论文 r e s u l t s ,b ya d o p t i o no f v t ss y s t e m ,t h ec r e a t i o nt i m eo fl a r g en u m b e ro ft h r e a d si sf a r s h o r t e rt h a nt h a to fl i n u x t h r e a d s t h r e a d s c r e a t i n gs p e e di s a tl e a s t2t i m e ss a m ea s l i n u x t h r e a d sl i b r a r y t h et e s t i n gr e s u l t sp r o v e dt h a tv t si sf e a s i b l ea n do fb e t t e r p e r f o r m a n c e k e y w o r d s :v i r t u a lt h r e a d sa r c h i t e c t u r e ,n e t w o r kg a t e w a y , s e c u r eo p e r a t i n gs y s t e m i i i 独创性声明 本人声明所呈交的学位论文是我个人在导师指导下进行的研究工作及取得 的研究成果。尽我所知,除文中已经标明引用的内容外,本论文不包含任何其他 个人或集体己经发表或撰写过的研究成果。对本文的研究做出贡献的个人和集体, 均已在文中以明确方式标明。本人完全意识到本声明的法律结果由本人承担。 一躲膨落 日期:矽牛年如月讲日 学位论文版权使用授权书 本学位论文作者完全了解学校有关保留、使用学位论文的规定,即:学校 有权保留并向国家有关部门或机构送交论文的复印件和电子版,允许论文被查阅 和借阅。本人授权华中科技大学可以将本学位论文的全部或部分内容编入有关数 据库进行检索,可以采用影印、缩印或扫描等复制手段保存和汇编本学位论文。 保密口,在年解密后适用本授权书。 本论文属于 不保密甾。 ( 请在以上方框内打“”) 学位论文储签名厉 唿 日期:知9p 年“月胡日 指导教师签名骞之建 日期:乙砰年峰月乡。日 华中科技大学硕士学位论文 1 绪论 1 1 研究背景 在网络安全设备中,网关操作系统已经得到了长足的发展。目前的网关设备已 经很少采用通用操作系统。最主要原因是:通用操作系统由于过多地和用户交互, 造成响应的迟缓,以及过高的资源占用率。最理想的方案是采用专用操作系统或经 过定制的安全操作系统。 在网关安全操作系统中,为了适应具体的应用环境,操作系统的相关部分通常 都会被大幅度改写。例如在n c o s 操作系统中,网络报文处理的相关部分已经被改 写以提高性能。文件系统和存储系统的改造也正在进行中。多线程机制的改造将随 着内核的改造同步进行。 山于l i n u x 的开放源码特性,l i n u x 被广泛应用于服务器和网关操作系统。 n c o s 操作系统采用经过定制的l i n u x 操作系统。线程机制采用未经修改的 l i n u x t h r e a d s 2 】线程库。但是l i n u x t h r e a d s 自身存在诸多缺陷。 由于l i n u x 内核在本质上不支持线程,因此l i n u x t h r e a d s 创建的线程并不是真 正意义上的线程【3 】。其创建方法最终仍然是调用内核的f j r k 系统调用。用这种方式 实现的线程,虽然具备多线程的特点,例如多处理器并发运行和数据共享,但它的 线程切换丌销实际是和进程是一样的,需要内核参与,因而开销并没有减小很多。 而且线程实际上是进程,在很多方面还存在问题,例如不同线程的进程标识号不一 致,多线程程序的执行优先级要比单线程的要高,线程之间的同步比较复杂,等等。 具体来说,l i n u x t h r e a d s 的不足主要表现在: ( 1 ) 性能 性能是l i n u x t h r e a d s 的最主要问题。如前所述,l i n u x t h r e a d s 所创建的线程并 不是真正意义上的线程,而是一种叫做“轻量级进程”的特殊进程,因此它并不能 真正利用线程调度灵活、开销小的特点。当大量线程被创建的时候,这种模式的多 线程机制并不能从根本上减轻系统负担。 除此之外,管理线程的存在也是影响系统性能的重要因素。l i n u x t h r e a d s 采用 1 华中科技大学硕士学位论文 ,个叫做管理线程的特殊线程来管理所有的用户级线程。当一个进程创建第一个线 程的时候,管理线程被自动创建,并负责管理该进程所属线程的创建和注销。管理 线程通过管道与其它线程进行通信,由此容易成为瓶颈;同时,管理线程又负责用 户线程的清理工作,因此,尽管管理线程已经屏蔽了大部分的信号,但一旦管理线 程死亡,用户线程结束后将不能得到清理,线程创建等请求也将无法得到处理。 ( 2 ) 进程数限制 由于每个l i n u x 线程对应到一个进程,因此每个线程都要占用内核的一个进程 描述表项。而进程描述符表的大小是受到c p u 限制的。在x 8 6 中,g d t 表项的数 目不超过8 1 9 2 个,这使得系统的进程总数受到限制,同时意味着线程总数也将受到 唰样的限制。尽管可以用软件的方法绕过这一限制,但是当线程大量繁殖的时候仍 然盒消耗巨大的资源。另外,按照p o s i x 定义,同一进程的所有线程应该共享同一 个进程i d ,这在目前的l i n u x t h r e a d s 模型下也是无法实现的。 ( 3 ) 信号处理问题 山于异步信号是内核以进程为单位分发的,而l i n u x t h r e a d s 的每个线程对内核 来说都是一个进程,且没有实现线程组的概念,因此,这些信号都被分发到每个具 体的线程。而按照p o s i x 标准 4 l ,多线程系统应该实现向进程中所有线程发送信号。 除此之外,某些信号的缺省动作难以在现行体系上实现,比如s i g s t o p 和 s i g c o n t ,l i n u x t h r e a d s 只能将一个线程挂起,而无法挂起整个进程。 ( 4 ) 同步问题 l i n u x t h r e a d s 中的线程同步很大程度上是建立在信号基础上的。例如在条件等 待时,当一个线程就绪后必须用信号通知等待线程。这种通过内核信号进行同步的 机制,会造成较大的延迟,并进一步影响效率。 由于存在上述这些问题,l i n u x t h r e a d s 线程库并不是网关操作系统的首选。如 何对现有的多线程机制进行改造、研究出一种更高效的线程体系,是一个亟待解决 的旧l 题。 1 2 国内外研究状况 因为l i n u x t h r e a d s 存在的诸多的问题,严重阻碍了l i n u x 上多线程的广泛应用。 所以l i n u x 平台多线程技术的发展一直比较迟缓。l i n u x t h r e a d s 由x a v i e rl e r o y 于 1 9 9 6 年玎发完成,并一直沿用至今。虽然后来有许多组织机构开发出了替代的线程 华中科技大学硕士学位论文 库,但是其应用范围都没有超越l i n u x t h r e a d s 。 目日口关于l i n u x 线程库的研究中,比较成熟的有两个项目:一个是r e d h a t 公司 的n p t l ( n a t i v ep o s i xt h r e a dl i b r a r y ) pj ,另一个则是i b m 开发的n g p t ( n e x t g e n e r a t i o np o s i xt h r e a d i n g ) 6 1o 二者都是抛弃现有的l i n u x t h r e a d s 机制重新设计的, 并且在目标上都是完全兼容p o s i x1 0 0 3 1 c 标准,同时在核内和核外实现。这两种 模型都在一定程度上弥补了l i n u x t h r e a d s 的缺点。 ( 1 ) n p t l n p t l 仍然采用1 :l 的线程模型,并配合g l i b c 和最新的l i n u x 内核在信号处理、 线程同步、存储管理等多方面进行了优化。和l i n u x t h r e a d s 不同,n p t l 没有使用 管理线程,核心线程的管理直接放在核内进行,这也带了性能的优化。 n p t l 的主要设计目标是p o s i x 兼容性和低运行开销,以及与l i n u x t h r e a d s 的 兼容。因为l i n u x 核心的问题,n p t l 仍然不是1 0 0 p o s i x 兼容的,但就性能而 高相埘l i n u x t h r e a d s 已经有了很大程度上的改进。 ( 2 ) n g p t n g p t 由i b m 组织开发,也是一个开放源码项目。n g p t 是基于g n up t h 项目 而实现的m :n 模型,而g n up t h 是一个经典的用户级线程库实现。 在n g p t 中,每个用户级线程并不对应到每个系统进程,而是采用多对多的对 应方式。属于同一个进程的线程,由进程内部的调度器进行调度。由于调度不需要 进入内核,因此速度很快。对于优先级高的线程,可以绑定到一个内核线程,由内 核进行调度。这种实现方式结合了用户级线程和内核级线程的优点,因此在理论上 说具有最好的性能。但实际上由于具体实现的原因,性能会有一些损失。 日前n g p t 的稳定版是2 2 o 。考虑到n p t l 日益广泛地为人所接受,为避免不 同的线程库版本引起的混乱,n g p t 已经停止了新版本的开发。 ( 3 ) f r e e b s d k s e f r e e b s d 的内核调度实体( k s e ) 7 - 8 1 是一个基于s c h e d u l e ra c t i v a t i o n s 9 q o 】结构 的内核多线程体系。s c h e d u l e r a c t i v a t i o n 由t h o m a s e a n d e r s o n 等人于1 9 9 1 年提出, 是一个关于内核线程调度的结构体系。这个结构体系影响了很多多线程内核的设计, 其中包括m a c h 3 0 、n e t b s d 和商业版本d i g i t a l u n i x ( 现在叫c o m p a q t m e 6 4 u n i x ) 。 它的实质是在使用用户级线程调度的同时,尽可能地减少用户级对核心的系统调用 请求,而后者往往是运行开销的重要来源。采用这种结构的线程机制,实际上是结 3 华中科技大学硕士学位论文 合了用户级线程的灵活高效和核心级线程的实用性。最新版本的f r e e b s d 已经实现 了s c h e d u l e r a c t i v a t i o n s 的原理,并且在不断完善中。 ( 4 ) 对新的网络设备的支持 在目前的通用操作系统中,操作系统技术的发展己经日臻完善,多线程技术也 已经没有很大的优化空间。但是在网关安全操作系统、嵌入式操作系统等专用操作 系统领域,多线程技术尚有很大的发展余地。 在当前的网络安全设备中,采用多个处理器的硬件平台越来越多。多处理器平 台和专用处理器平台逐渐成为研究的主流。在当前,采用c o m p a c t p c i i 】、a s i c 、 v i a e 1 2 j 、s m p l ”1 、n p “】等硬件技术的网络设备已经开始普及,具备多线程功能的多 线程处理器| :1 5 j 也已经出现,例如i m e l 的超线程处理器【1 6 - 1 7 1 。在硬件相关的多线程研 究中,有两个重要的研究方向:一个是多线程技术与多处理器的支持【”1 ;另一个是 多线程处理器与操作系统多线程机制的结合。可以预见,在不久的将来,采用多个 处理器、使用专用操作系统的网关安全设备必将成为主流。多线程技术也必将有更 r 阔的发展空间。 1 3 主要研究内容 在本文后续的章节中,将深入研究现有的l i n u x 线程机制及其所存在的缺点。之 后,将提出一种更加高效的网关安全操作系统多线程模型一一虚拟线程体系结构, 设计并实现其原型,最后对性能进行分析。具体地说,本课题主要进行以下几个方 面的工作: ( 1 ) 分析当前的多线程实现机制及其缺陷。 ( 2 ) 提出虚拟线程体系结构的概念。 ( 3 ) 深入研究多线程的实现机制,设计v t s 的系统结构和各部分的实现细节。 这一步将包含复杂的工作。主要内容是确定内核调度的策略,以及关键的核心数据 结构、虚拟线程接口等。 ( 4 ) 在n c o s 操作系统基础上实现虚拟线程体系结构的原型,分析并测试其性 能。 4 华中科技大学硕士学位论文 2 l i n u x t h r e a d s 的实现机制分析 当前的n c o s 操作系统采用l i n u x t h r e a d s 线程库。本章将详细分析l i n u x t h r e a d s 的实现机制,然后在分析的基础上指如l i n u x t h r e a d s 线程库所具有的缺陷。 2 1 多线程技术概述 在操作系统的发展过程中,并行多进程的概念首先被引入操作系统领域,成为 现代操作系统的一个首要特征。相对进程而言,线程是一个更加接近于执行体的概 念,它可以与同进程中的其他线程共享数据,但拥有自己的栈空间,拥有独立的执 ,亍序列。在单进程的基础上引入多进程,是为了提高作业的并发度,充分利用计算 机资源;在串行程序基础上引入多线程是为了进一步提高程序的并发度,从而提高 程序运行效率和响应时i i 自j 。 线程和进程类似,同样由内核按时间分片进行调度和管理。在单处理器系统中, 内核使用时间分片来模拟线程的并发执行,这种方式和进程的相同。而在多处理器 系统中,如同多个进程,线程实际上是物理并发执行的。 线程是一个早在6 0 年代就被提出的概念。线程是提高系统性能和响应速度的有 力手段【旧l 。但是直到8 0 年代中期,多线程技术才被真正应用到操作系统中去。s o l a r i s 是这方面的佼佼者。传统的u n i x 也支持线程的概念,但是在一个进程中只允许有一 个线程,这样多线程就意味着多进程。现在,多线程技术已经被许多操作系统所支 持,包括w i n d o w s n t ,当然,也包括l i n u x 。 2 1 1 多线程技术的优点 对于大多数合作性任务,多线程比多个独立的进程更加优越。这是因为,线程 共享相同的内存空间。不同的线程可以存取内存中的同一个变量。这使得线程之间 的通信变得异常简便。对比多进程之间的进程间通信,就会看到其中的优势。对于 多个进程来说,虽然有许多不同种类的本地i p c i 2 0 1 ( 进程间通信机制) ,但它们都遇 到两个重要障碍: ( 1 ) 强加了某种形式的额外内核开销,从而降低性能; 5 华中科技大学硕士学位论文 ( 2 ) 对于大多数情形,i p c 增加了程序的复杂性。 由于上述原因,多进程并不是编写网关服务器程序的理想选择。虽然有多种技 术用来提高程序并行度以提高性能【2 m 4 1 ,但是由于过多的资源占用,当客户请求成 倍增加的时候,服务器资源很快会被消耗殆尽。同时复杂的进程间通信机制也往往 对服务器的稳定性和安全造成威胁。 线程则完全不同。使用多线程的理由之一是和进程相比,它是一种非常“节俭” 的多任务操作方式。我们知道,在l i n u x 系统下,启动一个新的进程必须分配给它 独立的地址空间,建立众多的数据表来维护它的代码段、堆栈段和数据段,这是一 种昂贵的多任务工作方式。而运行于一个进程中的多个线程,由于所有的线程都驻 留在同一内存空间,p o s i x 线程无需进行开销大而复杂的长距离调用。只要利用简 单的同步机制,程序中所有的线程都可以读取和修改已有的数据结构。而无需将数 捅经由文件描述符转储或挤入紧窄的共享内存空间。 不仅如此。线程同样还是非常快捷的。与标准f o r k ( ) 系统调用相比,线程可以 以檄小的丌销复制出大量的线程1 2 ”。由于内核无需单独复制进程的内存空间和文件 描述符等等,这样就节省了大量的c p u 时间,使得线程创建比新进程创建快上十 剑一百倍。因为这一点,可以大量使用线程而无需太过于担心带来的c p u 或内存 4 i 足。使用f o r k ( ) 时导致的大量c p u 占用也不复存在。这表示只要在程序中有意 义,通常就可以创建线程。 当然,和进程一样,线程能够在多c p u 上并行运行。这意味着,在采用多c p u 的系统中,多线程技术能够充分发挥每个c p u 的计算能力。特定类型线程程序( 尤 其是c p u 密集型程序) 的性能将随系统中处理器的数目几乎线性地提高。 在我们的网关安全设备中,由于系统忙于进行数据包的分解、计算和转发,因 此属于c p u 密集型的应用。同时,网关设备的存储器等资源都非常有限。因此,设 法减少应用程序的开销,提高操作系统的性能,就变得至关重要。 2 1 2 多线程模型分类 p o s i x 标准规定了操作系统应该实现的多线程接口标准。但是不同的操作系统 对多线程机制的具体实现则多种多样。由于多线程接口是操作系统向用户提供的标 准接口,因此多线程机制的实现通常涉及到操作系统内核和用户级函数库两个部分。 根据线程的实现方式,线程模型可分为:核心级线程、用户级线程和混合线程 华中科技大学硕士学位论文 模型。分类的标准主要是线程的调度者在核内还是在核外。前者更利于并发使用多 处理器的资源,而后者则更多考虑的是上下文切换开销。在目前的商用系统中,通 常都将两者结合起来使用【2 ,既提供核心线程以满足s m p 系统的需要,也支持用 线程库的方式在用户态实现另一套线程机制,此时一个核心线程同时成为多个用户 念线程的调度者。正如很多技术一样,混合通常都能带来更高的效率,但同时也带 来更大的实现难度。出于简单的设计思路,l i n u x 从一开始就没有实现混合模型的 计划,但它在实现上采用了另一种思路的混合。 在实际的操作系统中,有些是在内核支持线程的,例如w i n d o w s n t 【2 “,s o l a r i s : 而有些操作系统是不提供内核对线程的支持的,例如l i n u x 。操作系统对多线程机 制的支持力度,从根本上影响了线程模型的实现。在线程模型的具体实现上,可以 存操作系统内核上实现线程,也可以在核外实现。前者显然要求在内核支持线程, 而后昔则不需要。完全在核外实现多线程,调度也在用户态完成,就是单纯的用,二 级线程模型。 当内核既支持进程也支持线程时,就可以实现线程。进程的多对多模型,即个进 程的某个线程由核内调度,而同时它也可以作为用户级线程池的调度者,选择合适的 用户级线程在其空间中运行。这就是前面提到的混合线程模型口”,既可满足多处理机 系统的需要,也可以最大限度的减小调度开销。绝大多数商业操作系统( 如d i g i t a lu n i x 、 s o l a r i s 、i r i x ) 都采用的这种能够完全实现p o s i x l 0 0 3 1 c 标准的线程模型。 在核外实现的线程又可以分为“一对一”( 一个核心进程对应一个线程) 、“多对 一”两种模型,前者用一个核心进程( 也许是轻量进程) 对应一个线程,将线程调 度等同于进程调度,交给核心完成。而后者则完全在核外实现多线程,调度也在用 户念完成。后者就是前面提到的单纯的用户级线程模型的实现方式,显然,这种核 外的线程调度器实际上只需要完成线程运行栈的切换,调度开销非常小,但同时因 为核心信号( 无论是同步的还是异步的) 都是以进程为单位的,因而无法定位到线 程,所以这种实现方式不能用于多处理器系统 2 9 1 和并行处理体系结构3 0 1 ,而这个 需求正变得越来越大。 2 1 3 多线程技术应用 在线程方面做得比较好的操作系统有w i n d o w sn t 2 0 0 0 和s u ns o l a r i s 。对于 w i n d o w sn t 2 0 0 0 ,它们本身就是以线程为基础进行任务调度的,性能较好比较正常。 华中科技大学硕士学位论文 s u ns o l a r i s 的线程实现则是混用了用户空间的线程和进程基础的线程的,使用多个进程 运行更多的线程,因此可以综合利用多处理器的优点和在进程内部切换线程的优点。 l i n u x 内核只提供了轻量级进程的支持瞄“,限制了更高效的线程模型的实现, 但l i n u x 着重优化了进程的调度开销,一定程度上也弥补了这一缺陷。目前最流行 的线程机制l i n u x t h r e a d s 所采用的就是线程一进程“一对一”模型,调度交给核心, 而在用户级实现一个包括信号处理在内的线程管理机制。 此外,当前的多线程技术应用的一个特点是越来越多地同硬件相结合。例如基 于r 刑广展处理器的体系结构【3 2 】、基于硬件的推测执行算法 3 3 _ 3 4 】、基于超线程技术的 多线稷处理等。在多处理器和分布式处理领域【弧3 7 1 ,多线程技术正在发挥着越来 越多的作用。在嵌入式应用领域口,多线程技术也在迅速普及。 2 2 轻量级进程 最初的l i n “内核并不支持线程。所有的调度都是以进程为单位进行的 3 9 】。随 着多处理机( s m p ) 技术的发展,多线程也迅速发展成熟。为了在内核提供对线程 的支持,l i n u x 引入了“轻量级进程”的概念。 2 2 1 轻量级进程的实现 轻量级进程也是通过进程复制产生的。与普通的f o r k 调用不同,在产生轻量级 进程的时候,并不复制父进程的所有资源,而是指定子进程和父进程共享程序正文 等资源,这样就减少了正文复制的开销,能够在很大程度上提高性能。 在l i n u x 内核中,轻量级进程是调用c l o n e 系统调用产生的,并且可以用不同 的参数指定创建轻量进程还是普通进程。在内核中,c l o n e 0 调用经过参数传递和解 释后会调用d o _ f o r k o ,这个核内函数同时也是f o r k ( ) 、v f o r k o 系统调用的最终实现: i n td o _ f o r k ( u n s i g n e dl o n gc l o n e _ f l a g s ,u n s i g n e dl o n gs t a c k _ s t a r t , s t r u c tp t r e g s + r e g s ,u n s i g n e dl o n gs t a c k _ s i z e ) 其中的c l o n ef l a g s 就是复制进程的选项,指定需要共享何种类型的资源。主要 的选项定义为: c l o n ev m :表示父子进程共享内存; c l o n ef s :表示父子进程共享文件系统信息,包括根目录、当前工作目录等。 c l o n ef i l e s :共享打开文件表; 华中科技大学硕士学位论文 c l o n e _ s i g h a n d :共享信号处理例程; 在d of o r k 0r 1 1 ,不同的c l o n e _ f l a g s 将导致不同的行为,对于l i n u x t h r e a d s ,它 使用( c l o n e v mic l o n e f s l c l o n ef i l e s ic l o n e s i g h a n d ) 参数来调用 。l o n e n 创建线程,表示共享内存、共享文件系统访问计数、共享文件描述符表,以 及共享信号处理方式。 2 2 2 进程共享资源 进程之间共享资源,是l i n u x 轻量级进程的基本原理,也是l i n u x 实现线程支 持的基础。进程共享资源有如下几种方式。 2 2 2 1 共享内存 在复制进程的时候,d o _ f o r k ( ) t 需要n j f f c o p y _ m m ( ) 函数来设置t a s k s t r u c t 中的 m m 和a c t i v em m 项,n n + m ms t r u c t 数据与进程所关联的内存空间相对应。如果 d of o r k f l 时指定了c l o n ev m 选项,c o p y _ m m 0 将把新的t a s k _ s t r u c t 中的m m 和 a c t i v em m 设置成与c u r r e n t 的相同,同时增加该m m _ s t r u c t 的引用计数 ( m r f ls t r u c t 一 m mu s e r s ) 。也就是说,轻量级进程与父进程共享内存地址空问。图 2 1 显示了内核的t a s k _ s t r u c t 结构与i m n _ s t r u c t 结构的紧密联系。 图2 1 进程的t a s k _ s t r u c t 结构 华中科技大学硕士学位论文 2 2 2 1 共享文件系统信息 t a s ks t r u c t 中利用f s ( s t r u c t f ss t r u c t + ) 记录了进程所在文件系统的根目录和当 前目录信息,d o _ f o r k o 时调用c o p y _ f s o 复制了这个结构;而对于轻量级进程则仅增 加如一 c o u n t 计数,与父进程共享相同的f ss t r u c t 。也就是说,轻量级进程没有独立 的文件系统相关的信息,进程中任何一个线程改变当前目录、根目录等信息都将直 接影响到其他线程。 2 2 2 1 共享文件描述符表 当指定了c l o n ef i l e s 选项时,子进程将和父进程共享打开文件表。一个进 程所打丌的文件结构信息,在进程结构t a s ks t r u c t 中利用f i l e s 域( s t r u c tf i l e ss t r u c t + f i l e s ) 来保存。d o f o r k ( ) 中调用c o p y _ f i l e s 0 来文件描述符表。当复制轻量级进程的 时候,子进程与父进程是共享该结构的,c o p y时仅增加 。 计数。这 一共享使得任何线程都能访问进程所维护的打_ 开f i l 文e s 件( ) ,对它们f i 的l e 操s 作 c 会o t m 直t 接反映到 进程中的其他线程。 2 2 2 1 共享信号处理函数 每一个l i n u x 进程都可以自行定义对信号的处理方式。在t a s ks t r u c t 一 s i g 中使 用一个s t r u c tk结构的数组来保存该进程的信号处理例程。d o中的_sigaction f o r k ( ) c o p es i g h a n d 0 负责复制该信息;轻量级进程不进行复制,而仅仅增加 s i g n a ls t r u c t 一 c o u n t 计数,与父进程共享该结构。也就是说,子进程与父进程的信号 处理方式完全相同,而且可以相互更改。 d of o r k ( ) 中所做的工作很多,在此不详细描述。对于s m p 系统,所有的进程f o r k 出来后,都被分配到与父进程相同的c p u 上,一直到该进程被调度时才会进行c p u 选择。尽管l i n u x 支持轻量级进程,但并不能说它就支持核心级线程,因为l i n u x 的线程和进程实际上处于一个调度层次,共享一个进程标识符空间,这种限制使得 不可能在l i n u x 上实现完全意义上的p o s 线程机制,因此众多的l i n u x 线程库实 现尝试都只能尽可能实现p o s i x 的绝大部分语义,并在功能上尽可能逼近。 2 3 l i n u x t h r e a d s 的实现机制 l i n u x t h r e a d s 是目前l i n u x 平台上使用最为广泛的线程库,o 日x a v i e rl e r o y 负责丌 华中科技大学硕士学位论文 发究成,并已绑定在g l i b c 中发行。它所实现的就是基于核心轻量级进程的“一对 一”线程模型,一个线程实体对应一个核心轻量级进程,而线程之间的管理在核外 函数库中实现。 2 3 1 线程数据结构 l i n u x t h r e a d s 定义了一个t ) t h r e a d _ d e s c r _ s t r u c t 数据结构来描述线程,并使用全局 数组变晏一t h r e a d _ h a n d l e s 来描述和引用进程所辖线程。在j t h r e a d _ h a n d l e s 的前 两项,l i n u x y h r e a d s 定义了两个全局的系统线程:d t 虹e a di n i t i a lt h r e a d 和 j t h r e a d _ m a n a g e r _ t h r e a d ,并用_ j o t h r e a d _ m a i n _ t h r e a d 表征j t h r e a dm a n a g e r _ t h r e a d 的父线程( 初始为p t h r e a d。_ i n i t i n t h r e a d ) s t r u c t p t h r e a d是个双环链表结构,所在_descr s t r u c t p t h r e a dm a n a g e rt h r e a d 的链表仅包括它一个元素,实际上,p t h r e a d是一个特殊线程,_naanagerthread l i n u x t h r e a d s 仅使用了其中的e r r l 2 0 、pp i d 、pp r i o r i t y 等三个域。而 _ 2 t h r e a d _ m a i n _ t h r e a d 所在的链则将进程中所有用户线程串在了一起。经过一系列 p t h r e a dc r e a t e ( ) 之后形成p t h r e a dh a n d l e s 数组。如图2 2 所示: 图2 2 _ _ p t h r e a d _ h a n d l e s 数组 新创建的线程将首先在_ _ p t h r e a d _ h a n d l e s 数组中占据一项,然后通过数据结构中 的链指针连入j t h r e a d _ m a i nt h r e a d 为首指针的链表中。这个链表的使用在介绍线 程的创建和释放的时候将提到。 l i n u x t h r e a d s 遵循p o s i x l 0 0 3 ,l e 标准,其中对线程库的实现进彳亍了一些范目限 l l 华中科技大学硕士学位论文 制,比如进程最大线程数,线程私有数据区大小等等。在l i n u x t h r e a d s 的实现中, 基本遵循这些限制,但也进行了一定的改动,改动的趋势是放松或者说扩大这些限 制,使编程更加方便。例如:每进程的最大线程数,p o s

温馨提示

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

评论

0/150

提交评论