(计算机软件与理论专业论文)openmosix的非传统进程迁移实现之分析.pdf_第1页
(计算机软件与理论专业论文)openmosix的非传统进程迁移实现之分析.pdf_第2页
(计算机软件与理论专业论文)openmosix的非传统进程迁移实现之分析.pdf_第3页
(计算机软件与理论专业论文)openmosix的非传统进程迁移实现之分析.pdf_第4页
(计算机软件与理论专业论文)openmosix的非传统进程迁移实现之分析.pdf_第5页
已阅读5页,还剩82页未读 继续免费阅读

(计算机软件与理论专业论文)openmosix的非传统进程迁移实现之分析.pdf.pdf 免费下载

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

文档简介

中山大学硕士学位论文o v e n m o s i x 的非传统进程迁移实现之分析 论文题目:o p e n m o s i x 的非传统进程迁移实现之分析 专业:计算机软件与理论 硕士生:叶昂越 指导教师:张治国 摘要 多用户、分时共享是集群系统的基本特点之一,其主要目标是通过高效的资 源管理和任务调度技术实现集群范围内资源的有效共享,从而提高资源利用率, 获得高性能。集群系统通过负载平衡的方法来争取集群系统范围内的最大资源使 用率,而进程迁移是达到动态负载平衡的最佳途径。 在系统内核层实现的进程迁移,可以充分利用操作系统提供的功能,全面获 取进程和操作系统状态,其实现效率高并且对用户程序透明。o p e n m o s i x 正是内 核层进程迁移实现的典型例子,经过多年的发展其己经实现了完善的传统进程迁 移,但在o p e n m o s i x 上实现分布式共享存储则是最近一年多的事情。随着越来 越多分布式共享存储应用程序在网络、数据库等各计算机领域的使用,在 o p e n m o s i x 上实现和完善分布式共享存储进程的迁移显得越来越有意义。同时由 于o p e n m o s i x 上的分布式共享存储才崭露头角,因此目前国内外对于该部分内 容的研究甚少。本文正是基于该现状,研究和分析了o v e n m o s i x 的分布式共享 存储实现过程。 本文主要研究了几个问题:共享内存进程迁移的核心问题如何保证共享 内存数据一致性问题,以及共享内存是否随进程迁移、如何迁移等其他问题。本 文研究了l i n u x 操作系统,熟悉掌握l i n u x 进程管理以及内存管理之后,深层次 的剖析了o p e n m o s i x 源代码,得出: i o p e n m o s i x 中共享内存数据一致性实现使用急切释放一致性控制模 型,在共享内存进程迁移中急切释放一致性使用无效消息协议而在 线程迁移中急切释放一致性使用数据更新协议; 2 共享内存迁移时,o p e n m o s i x 通过一种机制判断共享内存是否与进 程强关联而决定共享内存是否迁移: 中山大学硕士学位论文o p e n m o s l x 的非传统进程迁移实现之分析 3 共享内存迁移的实现是一种逻辑迁移, 本文就以上实现机制做了优缺点分析评价,并且在文章最后部分设计了三部 分的实验,第一部分模拟各种迁移情况验证本文中分析所得的各种机制,第二部 分性能分析用来验证分析所得机制的优缺点,第三部分功能实验用来验证受 o p e n m o s i x 实现机制限定的一些功能缺陷。 关键词:分布式共享存储,进程迁移,一致性控制,集群 中山大学实验教学改革项目资助 i i 中山大学硕士学位论文 o p e n m o s x 的非传统进程迁移实现之分析 t i t l e :a n a l y s i so fi m p l e m e n t a t i o no fn o n t r a d i t i o n a lp r o c e s sm i g r a t i o ni n o p e n m o s i x m a j o r :c o m p u t e r n a m e : s c i e n c ea n dt h e o r y y eh n g y u e s u p e r v i s o r :z h a n gz h g u o a b s t r a c t c l u s t e ri sa ne f f i c i e n tm u l t i u s e r ,t i m e s h a r i n ge x e c u t i o ne n v i r o n m e n t ,t h eo v e r a l lg o a l i st om a x i m i z et h ep e r f o r m a n c eb ye f f i c i e n tu t i l i z a t i o no ft h en e t w o r k w i d er e s o u r c e s c l u s t e rm a x i m i z e si t sr e s o u r c eu t i l i z a t i o nb yl o a db a l a n c i n g ,a n dt h eb e s tm e t h o dt o a c h i e v ed y n a m i cl o a db a l a n c i n gi sp r o c e s sm i g r a t i o n i m p l e m e n t i n gp r o c e s sm i g r a t i o ni n t h es y s t e mk e r n e ll e v e lc a nm a k ef u l lu s eo ft h e f u n c t i o n a l i t i e sp r o v i d e db yt h eo p e r a t i n gs y s t e ma n dg e ta l lt h ep r o c e s ss t a t u sf r o mt h e o p e r a t i n gs y s t e m t h i si m p l e m e n t a t i o ni s e f f i c i e n ta n di ti sa l s ot r a n s p a r e n tt ot h ee n d u s e r s o p e n m o s i x i st h em o s tf a m o u si m p l e m e n t a t i o no fk e r n e ll e v e lp r o c e s s m i g r a t i o n t h r o u g hy e a r so fd e v e l o p m e n t ,i th a si m p l e m e n t e d a l lt h ef u n c t i o n so ft h e t r a d i t i o n a lp r o c e s sm i g r a t i o n h o w e v e r , t h ei m p l e m e n t a t i o no fd i s t r i b u t e ds h a r e d m e m o 叫0 1 1o p e n m o s i xi so n l ys e e nr e c e n t l y a sm o r ea n dm o f ea p p l i c a t i o n so f d i s t r i b u t e ds h a r i n gm e m o r ys y s t e ma r eu s e di nt h en e t w o r k ,d a t a b a s ee t c ,i ti s i n c r e a s i n g l ys i g n i f i c a n tt oi m p l e m e n td i s t r i b u t e ds h a r e dm e m o 叫p r o c e s sm i g r a t i o ni n o p e n m o s i x ,o n l yaf e wr e s e a r c h e sh a v eb e e nd o n eo ns h a r e dm e m o 叮p r o c e s s m i g r a t i o ni no p e n m o s i xb e c a u s et h em e m o 叮s h a r i n gi sab r a n d n e wt e c h n o l o g yi n o p e n m o s i x t h i st h e s i sa n a l y z e dt h ei m p l e m e n t a t i o no fd i s t r i b u t e ds h a r e dm e m o r ym e c h n i s mi n o p e n m o s i x ,w h i c hi n c l u d e s :t h ec o r ei s s u eo fs h a r e dm e m o r y 一一h o wt oe n s u r e c o n s i s t e n c yo ft h es h a r e dm e m o r y , w h e t h e ro rn o tt om i g r a t es h a r e dm e m o r y , a n dh o w l i t 中山大学硕士学位论文o p e r 删o s i x 的非传统进程迁移实现之分析 t om i g r a t ei t a f t e rs t u d y i n gl i n u xa n ds h a r e dm e m o f ym e c h a n i s m ,i ,p r o f o u n d l y u n d e r s t a n dt h es o u r c ec o d eo fo p e n m o s i x ,f o u n dt h ec o n c l u s i o na sf o l l o w : 1 t h ec o n s i s t e n c yo fs h a r dm e m o r yi no p e n m o s i xi si m p l e m e n t e db y e a g e rr e l e a s ec o n s i s t e n c y ( e r s ) m o d e lw h i c hh a si n v a l i d a t i o np r o t o c o l f o rs h a r e dm e m o 呵p r o c e s s e sm i g r a t i o na n du p d a t ep r o t o c o lf o rt h r e a d m i g r a t i o n 2 o p e n m o s i x ss h a r e dm e m o 叮m i g r a t i o nd e c i s i o ni sb a s e do nw h e t h e ro r n o tt h es h a r e dm e m o r yi ss t r o n g l y - l i n k e dt ot h ep r o c e s s 3 t h ei m p l e m e n t a t i o no fs h a r e d m e m o r ym i g r a t i o ni sl i k el o g i c a l m i g r a t i o n t h i st h e s i se v a l u a t e dd i s t r i b u t e ds h a r e dm e m o r yi m p l e m e n t a t i o nm e t h o d ,a n d d e s i g n e das e r i a lo fe x p e r i m e n t si nt h el a t e rc h a p t e r st os i m u l a t ed i f f e r e n ts i t u a t i o n so f m i g r a t i o na n dv e r i f i e dt h ei m p l e m e n t a t i o no fm e t h o d sw h i c ha r ec o n c l u d e df r o mt h e s o u r c ec o d eo b s e r v a t i o n , k e y w o r d s :d i s t r i b u t es h a r e dm e m o r y ,p r o c e s sm i g r a t i o n ,c o n s i s t e n c y c l u s t e r t h ep r o j e c ts u p p o r t e db yt h ei n n o v a ti r ef u n do fl a b o r a t o r ys u ny a t s e n u n i v e r s i t y 中山大学硕士学位论丈o p e n m o s 【x 的非传统进程迁移实现之分析 1 1 背景 第1 章研究背景与问题陈述 集群( c l u s t e r ) 计算技术一直是计算机界研究的一个热点问题。集群系统不 但能够充分利用现有的计算资源,而且能够通过较低的软、硬件代价实现较高性 能的计算机系统。集群计算系统一般是一种多用户( m u l t i u s e r ) 、分时共享 ( t i m e s h a r i n g ) 系统,其主要目标是通过网络互连实现系统范围内的资源共享, 从而提高资源利用率,获得高性能。为了达到该目标,集群系统通常采用负载平 衡方法,而进程迁移则是达到动态负载平衡的最佳途径。进程迁移除了支持负载 平衡,在其他很多方面都具有适用性。总的说来,进程迁移实现了 1 】: 1 动态负载平衡:将进程迁移到负载轻或空闲的节点上,充分利用可用资 源,通过减少节点间负载的差异来全面提高性能。 2 容错性和高可用性:某节点出现故障时,通过将进程迁移到其它节点继 续恢复运行,这将极大的提高系统的可靠性和可用性。在某些关键性应用中,这 一点尤为重要。 3 并行文件i o :将进程迁移到文件服务器上进行i o ,而不是通过传统的从 文件服务器通过网络将数据传输给进程。对于那些需向文件服务器请求大量数据 的进程,这将有效的减少了通讯量,极大的提高效率。 4 充分利用特殊资源:进程可以通过迁移来利用某节点上独特的硬件或软 件能力。 5 内存导向( m e m o r yu s h e r i n g ) 机制:当一个节点耗尽它的主存时,m e m o r y u s h e r i n g 机制将允许进程迁移到其它拥有空闲内存的节点,而不是让该节点频繁 地进行分页或和外存进行交换。这种方式适合于负载较为均衡,但内存使用存在 差异或内存物理配置存在差异的系统。 根据应用的级别,进程迁移实现可以分为:内核层进程迁移实现,用户层进 程迁移实现,以及应用层进程迁移实现。内核层进程迁移实现在操作系统内完成, 中山大学硕士学位论文o p e n m o s i x 的非传统进程迁移实现之分析 这种实现方式的好处有:可以高效的访问进程状态,以及在任何时候都可以真正 做到抢占式进程迁移。这使得该实现方式具有良好的适应性以及对用户透明性。 当然它也有不好的一面,例如实现起来复杂度高,以及要求所有节点使用相同的 操作系统内核等。这一类实现例子有:l o c u s ,m o s i x ,o p e n m o s i x ,s p r i t e 2 等。用 户级进程迁移实现是在用户层( 介于系统内核与应用程序层之间) ,通过库的方 式【3 】,在编译时将应用程序和库连接来完成,这种方式通过一定的系统调用来 获取进程状态信息,这一类实现例子有:c o n d o r , a l o n s oa n dk y r i m i s m a n d e l b e r g a n ds u n d e r a m 1 等。应用级进程实现是把进程迁移整合到应用程序中,这在异构 节点集群系统上非常有效,但很明显也就失去了对用户程序的透明性以及重用 性,这一类实现例子有f r e e d m a n ,s k o r d o s ,b h a r a ta n dc a r d e l l i 等。 图1 1 各层进程迁移 单系统镜像集群操作系统o p e n m o s i x 通过修改和扩展l i n u x 内核,在系统内 核层实现进程迁移。由于其良好的系统性能,以及随同l i n u x 同步发展,越来越 多的集群选择了o p e n m o s i x 作操作系统。o p e n m o s i x 前身是起源于1 9 7 7 年的 m o s i x 系统,m o s i x 在2 0 0 1 后决定不向用户公开源代码后,m o s i x 负责人之一 m o s h eb a r 继续了o p e n m o s i x 的自由之路。经过多年的发展,o p e n m o s i x 在传统 进程迁移的实现上已经相当完善,其整体操作系统的具体性能和特点本文在后面 给出详细分析。随着网络的飞速发展,分布式共享内存应用已经越来越广泛,而 o p e n m o s i x 近一年多以来对分布式共享内存的支持也显得越来越有意义。 中山大学硕士学位论文o p e n m o s i x 的非传统进程迁移实现之分析 1 2 问题陈述 本文中定义的非传统进程分共享内存进程及线程两种,共享内存进程指进程 内除了独立用户空间之外,进程之间还共享存储空间,这种进程常用于分布式共 享存储系统中;线程指系统轻量级进程。o p e n m o s i x 由于设计初的系统定位,使 得其对非传统进程的迁移一直存在一些限制 4 】。直到2 0 0 3 底,针对非传统进程 迁移支持的不足,五个印度计算机天才在o p e n m o s i x 内核基础之上,实现了一 个分布式共享存储包,她们将该包命名为m i g s h m 。修改后的o p e n m o s i x 支持了 分布式共享存储 5 】,非传统进程可以在添加m i g s h m 之后的o p e n m o s i x 上充分 利用系统的动态负载平衡性能。由于在o p e n m o s i x 上实现分布式共享存储是一 崭新的研究领域因此目前对该方面内容的研究甚少。 本文所作的主要内容是学习和研究l i n u x 系统和共享内存进程,熟悉掌握 l i n u x 系统中进程管理和内存管理后,从o p e n m o s i x 源代码出发深层次分析了 o p e n m o s i x 的非传统进程迁移的实现过程。本文主要研究了几个问题:共享内存 进程迁移的核心问题如何保证共享内存数据一致性问题,以及由该问题引申 出来的共享内存是否随进程迁移、如何迁移等其他问题。经过对o p e n m o s i x 源 代码的详细研究之后,本文得出:o p e n m o s i x 中共享内存一致性实现使用了急切 释放一致性控制模型,该模型在o p e n m o s i x 中实现分为回写操作和无效广播操 作两部分;在共享内存迁移方面,o p e n m o s i x 通过一种机制判断共享内存是否与 进程强关联而决定共享内存是否迁移:另外共享内存迁移的实现是一种逻辑迁 移。本文还就实现的各种机制给出优缺点评价,同时在文章后面章节中设计了一 系列的实验,模拟各种迁移情况,用来验证从源代码分析中所得的各种机制以及 策略的实现过程。 1 3 论文内容简介 本篇论文一共分为七章,内容安排如下:第二章介绍进程以及一些非传统进 程的概念;第三章介绍分布式共享内存集群系统o p e n m o s i x :第四章介绍传统进 程迁移的实现;第五章和第六章是本文的核心部分,第五章本文从内核源代码分 析非传统进程迁移实现的过程,并对实现的过程给出优缺点的评价,而第六章则 中山大学硕士学位论文o p e r 删l o s i x 的非传统进程迁移实现之分析 用实验的方法来验证本文对非传统进程迁移实现过程的验证;最后一章对本文做 总结并提出下一步本文的研究方向。 4 中山大学硕士学位论文 o p e n m o s i x 的非传统进程迁移实现之分析 第2 章共享内存进程及线程 2 1 进程与线程 操作系统为程序运行创建进程【6 】,创建的进程包括程序资源。以及程序执 行的状态,具体包括:进程号、进程组号、进程所属用户号、以及所属用户组号、 进程运行环境、进程工作目录、程序执行指令、寄存器、文件描述符、共享类库、 进程间通讯工具( 消息队列,管道,旗语,共享内存等) 。示意图如下: 图2 - l 进程示意图 8 线程存在于进程内部,继承并使用进程资源,操作系统可以将线程作为独立 的执行单位执行,是因为线程除了与其他线程共享大部分资源之外,每一个线程 还保留了自己的私有财产,例如:栈指针、寄存器、调度优先级、线程信号、以 及私有线程控制块等。示意图如下: 中山大学硕士学位论文 o p e n s o s i x 的非传统进程迁移实现之分析 图2 2 线程示意图 7 从上图中可以看到同一进程内部的线程之间共用同一份地址空间,这意味着 线程对共享资源的修改对于其他线程或者父进程是可见的,因此线程间需要系统 来控制同步。 2 2 共享内存进程 在一个多进程操作系统所提供的运行环境下,可以通过两种不同的途径,或 者说采用两种不同的策略,来建立起复杂的大型应用系统。一种途径是通过一个 孤立的、大型的、复杂的进程提供所需的全部功能,另一种途径则是通过由若干 互相联系的,小型的、相对简单的进程所构成的组合来提供所需的功能。而随着 操作系统的发展,后者已经成为系统实现的主要方法,同时由于后者是由互相联 系的多个进程共同工作来完成,也即要求操作系统要提供充分的进程间通信的手 段和设施。共享内存进程,就是一种非常有效的s y s vi p c 进程间通信方式 7 】。 若享内存,顾名思义就是两个或更多个进程可以访问同一块内存区间,使得 一个进程对这块空间中的某个单元内容的改变可以为其他进程所“看”到。共享 内存针对管道以及其他机制运行效率比较低的缺陷而设计的。参加共享内存的各 个进程就像普通访问内存一样地访问所共享的内存区间,其运行时的效率可以很 6 中山大学硕士学位论文0 p e n m o s i x 的非传统进程迁移实现之分析 高。不过,应该指出共享内存中,不同进程读写一块内存空间的操作本身就是 微观的、直接的,并不通过系统调用进行。这样,就失去了内核保证互斥性的可 能,进程间也不会因此而自动的得到同步,并且所写的内容在全部完成之前就立 即可以部分的为其他进程所“看”到。举例来说,如果进程a 向一块共享内存 空间写一字符串,在写了一半时就因中断而引起调度,于是当进程b 在进程a 尚未完成整个字符串的写入前就来读,那就会读出这样一个字符串:前半部是进 程a 新写入的,可是后半部分却是以前某个时候由其他进程写入的。所以,共 享内存通常需要与s y s vi p c 中的另一个机制“旗语”结合使用,这样才能达到 进程间的同步与互斥。 在内核中,共享内存机制的四种操作s h m g e t , s h m a t , s h m d t 和 s h m c t l ,由应用程序设计界面上的库函数s h m g e t ( ) ,s h m a t ( ) ,s h m d t ( ) ,和s h m c t l ( ) 实现 9 1 0 j 。 s h m g e t ( ) ,获得共享内存区的i p c 标识符,如果该共享内存还未被创建,则 创建新的共享内存区,返回其i p c 标识符。 s h m a t ( ) ,将共享内存区挂靠到调用进程。通过函数调用参数i p c 标识符, 将标识符所指定的内存区映射到调用进程的地址空间。s h m a t ( ) 返回一个线- 陛地 址给调用进程,多个共享该内存区域的进程可以通过不同地址( s h m a t ( ) 返回的 线性地址) 来访问该共享内存区域。函数调用后,进程的内存映射表并未得到修 改,还是保留原有的页面映射表。 函数s h m a t ( ) 成功调用之后,添加到进程的内存页面都是无效页面。函数调 用增加了进程的虚拟地址空间,但并没有修改进程的内存页面映射表,也就是说 当进程首次访问该共享内存空间时,由于进程的内存页面映射表没有更新而出现 页面访问异常。此时内核会调用相应的异常处理程序判断该访问地址是否在进程 有效地址空间中。当访问遗址在有效地址空间内,并且其对应页面表项为空值, 则调用d o n o _ p a g e ( ) 函数获取内存页面。 s h m d t ( ) ,将指定 p c 标识符的共享内存区从调用进程上脱钩,也就是将共 享内存空间相应的地址区域从进程的地址空间中删除。在此函数调用后,即使该 共享内存区间不挂靠到任何一个进程上,i p c 共享内存区间也不会被该函数立 即销毁。 中山大学硕士学位论文 0 p e n m o s i x 的非传统进程迁移实现之分析 s h m c t l ( ) ,该函数用于用户收集共享内存区信息,设置共享内存区所有者, 设置共享内存区组访问权限,以及销毁共享内存区等功能。用户在使用完内存共 享区后必需保证将其销毁,不然该内存区的页面访问错误将会永远留在内存或者 系统s w a p 分区中。 四个程序设计界面函数调用关系可以用下图表示。 p r o c e s sl l s h m g e t ( ) j r p r o c e s s2 。卜s h m a t ( 、 访问共享内存区 2 3i i n u x 线程 建立共享内存区对应文件 将共享内存挂靠到调用进程 通过旗语保护进程间共享内存 ,从进程上卸下共享内存空问 删除共享内存区 图2 - 3 p c 使用共享内存过程 在l i n u x 中,线程其实是“轻量级进程”( 1 i g h tw e i g h tp r o c e s s ) ,与“重量 级进程”( h i g hw e i g h tp r o c e s s ) 相对应。h w p 使用系统调用f o r k ( ) 建立,包括五 陋 ) )似0 嘣 m m h h s s 中山大学硕士学位论文o p e n m o s i x 的非传统进程迁移实现之分析 部分内容:代码( c o d e ) 、数据( d a t a ) 、堆栈( s t a c k ) 、输入输出文件( f i l ei o ) 和信号表( s i g n a lt a b l e ) 。h w p 之间只能共享代码部分,当进行进程调度切换时, 进程的所有资源都需要被调换出处理器。 线程在进程内共享进程资源,与进程切换繁琐复杂相反,线程间的切换变得 方便快捷。线程之间共享用户地址空间,使得线程间的通讯不再成为问题,使用 线程实现的程序大大提高了程序运行的并行性和程序执行速度。l i n u x 线程可以 按其执行所在空间的不同分为用户空间线程和内核空间线程 1 l 】,在一些地方也 称为核内线程和核外线程 1 2 1 。 2 3 1 用户空间线程 用户空间线程中避免了系统内核直接管理和线程调度,而由用户自己负责线 程的调度和管理。通常互助多任务中使用用户空间线程比较合适,在这种情况下 任务分别由一套子线程实现,线程间的切换通过栈指针的变换而实现。在线程运 行过程中剥夺线程的c p u 资源往往需要通过显示的切换调用,发送信号到当前 执行线程,或者执行一些需要引起线程切换的操作。另外,计时信号的发送也会 强制使线程让出c p u 资源。 相对与内核空间线程,用户空间线程切换由用户控制实现,其切换速度比内 核空间线程切换速度要快的多。虽然如此,用户空间的线程也存在不足,例如在 线程执行过程中。用户空间线程有可能出现某个线程长时间独占时间片资源,造 成其他饥饿线程永远得不到执行时间片;当线程为了等待i o 阻塞时,其他饥饿 线程也同时等待而失去占用时间片资源的机会。另外使用用户空间的线程实现的 用户程序也不能很大程度的利用对称多处理机的优势。 2 3 2 内核空间线程 内核空间线程在内核中使用表来实现( 每一个线程都会拥有一张线程表) , 内核中将内核线程与进程一样进行时间片资源调度。由于线程执行过程中要载入 用户空间上下文时,要经过u s e r k e r n e l 一 u s e r 的调度,势必造成一些额外的开销。 中山大学硕士学位论文 o p e n m o s i x 的非传统进程迁移实现之分析 不过现实效果表明,这里增加的开销对整个系统性能造成的影响并不大 1 4 】。 l i n u x 中通过系统调用c l o n e ( ) 来创建内核空间线程。c l o n e ( ) 函数简单介绍如 下【7 : i n tc l o n e ( i n t ( * f n ) ( v o i d * ) ,v o i d * c h i l d _ s t a c k i n t f l a g s ,v i o d + 口删? c l o n e ( 、是底层系统克隆调用最表层的接口函数,其具体实现通过函数 d of o r k ( ) 。c l o n e ( ) 中函数参数功能如下表 f n线程执行内容函数 c h i l ds t a c k线程私有栈 f l a g s 共享内容标志 a r g 线程执行内容函数的参数 表2 1 系统调用c l o n e ( ) 函数参数 进程调用c l o n e ( ) 后,进程成为创建线程的父进程。父进程创建的子线程将 执行函数指针f h 指向的函数,m 函数的执行参数由c l o n e ( ) 函数参数a r g 提供。 父进程和子线程之间共享内存地址空间,但不能共享栈空间。因此父进程在调用 c l o n e ( ) 之前,先指定创建后线程的栈地址,参数c h i l d s t a c k 给定子线程使用的 栈空间的起始地址。由于栈地址是向下伸展,因此c h i l d _ s t a c k 指向的栈最上端内 存空间地址,子线程使用的栈空间通过父进程调用m a l l o c ( ) 向系统申请而来,也 就是说子线程的栈空间位于父进程的堆中。 父进程与子线程之间除了共享内存地址空间以外,还可以共享信号表,文件 系统,以及使用文件等内容。父进程与子线程之间是否共享这些内容通过c l o n e ( ) 参数f l a g s 指定。 f l a g s 意义解释 c l o n ev m共享整个内存空间 c l o n ef s 共享文件系统信息 c l o n e _ f i l e s 共享已打开文件 c l o n e s i g h a n d 共享信号表 表2 - 2 系统调用c l o n e ( ) 参数f l a g s 中山大学硕士学位论文 0 p e n m o s i x 的非传统进程迁移实现之分析 2 4p o s i x 线程 2 4 1p o s i x 线程简介 在计算机发展过程中,不同的系统生产商都根据了自己产品的特性实现了自 己线程版本,但由于没有统一标准遵循,使得用户开发可移植性多线程程序变得 十分困难。一直到了1 9 9 5 年,i e e e 协会制定了一系列标准p o s i x1 0 0 3 1 c 1 3 , 这标准给定了一个标准的编程界面,而遵循该标准实现的线程称之为p o s i x 线 程简称p 线程。 在c c + + 中p o s i x 线程被定义成一套完整的线程库,用户在编写程序时候 通过导a p t h r e a d h 就可以使用p o s i x 线程库中给出的a p i 用于实现多线程程序。 在某些时候p o s i x 线程库包含在其他类库中,例如g l i b c 。本文在上一节介绍的 l i n u x 用户空间线程指的就是l i n u x 的p o s i x 线程实现。 2 4 2p o s i x 线程工作机制 p o s i x 线程在l i n u x 中实现的线程库,是由x a v i e rl e r o y 负责开发完成,并 己绑定在g | i b c 中发行。它所实现的就是基于核心轻量级进程的”一对一”线程模 型,一个线程实体对应一个核心轻量级进程,而线程之间的管理在核外函数库中 实现。本文通过可以通过分析p o s i x 线程库函数来总结p o s i x 线程的工作机制。 按功能划分,可以将p o s i x 线程库中的库函数分为三大块:线程管理,互斥锁, 条件变量 1 4 】。 2 4 2 1 线程管理 这一部分包括线程的创建,退出,链接,线程属性设置和查询等功能函数。 主要接口函数有p t h r e a d c r e a t e ( ) ;p t h r e a d e x i t ( ) ;p t h r e a d s e l f ( ) ; p t h r e a d j o i n ( ) :p t h r e a d d e t a c h ( ) 。 中山大学硕士学位论文0 p e n m o s i x 的非传统进程迁移实现之分析 p t h r e a d1:该函数用于创建子线程,返回创建成功的子线程id,创建_create( 成功的子线程执行函数参数s t a r tr o u t i n e ( ) 。 p t h r e a de x i t ( ) : 该函数用于在线程完成任务后,如果没有必要存在时,显 示调用该函数让该线程退出执行。 p t h r e a ds e l f ( ) : 返回该线程唯一的线程i d 。 p t h r e a d _ j o i n ( ) :阻塞调要线程,等待至参数t h r e a d i d 指定线程执行完毕。 p t h r e a d _ d e t a c h ( ) : 与p t h r e a d _ j o i n ( ) 相对应。将线程分离。 2 4 2 2 互斥锁 线程由于共享用户地址空间,某一线程的读写结果相对于其他线程以及父进 程是可见的,因此系统必需提供必要线程同步措施。互斥锁变量是实现p o s i x 线程同步的主要方法之一,在多个线程读写同一共享数据时,互斥锁还起到对该 数据的保护作用。 互斥锁的创建与销毁,p t h r e a d _ m u t e x _ i n i ) :p t h r e a d _ m u t e x _ d e s t r o y ( ) ; p t h r e a d _ m u t e x a t t r _ i n i t ( ) ;p t h r e a dm u t e x a t t rd e s t r o y ( ) 。互斥锁变量的创建可以分 两种,一种是静态创建 p t h r e a d _ m u t e x _ tm y m u t e x = p t h r e a d _ m u t e x i n i t i a l i z e r ; 第二种是用函数p t h r e a d _ m u t e x _ i n i t ( ) 动态创建,同时在创建的时候可以设置互斥 锁属性。 p t h r e a dm u t e xd e s t r o y ( ) :销毁互斥锁,销毁一个互斥锁即意味着释放它所 占用的资源,且要求锁当前处于开放状态。由于在l i n u x 中,互斥锁并不占用任 何资源,因此l i n u x t h r e a d s 中的p t h r e a d _ m u t e x _ d e s t r o y ( ) 除了检查锁状态以外( 锁 定状态则返回e b u s y ) 没有其他动作。 p t h r e a d _ m u t e x a t t r _ i n i t ( ) ;p t h r e a d _ m u t e x a t t r _ d e s t r o y ( ) :用于创建和注销互斥 锁属性对象。 互斥锁的加锁解锁操作:p t h r e a d _ m u t e x - l o c k ( ) ,p t h r e a dm u t e x _ t r y l o e k ( ) , p t h r e a d _ m u t e x _ u n l o c k ( ) 。 根据锁属性不同,可以分为多种不同类型的锁。不论哪种类型的锁,都不可 中山大学硕士学位论文 o p e o m o s i x 的非传统进程迁移实现之分析 能被两个不同的线程同时得到,当锁被一个线程占有时,其他线程必须等待解锁 操作。对于普通锁和适应锁,解锁者可以是同进程内任何线程;而检错锁则必须 由加锁者解锁才有效,否则返回e p e r m ;对于嵌套锁,文档和实现要求必须由 加锁者解锁,但实验结果表明并没有这种限制 1 3 】,这点目前还没有得到解释。 在同一进程中的线程,如果加锁后没有解锁。则其他任何线程都无法再获得锁。 2 4 2 3 条件变量 条件变量是p o s i x 线程中实现同步另一种主要方法。与互斥锁不同,互斥 锁用于实现线程在访问同一数据过程中的同步而条件变量则用一变量值来控制 线程之间的同步。在多个线程访问某临界区时有了条件变量,线程则无需时时 刻刻注意访阀临界区的条件是否满足。当线程获取资源条件满足时,系统会发送 一个信号到等待队列的线程激活等待线程。条件变量往往和互斥锁一起使用,因 为条件变量数据本身就是一种临界资源。这一类接1 2 1 函数包括对一特定条件变量 的创建,销毁,等待和发送信号等功能,同样也包括对条件变量属性的设定,修 改等操作。 条件变量的创建与销毁,p t h r e a d _ c o n d _ i n i t ( ) ,p t h r e a dc o n d _ d e s t r o y ( ) , p t h r e a d _ c o n d a t t r _ i n i t ( ) ,p t h r e a d _ c o n d a t t r _ d e s t r o y ( ) 。 与互斥锁的创建类似,条件变量的创建也有动态和静态两种。 p t h r e a d _ c o n d a t t r _ i n i t ( ) ,p t h r e a d _ c o n d a t t r _ d e s t r o y ( ) :创建和销毁条件变量 属性对象。 p t h r e a d _ c o r t d _ d e s t r o y ( ) :销毁条件变量,释放条件变量所占资源。 等待和激发条件变量,p t h r e a d _ c o n d _ w a i t ( ) ,p t h r e a d _ e o n ds i g n a l ( ) , p t h r e a dc o n d _ b r o a d c a s t ( ) a p t h r e a dc o n d _ w a i t ( ) :阻塞调用进程等待至收到唤醒信号( 表示条件得到满 足) 。该接口函数调用时,与之配合使用的互斥锁必需处于锁定状态,线程进入 等待状态之后,自动将互斥锁释放。在收到唤醒信号,又将互斥锁加锁,处理完 毕后,将互斥锁释放。 p t h r e a d _ c o n d _ s i g n a l ( ) :当等待线程等待的条件得到满足时,当前运行线程 中山大学硕士学位论文 o p e n m o s i x 的非传统进程迁移实现之分析 将调用该函数,发送唤醒信号到等待队列,顺序唤醒等待队列中某个等待线程。 p t h r e a d _ c o n d _ b r o a d c a s t ( ) :与p t h r e a d _ c o n d _ s i g n a l ( ) 类似,不过该函数唤醒 所有等待线程。 如果在等待函数调用之前,调用信号发送函数,将出现逻辑错误,另外在调 用过程中必需注意与条件变量配合使用的互斥锁的加锁和解锁情况。 1 4 中山大学硕士学位论文0 v e n m o s i x 的非传统进程迁移实现之分析 第3 章d s m 系统和o p e n m o s ix 3 1d s m 系统 d s m ( d i s t r i b u t e ds h a r em e m o r y ) 系统提供了在物理分布内存上实现一层逻 辑共享内存空间,从而达到在网络组成的多台工作站上作并行计算。简单示意如 下: 3 1 1 d s m 简介 网络 图3 - ld s m 模型 分布式共享存储系统( d s m ) 是为满足异步并行计算和分布式计算中的实 际问题而提出的。它在松散耦合的分布式环境下,实现了一个虚拟的m i m d 2 s m 模型【1 5 。与报文传递原语和远端过程调用不同,在这个模型中的并行计算,进 程间的通信是通过动态地读取共享存储器中的共享数据进行的,进程间的通信和 中山大学硕士学位论文o p e n m o s i x 的非传统进程迁移实现之分析 共享数据的一致性维护对程序员透明,从而极大的减轻了应用程序设计者的负 担。d s m 兼有紧密耦合分布式系统编程容易和松散耦合分布式系统扩充规模容 易的优点。紧密耦合系统中程序员不必考虑数据分配,编程工作是单机情况的简 单扩充,进程迁移和动态分配实现简单,但由于使用共用的存储器总线而限制了 节点数量。松散耦合系统虽能弥补这一点但不具备紧耦合系统的优点。因此在松 散耦合分布式系统上实现存储器共享是非常有价值的。这一技术自1 9 8 6 年以来 发展很快,现已有多个原型系统实现 1 6 儿1 7 】。设计一个d s m 系统一般要涉及 以下的问题: 1 ) 共享地址空间结构和粒度( s t r u c t u r ea n dg r a n u l a r i t y ) 共享地址空间结构是指存储器中共享数据的布局方法,它依赖于应用程序类 型,地址空间可以是平面的、分段的或物理的。粒度是指共享单元的大小,可以 是字节、字、页或者复杂的数据结构。 2 ) 一致性协议( c o h e r e n c ep r o t o c 0 1 ) 一致性问题的关键是保证读操作时总是返回最近修改的值。如果共享数据无 拷贝,那么存储一致性就不成问题。但这将导致系统瓶颈并丢失并行性这一主要 优点。为增加并行性,系统通常允许复制共享数据。复制导致一致性协议的复杂 性。控制复

温馨提示

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

评论

0/150

提交评论