操作系统移植

2024-09-24

操作系统移植(共12篇)

操作系统移植 篇1

随着硬件技术的飞速发展, 双核乃至多核的计算机的普及, 运用硬件资源为应用程序提供运行平台的操作系统也要有相应的调整。现在绝大多数操作系统都支持多核平台以及多线程及超线程技术。而对于安全有特殊需要的Linux安全操作系统, 在多核平台上运行多线程的应用程序时可能会出现一些新的情况, 而在特定条件下, 它们会对系统的安全和稳定构成威胁。这些问题主要体现在存储缓存 (Memory Caching) 和线程优先级 (Thread Priority) 方面。

1在内存/缓存方面, 在临时存储器共享的多核运算平台上可能出现伪共享问题

现在的主流个人计算机多核计算平台中的每个执行核都拥有自己的L1 Cache而共享L2 Cache, 多核工作站也一般是每个执行核拥有自己的Cache而共享内存。由于CPU的处理速度远远高于内存, 总线等工作单元的存取, 传输速度, 为了更有效地利用CPU资源, 一般把多个数据段组合在Cache的同一行中传送给处理器, 于是, 在某个时间点上, 一个处理器核上的L1 Cache与另一个处理器核上的L1 Cache可能会出现同步方面问题。

假设有两个线程分别运行在双核处理器的两个执行核上, 它们同时对邻近的存储器单元进行读写操作。由于操作系统对这两个线程的管理是全局的, 而Cache存储器是基于局部性原理工作的, 故不同的数据可能存放在Cache的同一行中。于是, 即使某个线程所需的位于某个Cache块中的数据尚未使用过, 操作系统还是可能会因为另一个处在其他执行核上的线程使用了此Cache行中其他块而将此行标记为无效, 要求其下一级的存储单元重新读入这行数据。如果两个线程都要对这个Cache块进行连续多次的写操作 (比如循环语句中的循环次数计数变量) , 使得这个块要不断的在两个CPU间传递, 从而极大的影响系统运行速度。这就是常见的伪共享 (False Sharing) 问题, 如图1所示。

这会导致一些在单核平台上运行很稳定的程序在多核平台上却不能正常工作。对于此问题, 文献[1]给出了详细说明。

而在安全操作系统中, 由于有对隐通道进行分析审计的安全功能模块存在, 在处理器进行此严重异常操作的情况下应该会进行报警并执行相应的安全措施, 从而使系统无法正常运行。

事实上, 伪共享问题早在十几年前安装有多个单芯片处理器的大规模并行处理机出现时就已经浮出水面, 十几年来, 国内外对其进行了大量的研究, 取得了诸多进展, 但由于此问题起源于硬件架构, 所以一直没能找到一个完美的解决办法。

现在一般的处理技术有:在编程、编译时将非共享的数据分放到不同的Cache行;将全局变量复制到一个函数内的局部变量, 在函数结束前再把它复制回去;在进程中, 将数据结构集中处理并使每个数据元素 (可以是确认不会引起伪共享的几个变量, 以避免因在Cache行中填充大量空白而浪费太多系统资源) 占有一个Cache行;将引发了伪共享的线程移动到一个执行核上。

应该注意到, 上面提到的前三种方法都要对源代码进行分析和改写, 这对整个操作系统以及其下运行的大量应该程序来说工作量太过巨大, 而最后一个方法虽然可以实时的处理伪共享问题, 可它要对Cache进行不断的监控, 其造成的额外系统资源开销过大, 而且, 如果是在讲求所有操作行为都应该是可预期的可信计算系统中, 多出这样一个具有最高权限的进程很可能会与已有的TSP安全策略 (TCB Security Policy) 产生冲突, 影响到系统的平稳运行。

综上, 作为以安全稳定为重点的操作系统, 在升级至多核平台后应以牺牲部分性能为代价对未经改写的源代码进行兼容处理, 即对其的编译执行提供兼容模式, 令其只在一个执行核上运行。

2在多核平台上, 采用与单核平台相同的进程优先级策略可能会产生异常的程序行为

在单核平台上, 因为操作系统不会在高优先级线程执行时为低优先级线程分配CPU资源, 高优先级线程可以一直占有系统资源而不会被低优先级线程干扰。

例如, Linux内核的进程调度采用抢占式优先权调度算法 (又称可剥夺调度, Preemptive Scheduling) 该算法的本质就是系统中当前运行的进程永远是可运行进程中优先权最高的那个。 在这种方式下, 系统把处理器分配给优先权最高的进程, 使之执行。但是只要一出现了另一个优先权更高的进程时, 调度程序就暂停原最高优先权进程的执行, 而将处理器分配给新出现的优先权最高的进程, 即剥夺当前进程的运行。因此, 在采用这种调度算法时, 每当出现一新的可运行进程, 就将它和当前运行进程进行优先权比较, 如果高于当前进程, 将触发进程调度。

而在多核平台上, 由于有两个或更多的CPU, 线程可以在同一时间运行, 于是, 低优先级线程完全有可能会影响到高优先级线程的工作。

考虑以下情况:在操作系统中, 一条安全策略为:当用户要求运行某程序时, 先对该程序进行安全性、完整性和有效性进行检查, 通过后则进行运行。以上步骤由两个线程A, B实现。线程A负责对存储器内某一可执行程序中数据的安全性、完整性、有效性进行检查分析, 线程B执行这个程序。线程A为实时线程, 具有最高优先级, 并且其thread_info描述符中的preempt_count字段大于0, 禁止其他线程抢占。 B为普通线程。在单核平台, 由于一定是高优先级线程A执行结束后才会执行B, 该程序可以正常有效的运行。可在多核平台, 由于A和B可以运行在不同的CPU上, 很可能在线程A正在进行检测时, 线程B便开始运行了。显然, 该情况将会对系统的安全稳定构成严重威胁。

事实上, 在多核平台上, 如果开发人员还是依照“高优先级线程不会受低优先级线程影响”的思路进行软件开发, 则其写出的代码会很不稳定。

对于此情况, 在系统开发时有必要引入栅障 (barrier) 机制 (见图2) 。栅障机制是一种同步手段, 它可以保持线程集合在其操作控制流的某个逻辑点上的协调。

采用这种手段, 操作线程集内的一个线程必须等待该集合中所有线程都完成某操作后才能继续执行。而在对安全要求高于其他一切的安全操作系统中, 对于在单核环境下开发的应用程序, 应该对其代码进行改写后重新编译。同样, 对未经改写的程序, 应该限定其只能在一个执行核上执行。

3 将特定程序限定在特定执行核运行的实现

针对多核设计的操作系统对多核的运用主要有以下三种模式:

非对称多处理 (Asymmetric Multiprocessing, AMP) ——每个CPU内核运行一个独立的操作系统或同一操作系统的独立实例 (instantiation) 。

对称多处理 (Symmetric Multiprocessing, SMP) ——一个操作系统的实例可以同时管理所有CPU内核, 且应用并不绑定某一个内核。

混合多处理 (Bound Multiprocessing, BMP) ——一个操作系统的实例可以同时管理所有CPU内核, 但每个应用程序都被锁定于某个指定的核心。

目前的公版Linux系统内核都采用对称多处理技术 (SMP) , 它可以动态地向应用程序分配资源, 从而最大程度地提高硬件资源的利用率。现在为了保证系统安全, 要使它兼容混合多处理 (BMP) , 即对于默认程序使用对称多处理, 而对于指定的程序, 在运行时则把它锁定于某个指定的核心, 为了实现这个目的, 需要对内核代码中负责进程调度的部分进行一些改写, 在Shell中加入选择运行模式的功能, 如要运行X-windows环境, 还应在其中加入选择运行模式功能。

摘要:随着硬件技术的飞速发展, 双核乃至多核的计算机的普及, 操作系统向多核平台移植的需要也越来越迫切。详细分析操作系统在向多CPU支持的平台移植时可能遇见的伪共享问题及优先级错置问题的产生原因, 针对不同情况提出了按规范修改代码、增加内核调度监控线程及将特定程序绑定在单CPU运行等不同对策, 并给出了实现方法。

关键词:多核平台,伪共享,线程优先级,操作系统

参考文献

[1]Eggers S, Jeremiassen T.Eliminating False Sharing[A].Proc.Int′l Conf.Parallel Processing[C].1991, 1:377-381.

[2]Shameem Akhter, Jason Roberts.Multi-Core Programming:Increasing Performance through Software Multi-threading[M].李宝峰, 富弘毅, 李韬, 译.北京:电子工业出版社, 2007.

[3]Tian Tian, Chiu-Pi Shih.Software Techniques for Shared-Cache Multi-Core Systems[DB/OL].Intel官方技术支持网站.

[4]Jyh-Herng Chow and Vivek Sarkar.False Sharing Eliminationby Selection of Runtime Scheduling Parameters[A].Internation-al Conference on Parallel Processing[C].1997:11-15.

[5]Mahmut Kandemir, Alok Choudhary, Ramanujam J, et al.Reducing False Sharing and Improving Spatial Locality in aUnified Compilation Framework[J].IEEE Trans.onParallel and Distrbuted Systems, 2003, 14 (4) :337-354.

[6]Richard Stevens W, Stephen A Rago.Advance Programmingin the UNIX Environment[M].北京:人民邮电出版社, 2006.

[7]何军, 王飙.多核处理器的结构设计研究[J].计算机工程, 2007, 33 (16) :208-210.

[8]赵吉志.Intel双核处理器缓存介绍[J].科技浪潮, 2007 (5) :42-44.

[9]李芳社.虚拟化技术在嵌入式系统中的应用[J].现代电子技术, 2008, 31 (16) :43-45, 50.

[10]屈文新, 樊晓桠, 张盛兵.多核多线程处理器存储技术研究进展[J].计算机科学, 2007, 34 (4) :13-16.

[11]丁煜.双核技术问答[J].科技浪潮, 2006 (1) :24-26.

操作系统移植 篇2

服务专业

大树移植的不规范操作程序

一、挖掘

工具不锋利,造成根系损伤。树木放倒后存放时间过长,有的甚至一个月才重新种植。裸根挖掘,根部损伤太大。造成树体失水,树叶萎缩。

二、运输

吊装运输过程中树皮磨损或有绳勒痕迹。碰到山高或者道路不通,把树木从山上滚下,丢到水里让船拖在水中走、浸泡时间过长。这样会冲淡树液,造成树木体内营养过分丢失,发不出芽直接死亡。

三、提供营养

树木开始挖掘到种植,拼命打吊针、施肥,造成营养过剩。树的日子过得有些“糊涂”了,硬把秋天当成春天,执拗地开起了满树花和叶,生长周期被人为打乱,大部分最后死亡。

防蒸腾

在低温的冬天情况下,还是拼命喷撒防蒸腾抑制,造成控根、抑芽。

四、种植

1.种植过深或土球表面覆土过多,造成根系窒息死亡。

2.某些地区地下水位较高,土壤粘性大,种植过深,易引起根部积水。大部分植物根系聚集于土球中上部,种植过深或表面覆土过多,易造成植物根部通气不良,以致排水不畅,根系缺氧,导致死亡。

3.树木的土球与种植土结合不紧密或支撑不规范,一旦遇大风吹干土壤会造成根部松动,致使树木死亡。

4.全冠移植,或者树木冠幅过于庞大,种植时可能碰到障碍,使土球松动,只要有部分根系未与土壤充分接触,就有可能造成树木生长衰弱。

5.种植时覆土的密度低于原土,致使根部积水引起死亡。建议使用二次沉降法种植,提高泥土密度。

6.传统的舂棒种植,土球与土壤不能达到完全结合,树穴内土壤密度低于周边密度,易产生积水,且舂棒种植后,有些土壤团粒依然粗大,使根系与土壤的接触面出现孔隙,植物养分易从孔隙流失。

7.地形凹陷处种植乔木较困难,因为地下水流动易在凹陷处聚集,从而引发根部积水。土壤是深层土,与土球、根系接触后,根系无法发根引起死亡。土球过于板结,粘性过大,造成根系无法生长。

8.树木在原生地时养分不充分,移植后不仅根系受伤,而且土壤性状及环境等因素都有所改变,使其发根困难。

9.反方向或者方向不对种植,树却有些“糊涂”了,太阳从西边出来了,结果死了一半或者直接死亡。

五、后期养护

很多人见到树木刚移植好就发芽,很是高兴,但是没有注意到树木营养性假活、开始内耗。树木往往在原生长地,养分不充分,移植后不仅根系受伤,而且土壤性状及环境等因素都有所改变,使其发根困难,特别是种植时拼命打紧支撑树木,淋水后造成土壤板结,树木根本发不了根,并且疯狂发生病害。

六、修剪

树干及枝条的树皮破损过多或修剪方法不当,导致病菌从伤口侵入树体,造成树木生长衰弱。

用心专注

服务专业

信息来源---转载于网络

附表:1 合作经营协议书

甲方: 乙方:

经甲乙双方友好协商,就中石油煤层气保德区块地面工程合作经营事宜,自愿达成如下协议,以资信守:

一、合伙宗旨:共同合作、合法经营、利益共享、风险共担。

二、合作经营项目:中石油煤层气保德区块地面建设工程。

三、合作经营地点:山西省保德县。

四、出资金额方式:期限垫付。

1、甲方以现金方式出资200万元;乙方以现金方式出资200万元(主要用于补足前任合伙人撤资款项)。

2、合同签订之日乙方向甲方交付100万元投资款,剩余100万元乙方须在2012年3月31日前全额到位。3、2012年3月31日前应付前任合伙人撤资的17万利息,双方各承担8.5万元。

4、乙方垫付2012年2月开工前期全部费用。(回款前)

五、股份划分:甲方 %、乙方 %。作为确定盈余分配和债务承担的基础。

六、合作期间甲乙双方的出资为双方共有资产,不得随意请求分割。

用心专注

服务专业

七、甲乙双方的任何一方原则上不得中途退撤,任何一方在不给合作事务造成不利影响的前提下可以退出,但须经双方协商认可。

八、甲乙双方的分工、权力与义务:

1、甲方为合作项目的负责人,全面负责合作业务的日常经营与管理,重点负责商务活动及工程的回款工作。费用不得超过工程总额的10%。

2、乙方负责合作项目的生产,施工、安全工作。

3、以甲方公司的名义,在保德县与当地银行开设账户,双方各留印鉴、共同管理。乙方负责施工过程中的财务工作,对于涉及财务、账目以及借款、还款、日常投资等资金使用事项在超过 元额度(元以下的应各自记账留存凭证定期对账),应许甲乙双方协商一致方可进行。同时,甲乙双方都有对财务账目的监督权利。

九、盈余分配与债务承担:

合作双方共同经营,共同合作、共担风险、共负盈亏。

十、合作任一方违反本协议导致合作损失的,应当对另一方承担。本协议未尽事宜,双方协商解决。

本协议一式 2 份,甲乙方各执一份,经甲乙方签字画押后生效。

用心专注

服务专业

甲方: 乙方:

操作系统移植 篇3

一、移植设计法的设计思路

在分析PLC控制系统的功能时,可以将PLC想象成一个继电器控制系统中的控制箱。PLC外部接线图描述的是这个控制箱的外部接线,PLC的梯形图程序是这个控制箱内部的“线路图”,PLC输入继电器和输出继电器是这个控制箱与外部联系的“中间继电器”,这样就可以用分析继电器电路图的方法来分析PLC控制系统。

可以将输入继电器的触点想象成对应的外部输入设备的触点,将输出继电器的线圈想象成对应的外部输出设备的线圈。外部输出设备的线圈除了受PLC的控制外,可能还会受外部触点的控制。用上述的思想就可以将继电器电路图转换为功能相同的PLC外部接线图和梯形图。

二、移植设计法的编程步骤

1.分析原有系统的工作原理

了解被控设备的工艺过程和机械的动作情况,根据继电器电路图分析和掌握控制系统的工作原理。

2.PLC的I/O分配

确定系统的输入设备和输出设备,进行PLC的I/O分配,画出PLC外部接线图。

3.建立其他元器件的对应关系

确定继电器电路图中的中间继电器、时间继电器等各器件与PLC中的辅助继电器和定时器的对应关系。

以上2和3两步建立了继电器电路图中所有的元器件与PLC内部编程元件的对应关系,对于移植设计法而言,这非常重要。在这过程中应该处理好以几个问题:

(1)继电器电路中的执行元件应与PLC的输出继电器对应,如交直流接触器、电磁阀、电磁铁、指示灯等。

(2)继电器电路中的主令电器应与PLC的输入继电器对应,如按钮、位置开关、选择开关等。热继电器的触点可作为PLC的输入,也可接在PLC外部电路中,主要是看PLC的输入点是否富裕。注意处理好PLC内、外触点的常开和常闭的关系。

(3)继电器电路中的中间继电器与PLC的辅助继电器对应;

(4)继电器电路中的时间继电器与PLC的定时器或计数器对应,但要注意:时间继电器有通电延时型和断电延时型两种,而定时器只有“通电延时型”一种。

4.设计梯形图程序

根据上述的对应关系,将继电器电路图“翻译”成对应的“准梯形图”,再根据梯形图的编程规则将“准梯形图”转换成结构合理的梯形图。对于复杂的控制电路可划整为零,先进行局部的转换,最后再综合起来。

5.仔细校对、认真调试

对转换后的梯形图一定要仔细校对、认真调试,以保证其控制功能与原图相符。

三、举例

1.卧式镗床继电器控制系统分析

图1所示为某卧式镗床继电器控制系统的电路图。它包括主电路、控制电路、照明电路和指示电路。镗床的主轴电机M1是双速异步电动机,中间继电器KA1和KA2控制主轴电机的起动和停止,接触器KM1和KM2控制主轴电机的正反转,接触器KM4、KM5和时间继电器KT控制主轴电机的变速,接触器KM3用来短接串在定子回路的制动电阻。SQ1、SQ2和SQ3、SQ4是变速操纵盘上的限位开关,SQ5和SQ6是主轴进刀与工作台移动互锁限位开关,SQ7和SQ8是镗头架和工作台的正、反向快速移动开关。

2.画PLC外部接线图

改造后的PLC控制系统的外部接线图中,主电路、照明电路和指示电路同原电路不变,控制电路的功能由PLC实现,PLC的I/O接线图如图2所示。

3.设计梯形图

根据PLC的I/O对应关系,再加上原控制电路(图1)中KA1、KA2和KT分别与PLC内部的M300、M301和T0相对应,可设计出PLC的梯形图如图3所示。

设计过程中应注意梯形图与继电器电路图的区别。梯形图是一种软件,是PLC图形化的程序,PLC梯形图是串行工作的,而在继电器电路图中,各电器可以同时动作(并行工作)。

移植设计法主要是用来对原有机电控制系统进行改造,这种设计方法没有改变系统的外部特性,对于操作工人来说,除了控制系统的可靠性提高之外,改造前后的系统没有什么区别,他们不用改变长期形成的操作习惯。这种设计方法一般不需要改动控制面板及器件,因此可以减少硬件改造的费用和改造的工作量。

操作系统移植 篇4

将嵌入式设备引入操作系统,对于整个系统的硬件和软件资源,操作系统都可以合理有效地管理,这对整个系统的性能有了很大程度的提升。而当执行一个复杂的应用程序时,嵌入式操作系统可将它分解为若干个实现特定独立功能的子任务模块,模块之间则通过任务通信机制、任务管理来实现一个完整的功能,这种“自下而上”的结构化设计同时也便于系统开发。

FreeRTOS(Free Real Time Operating System)作为一个轻量级嵌入式实时操作系统,凭借其开源和完全免费的优势,满足了大多数中小型嵌入式系统对RTOS的需求,得到了越来越广泛地应用。FreeRTOS拥有源代码公开、可移植、可裁剪、调度策略灵活及轻量级等特点,适用于绝大多数处理器,在国外业界倍受开发者青睐。在此,笔者对实时操作系统FreeRTOS在S3C44b0x上的移植进行了分析研究,并设计相关实验进行验证,最后指出FreeRTOS操作系统的优势与不足。

1 FreeRTOS内核分析①

FreeRTOS内核管理(图1)包括任务管理、时间管理、内存管理和通信管理4部分[1]。

FreeRTOS通过任务控制块对任务施行管理;时间管理包括时钟的产生管理和任务延时管理;内存管理中,FreeRTOS为用户提供了4种不同的内存分配管理方案,用户可以根据需求选择合适的一种;此外,内核中还提供任务通信管理机制,分为消息管理和任务同步管理。其中同步机制又包括信号量和互斥量,FreeRTOS没有消息邮箱同步机制,所有的同步机制都是基于消息队列来实现的[2]。

2 FreeRTOS任务管理

2.1 FreeRTOS任务模型

FreeRTOS对任务数量没有限制。相较于其他实时操作系统,FreeRTOS有一个突出的特点,即在任务的优先级管理中允许不同任务之间可以设置相同的优先级。在FreeRTOS中任务可设置0~255个不同的优先级,设置的数值决定了任务的优先级别,数值越大对应任务的优先级别越高,空闲任务的优先级最低,对应的数值默认为0,它能执行的前提是CPU中不存在其他更高优先级的任务需要执行。除此之外,每当创建一个任务时,系统都会为它分配独立的任务堆栈空间和一个任务控制块TCB,而FreeRTOS整个内存空间的大小用户可以在系统配置文件中进行相应配置[3]。

2.2 FreeRTOS任务调度策略

FreeRTOS实时操作系统内核在工作时可设置为两种类型,即可剥夺方式和不可剥夺方式[4]。当系统内核设置为可剥夺工作方式时,最高优先级的任务一旦就绪,总能得到CPU的控制权,系统允许优先级别高的任务抢占剥夺优先级别低的任务的CPU使用权。同时,FreeRTOS允许不同的任务之间使用相同优先级,任务调度器可以通过时间片轮询方式来执行优先级别相同的任务。此外,FreeRTOS支持抢占式和协作式混合任务调度策略。从抢占式调度时序图(图2)可以看到,task1、task2、task3和系统空闲任务idle task,所对应的优先级分别为5、2、2、0;在t3和t6时刻,任务task2处于就绪状态,剥夺空闲任务idle task对于CPU的使用权,进入运行状态,在t7时刻,CPU的使用权则被更高优先级的任务task1剥夺。

FreeRTOS支持固定优先级任务调度,即当有两个任务处于就绪状态时,系统将优先执行优先级别高的,但在某些应用场合中系统需改变任务的优先级[5]。如遇到两个相同优先级别的任务时,系统在固定优先级调度策略中,可以通过采用FIFO(先进先出)的调度机制,即先获得CPU执行权的任务先执行,实现CPU时间片轮询的调度方式,从而处理相同优先级别的任务[1,6]。如图2所示,优先级相同的任务task2和task3在t3时刻都处于就绪状态,由于task2先进就绪链表,从而task2先获得CPU执行权,按照时间片轮询调度原则执行task2与task3。

2.3 任务同步通信

FreeRTOS操作系统中,任务间的同步通信是通过信号量与互斥量两种机制来实现的,其中信号量包括计数信号量、二值信号量和递归信号量[7,8]。这两种任务同步通信机制都是基于队列机制来实现的。通过获取信号量,需执行的任务获得CPU执行权,执行完后再通过释放信号量来让出CPU使用权。需要注意的是,通信的信号量必须在使用之前先创建[1,9]。

计数信号量的作用是事件计数和资源管理。在事件计数中,通过获取和给出信号量,对信号量的计数值减1或加1,来计数已发生的事件数与已处理的事件数之间的差值。在资源管理中,计数值用来统计资源的可用数目。具体的做法是:在初始化创建时先设定一个可用资源总数,当一个任务需获取资源的使用权时,先获得信号量同时计数信号量的值减1;在任务执行完后将给出信号量释放资源,信号量计数值加1;当系统没有可用资源时其计数值为0[1,10]。

二值信号量实质就是一个特殊的队列的宏[1,11]。定义一个二值信号量为深度为1的一个队列,队列不满时即为空,此时信号量的值为0或1,所以称为二值信号量。二值信号量和互斥量极为相似,两者不同的地方是互斥量包含了优先级继承机制,而二值信号量并没有包括。因此,在任务与任务、任务与中断之间同步运用最好选择二值信号量;而两个任务间相互排斥时更适合运用互斥量[12]。

利用二值信号量实现任务与中断同步的时序图如图3所示。在t2时刻中断发生,执行相应的中断服务函数,在中断服务函数中调用x Semaphore Give From ISR函数释放信号量。在FreeRTOS中只有带ISR结尾的API函数才能在中断处理函数中被调用。Handler_Task同步任务的优先级必须比被中断前执行的任务优先级高。中断服务例程释放信号量,同步任务被唤醒并获得CPU使用权。在t3时刻中断服务函数处理完之后,同步任务随之执行,执行完后释放信号量。同步任务又进入阻塞状态,等待下一次中断的到来。在中断服务例程中快速处理少量的操作,大量处理置于同步任务当中完成,如此便完成了中断与任务之间的同步通信。

3 FreeRTOS的移植

3.1 内核源代码

与大多数嵌入式实时操作系统一样,FreeR-TOS也针对不同编译器和不同微处理器为开发者提供了移植接口的模板。但并非所有型号都有,开发者可以根据自己选用的编译器和微处理器类型选择相应或相近的模板作为参照来进行移植。在此,笔者以ARM7_LPC2129_Kiel_RVDS例程为模板,移植到S3C44b0x处理器的目标板和ADSv1.2编译器上。此外,FreeRTOS在设计时,大部分内核代码都是由C语言编写,只有很少一部分与硬件相关的代码是用汇编实现[1,12],以便于开发者移植应用。

如图4所示,FreeRTOS支持的与硬件无关的内核所有源代码包含在4个.c文件中,分别是queue.c、tasks.c、list.c和croutine.c,其中前3个是FreeRTOS内核接口,croutine.c实现了常规功能封装,一般用于在内存资源极为有限的系统中,这里不考虑。另一部分与硬件相关的源代码,LPC2129例程中包含port.c、portasm.s、portmacro.inc和portmacro.h共4个接口文件,在移植过程中只需对这部分做相应修改即可。

3.2 移植接口实现

当以汇编代码来实现操作系统进行任务切换时,portmacro.h和portmacro.inc这两个宏文件起到保存和恢复现场的作用,分别保存寄存器R0~R14的值。相关程序如下:

参考上述代码可以根据堆栈“后进先出”的原则写出portRESTORE_CONTEXT恢复现场部分的代码,这里不做赘述。

portmacro.h文件中定义了堆栈的增长方向、一些操作系统的数据类型及临界区管理函数等与编译器相关的宏定义。

portasm.s文件在移植过程中需要根据不同CPU提供的时钟和不同的编译器语法进行修改从而给操作系统提供时钟滴答、软中断等功能。此处,编译器需修改为ADSv1.2编译器以识别语法,相关处理要以不同处理器时钟为准,这里选用S3C44b0x定时器0为系统提供时钟嘀嗒,需自行实现如下代码:

port.c文件中包含为系统任务创建堆栈初始化、启动任务调度、时钟中断和临界保护的代码。另外需自行实现的一部分代码是,为临界保护提供的开/关CPU中断函数,这两个函数是通过对S3C44b0x中CPSR寄存器中断位写1或清0,在portasm.s文件中以汇编的形式实现的,具体代码如下:

4 实验测试

4.1 任务调度实验测试与分析

根据任务的调度算法原理,系统总是运行进入就绪态任务级最高的任务。为此,首先创建一个主任务,优先级为2,在主任务中再创建3个子任务分别是灯闪烁任务Task_LED、RTC系统时钟显示任务Task_Rtc_Disp和流水灯任务Task_Group Led,优先级分别为5、2、2。主代码如下:

系统执行流程如图5所示。

串口打印的任务调度画面如图6所示。可以看出,Task_LED任务的优先级最高为5,CPU首先执行Task_LED灯闪烁任务,其他任务优先级相同,以时间片轮换调度执行,输出结果与任务调度策略分析的任务执行策略吻合。

4.2 任务同步通信测试与分析

以二值信号量为例,进一步说明FreeRTOS操作系统中的任务间进行同步通信的过程。在二值信号量被使用之前首先需要被创建,创建一个二值信号量的代码如下:

当二值信号量被创建成功后,根据其宏定义会释放出信号量。由于主任务的优先级最高,因此主任务通过x Semaphore Take函数首先获得信号量,获得CPU的执行权,最先执行Task_Main任务,代码如下:

通过PC串口终端打印出来的任务调度执行情况画面如图7所示。可以看出,信号量创建完成后发出并由Task_Main任务最先获取,当执行完Task_Main任务后,主任务调用x Semaphore Give函数,随后让出CPU使用权,之后调用延迟函数v Task Delay使主任务进入阻塞态。灯闪烁任务通过x Semaphore Take函数获得信号量,获得CPU执行权,并开始执行,依此类推。可以看出,每个任务之间同步执行策略与任务同步执行策略的分析相符。

5 结束语

通过分析FreeRTOS实时操作系统内核,操作系统完成了从ARM7_LPC2129芯片到ARM7_S3C44b0x芯片、Kiel_RVDS编译器到ADSv1.2编译器的移植,并通过任务调度和任务同步通信实验测试证明,FreeRTOS具有内核小、移植简单及功能完善等特点,为嵌入式系统的开发与应用提供了一定参考。虽然FreeRTOS在我国仍处于初步应用阶段,但凭借其开源、内核小、开发周期短及支持较多处理器架构和多种集成开发环境等优势,在我国将会成为嵌入式开发者较好的选择。

摘要:分析了实时操作系统FreeRTOS的原理、内核组成与任务管理机制。完成FreeRTOS实时操作系统在S3C44b0x硬件平台上跨平台、跨编译器的移植。同时设计了固定优先级调度与二值信号量任务间的同步通信实验,验证了FreeRTOS操作系统移植的正确性和实验设计的合理性。

关键词:FreeRTOS,移植,S3C44b0x,任务同步通信,任务调度

参考文献

[1]余晓光.基于实时操作系统FreeRTOS的Lwip协议的移植研究[D].昆明:昆明理工大学,2013.

[2]王铮,靳世久,李健,等.嵌入式实时操作系统C/OSII在管道泄漏检测中的应用[J].化工自动化及仪表,2006,33(5):55~57.

[3]黄义仿,朱晓然,赵荣珍,等.基于小波分析和矩不变量的转子故障量化特征提取研究[J].化工机械,2007,34(6):309~312.

[4]李志丹,姜印平,李亚南.基于S3C44B0X和SL811HS的USB主/从机模块设计[J].化工自动化及仪表,2006,33(4):37~39.

[5]Sakairi T,Palachi E,Cohen C,et al.Model Based Control System Design Using Sys ML,Simulink,and Computer Algebra System[J].Journal of Control Science and Engineering,2013,2013:1~14.

[6]Bauer A,Leucher M,Schallhart C.Runtime Verification for LTL and TLTL[J].ACM Transactions on Software Engineering and Methodology,2011,20(4):14.

[7]江杰,赵凤鸣,陈洪翰,等.Ethernet Powerlink调度机制与实时通信剖析[J].自动化仪表,2013,34(2):84~88.

[8]孙伟,陈杨,张明伟,等.基于ARM CM3和RTOS的矿用电磁调速电机控制器软件设计[J].煤矿机械,2014,35(9):236~238.

[9]甘勤操,陈西曲.基于V4L2的嵌入式视频监控系统的研究[J].武汉轻工大学学报,2014,33(1):61~64.

[10]梁艳.基于Open CV的ARM嵌入式网络视频监控系统[J].微型机与应用,2013,32(9):29~31.

[11]段永颢,陈睿.基于启发式的静态中断数据竞争检测方法[J].计算机工程与设计,2013,34(1):140~145.

操作系统移植 篇5

现在,一些公司已经开始研究这些中心基准系统进化的下一个阶段。这篇文章将探索移植到更高深的系统中的原因。

在已经存在的中心基准系统中的用户通常分为三个不同的组:

·消费者:使用建立在这些系统的终端用户或者系统来支持他们的工作。

·贡献者:在中心系统中能更新数据的用户或者系统作为他们日常活动的一部分。

·数据管理者:维护数据的完整性以及防止数据遗漏的用户和系统使用的元数据。

这三个组结合的非常协调,它们都和系统有关。

但是,这些系统中的每一个都非常容易和其他的系统断开。那么当这些数据在其他的系统中改变,这些改变不能在所有的系统中复制;或者是延迟复制。这种断开能潜在的导致系统的有效性被破化并可能导致更糟糕的局面——让终端用户根据错误的数据来作出决定。

一个解决方案就是为所有的主系统构造一个单独的主基准系统,这些主系统发布自己的数据,我们可以从这些主数据来收集想要的信息。

一个例子

我们使用一个普通公司来做例子来演示这个方法的好处。就叫这个公司为X,它们已经确定为主数据系统服务的不同类型的数据:

1 ProMan:一个产品管理的工具这个工具可以存储公司销售的信息,并是系统的关键信息比如产品姓名,商标,产品信息文档等等,

2 FormMan:一个明确表达管理工具它存储的信息关于怎么样管理销售并存储关键的信息比如产品的成分和处方,包括每个组件的任何安全文档或者最终产品如何正确安全的使用和存储。

3 GraphMan:一个图形和标志的存储库的存储文件存储了X公司的商标,产品和公司的logos,同时详细的说明在什么时候什么地方使用这些信息,这些图片通常由个人设计师来设计。

4 HRMan:人事管理工具,它列出了所有的雇员以及他们的详细信息等等。

5 LabelMan:产品标签管理工具,它管理标签的创建。

6 PackMan:一个封装管理工具,它管理被X公司产品使用的封装。

现在你了解了吧,它们每一个都是特别的数据。表面上来看,这个公司有良好的管理数据的能力,但是,我们不能确定在FormMan中的每个处方都没有作为X公司当前销售的产品来使用,并可以被ProdMan来管理。同时,如果我们给每个产品贴上标签那也不容易说明我们正在销售。我们怎么添加一个新的产品?最近,这个在每个系统正被双倍的执行尽管是不同的方法。

每个系统都是被分开管理和维护的,因为有按键的错误,我们会有不同的数据;大小写键盘的不同使用方法,间隔等等,或者还有语言上的不同,比如美式英语和英式英语。

我们可以在这些程序中使用一个顺从练习,但是这可能要花费一段很长的时间。在大多数时候,我们已经有了一个公认的主系统因此,我们可以在适当的时候纠正其他的系统,要不是有数据元素,我们就不能这么做,并且我们不能通过其他的方式计算出哪个值是正确的。

胰腺移植PK胰岛移植 篇6

胰腺移植发展史

早在1893年,Williams等曾将刚杀死的羊的胰腺移植在一位15岁糖尿病儿童的皮下组织内,开启了胰腺移植的序幕。迄今为止,全世界已施行了3万例胰腺移植,其中85%的患者由于合并肾功能衰竭同时实施了肾移植,即胰肾联合移植。资料表明,胰腺移植1年内功能存活率为80%~90%,病例最长存活时间已超过30年。

我国最长功能存活的胰肾联合移植为8年,创亚洲最长纪录。胰腺移植术后,患者的生活质量得到改善,并恢复了健康的心理和精神状态。然而胰腺移植存在4个主要问题:在国内异体供胰来源困难,未采用“脑死亡”概念,使供胰质量无保障;手术方式有待改进,以寻找最佳处理胰外分泌的处理方式;术后并发症如血栓形成等;发生抗排斥反应,必须终身服用免疫抑制剂,治疗肾毒性不良反应会加重患者本已沉重的医疗负担。

胰岛组织移植的优点

虽然早在1902年,就有人提出利用移植分泌胰腺“降糖物质”的组织,来治疗糖尿病,但真正把分泌胰岛素的组织作为移植物付诸于实践,是近30年的事。在胰岛分离技术方面,人类经历了至少20年的徘徊过程,目前关于该项研究仍在摸索中前进。加拿大艾伯塔大学Edmonton小组采用释放酶(liberase)经导管灌注消化胰腺,在无异种蛋白环境中纯化胰岛,新鲜胰岛经门脉肝内移植,并使用不含糖皮质激素的免疫抑制方案,获得巨大成功,并形成了著名的Edmonton方案。随后已有多家医院开展临床成人胰岛移植,获得了初步的疗效。2006年,国际胰岛移植登记处(CITR)对593次移植进行了总结,1年胰岛素不依赖率为46.6%,2年为33.3%。

胰岛移植具有以下几方面的优势:

1、胰岛不具备一定的器官外形和解剖结构,可移植身体多个部位,通过注射来完成移植过程,既可提供具有生理活性的移植物,又能降低手术风险。技术要求简单、手术安全、创伤小,即使移植失败也仅是移植物失去功能而不会危及患者生命,并且还可以再次移植;

2、通过体外培养使胰腺外分泌腺细胞在1周内大量死亡;通过对胰岛细胞微囊化预处理等方式诱导免疫耐受,降低免疫原性,减少免疫抑制剂用量,而且移植后急性排斥反应少,不需终生应用免疫抑制剂;

3、医用生物智能化材料的发展,如糖敏感材料的运用,有望模拟胰岛生理功能,恢复生理性血糖胰岛素调节模式,从而维持血糖恒定,防止并发症的发生。

操作系统移植 篇7

关键词:船载终端,ANDROID,移植,驱动开发

1 引言

近年来, 随着经济水平的不断发展, 人们的水上航行活动越来越频繁, 如捕鱼、水上运输、水文探测等。而传统的船载导航通信手段逐渐难以适应新的水上交通管理要求。因此, 智能船载导航系统应运而生。智能船载管理系统能够对轮船的水上管理提供更智能化、人性化的管理方法, 能够对轮船进行实时定位导航, 与远程管理中心进行无线通信, 还能够对船舱里的某些部位进行视频监控等。随着对船载管理系统的能力要求不断提高, 以及计算机技术、通信技术的发展, 选择一款功能强大、易于开发、维护和升级, 并且兼容性强的操作系统来支撑船载管理系统的运行就显得异常重要。

Android操作系统作为Google开发的一款智能操作系统, 为船载管理系统的操作系统提供了新的解决方案。Android具有开源和易于移植的特点, 同时Android操作系统拥有数量庞大的开发者支持, 软件成熟度高, 技术资料丰富, 开发和维护更加方便。

2 ANDROID操作系统介绍

Android是Google推出的一种基于Linux的自由及开放源代码的操作系统, 主要使用于嵌入式领域。目前Android已经广泛的应用到很多电子产品上, 如智能手机、上网本、平板电脑、电视、机顶盒、掌上游戏机、汽车设备、船载导航终端、机顶盒等, Android的开源特性也使其赢得了更多的开发者, Android的上层应用都采用Java编写, 无论是在ARM, 还是在x86, 不同的硬件平台上都可以使用这些应用程序。同时Google也将其很多应用移植到Android上来, 如Google地图、Google邮箱、Google搜索服务等, Android上的应用程序也变得越来越丰富, 随着用户和应用的日益增多, 这样一个崭新的平台就可以很快走向成熟。

3 系统架构设计与实现

本系统软件采用Android4.2操作系统, 外围设计有北斗/GPS导航模块、3G无线通信模块、WIFI、音频、SPI总线等。其结构如图1所示。其中CPU选用的是三星的Exynos4412嵌入式处理器, 该处理器是一款功能强大的四核处理器, 最大支持1.6G主频。外围配置有北斗/GPS双模导航模块, 能够保证在各种复杂的环境中都能够准确定位。通信部分设计有3G、WIFI、以太网三种网络接入方式, 另外还配置有音频控制芯片, 能够实现语音导航、语音报警等功能。

4 主要模块驱动开发与实现

4.1 2G/3G驱动

本设计使用的3G模块是华为公司的MU6093G模块, 基于WCDMA网络制式。该模块为USB接口, 装上SIM卡, 上电之后即可工作, 自动完成网络查找、网络注册等工作。MU609模块通过USB与ARM芯片连接, 该USB接口在Linux系统中转换成了四个串口节点, 其中有两个串口分别用于AT指令发送通道, 和数据连接的拨号通道, 另外两个串口节点未使用。

在软件上, 3G部分分为Modem驱动、RIL (Radio Interface Layer) 、电话服务框架、应用这四层结构, 如 (图2) 所示, 移植时需要改动主要是Modem驱动和RIL。Modem驱动部分的移植步骤如下: (1) 打开option.c文件, 在static struct usb_device_id option_ids[]这个数组中添加{USB_DEVICE (0x19f5, 0x9013) }这样一项成员, 其中0x19f5为该模块USB的VID, 0x9013为该模块USB的PID。 (2) 在内核的编译时, 执行make menuconfig命令, 在编译选项中的网络选项部分选中PPP相关的选项, 如图3所示。

rild守护进程的启动在Android的init.rc启动脚本里面实现, 在开机时就自动启动, 当用户选择打开3G网络连接时, 系统会去检查当前是否有网络已注册、SIM是否插入、网络信号强度, 然后读取当SIM卡的IMSI, 提取出当前网络的MCC和MNC号码, 查询出当前网络的APN信息, 调用拨号脚本开始拨号。

4.2 北斗/GPS驱动

中国北斗卫导航系统是我国自行研制的全球卫星定位与通信系统。是继美国全球卫星定位系统和俄罗斯全球卫星导航系统之后第三个成熟的卫星导航系统。系统由空间端、地面端和用户端组成, 可在全球范围内全天候、全天时为各类用户提供高精度、高可靠定位、导航、授时服务。本设计采用的是北斗与GPS双模定位模块, 能有效的在各种复杂地理环境下定位导航。该模块的定位数据遵循NMEA-0183标准数据格式, 主要的定位信息有:

GPGSV:可见卫星信息;GPGGA:GPS定位信息;GPGSA:当前卫星信息。

该定位模块使用串口与CPU通信, 在linux底层驱动只需要有uart接口就可以接收到gps数据了, 而android的hal层会调用linux内核层的uart驱动, 所以定位模块的移植主要是需要对HAL层代码进行移植, 在HAL层打开串口, 读取数据, 根据数据格式对数据进行解析。

在HAL层主要使用Gps Location这个结构体这个结构体记录定位信息, 经度、纬度、海拔、速度、精确度、世界标准时间等信息都记录在这个结构体中。在HAL层中需要注册一个HW模块, 其主要代码如下

而gps_module_methods又调用了open_gps, 通过调用open_gps可以得到athr Gps Interface数组, 在该数组中定义了一系列的操作函数, 主要是用于GSP的打开关闭、初始化、数据解析等。

4.3 WIFI/以太网

Android的WIFI系统结构至下而上主要分为Linux下的WIFI驱动层、wpa_supplicant可执行程序、WIFI的硬件适配层、WIFI的JNI接口、WIFI的Java框架层、WIFI应用层。

WIFI驱动层移植的主要步骤如下:

在编译Linux内核之前先执行make menuconfig命令配置内核, 在网络协议部分选中IEEE 802.11相关的支持选项, 如图4所示, 然后执行make命令编译内核。

从Realtek官网下载RTL8192cu最新的Linux驱动, 修改makefile, 把交叉编译器的路径改成实际安装的路径, 把内核代码的路径改成存放Linux内核代码的路径, 然后执行make命令进行编译, 编译完成之后会生成wlan.ko这样一个驱动模块文件。把wlan.ko这个文件放到Android系统的/system/lib/modules目录下。在Android系统的init.rc脚本里面添加wpa_supplicant、dhcpcd两项服务, W I F I硬件适配层会启动w p a_s u pp l i c an t服务, 建立wpa_supplicant守护进程, 当wifi与AP建立连接后, 就会启动dhcpcd服务去获取IP地址。

4.4 总线驱动 (SPI)

SPI是一种高速的, 全双工, 同步的通信总线。SPI以主从方式工作, 通常有一个主设备和一个或多个从设。SPI总线的引脚主要有SDI (数据输入) , SDO (数据输出) , SCLK (时钟) , CS (片选) 。其中CS是控制芯片是否被选中的, 也就是说只有片选信号为预先规定的使能信号时 (高电位或低电位) , 对此芯片的操作才有效, 这就允许在同一总线上连接多个SPI设备成为可能。

在linux内核中, SPI的驱动架构可以分为如下三个层次:SPI核心层、SPI控制器驱动层和SPI设备驱动层。在本设计中SPI驱动移植主要是移植SPI设备驱动层, 本设计使用的是用户模式SPI设备驱动程序。首先需修改mach-smdk4x12.c, 添加SPI的Platform device, 通该device传出SPI的GPIO配置、中断号等信息, 然后在开机的时候注册该Platform设备。然后执行make menuconfig配置内核, 在SPI配置选项中选择User mode SPI, 如 (图5) 所示。

编译内核, 重新烧写运行后, 在/dev/目录下就会生成SPI的设备文件节点spidev0.1在应用程序中就可以对该节点进行read、write、ioctl等操作, 实现SPI传输。

4.5 音视频驱动

音频信号是一种连续变化的模拟信号, 但计算机只能处理和记录二进制的数字信号, 由自然音源得到的音频信号必须经过一定的变换, 成为数字音频信号之后, 才能送到计算机中作进一步的处理。同时在播放音乐的时候, 有处理器输出的都是数字信号, 必须要转换成模拟信号才能输出到喇叭进行播放。音频管理芯片就是负责模拟与数字音频信号的转换, 同时, 音频管理芯片还负责各个音频通道的切换。本设计采用的音频管理芯片是WM8994, 由于在Linux内核中已经存在有WM8994的驱动, 因此需要根据实际的硬件电路设计, 对平台相关的部分代码进行修改移植。

首先在内核源代码目录输入:make menuconfig开始配置内核, 在ALSA for So C audio support目录中选择WM8994的支持选项。

然后在mach-smdk4x12.c中, 添加如下内容:

这样, 我们就添加好了WM8994音频设备的驱动。

5 结语

Android操作系统具有开源、功能强大的特点, 在船载管理终端上使用Android操作系统, 能够降低整个系统的开发难度, 缩短开发周期, 同时在系统中使用北斗/GPS定位导航技术、3G无线通信技术等, 能够为船载管理终端提供更加丰富的功能, 具有较强的实用价值。

参考文献

[1]吴军, 周转运.嵌入式Linux系统应用基础与开发范例[M].北京:人民邮电出版社, 2007, 91-95.

[2]李焱, 苗勇, 北斗系统在智慧航运领域的应用研究[J].数字通信世界, 2013, 02:22-26.

操作系统移植 篇8

随着嵌入式设备的广泛应用, 嵌入式系统和实时系统越来越受到重视。由于Linux系统全面的功能、广泛的芯片支持以及免费的特点, 利用Linux搭建嵌入式操作系统越来越成为人们的首选方案。然而, Linux是一个通用的操作系统, 其关闭中断时间过长和上下文切换时间的不确定性, 决定了它无法直接应用于嵌入式实时环境中。针对实时性应用, 由新墨西大学的Victor Yodaiken等人开发了RTLinux, 采用嵌入式的、高效的可抢先的实时调度核心, 增加了一个仿真程序来替换Linux的底层中断程序。是源代码开放的具有硬实时特性的多任务操作系统。

本文对RTLinux的结构和实时性进行了分析, 给出了内核编译的方法和移植到S34C2410开发板的步骤, 并开发应用程序对RTLinux的实时性进行了验证。

(二) RTLinux的结构

RTLinux将一个小的可抢占的实时内核植入标准Linux内核底层, 与Linux内核共享控制处理器。来自硬件的属于实时内核的中断将直接被处理, 非实时中断则通过中断仿真程序由Linux内核处理。因此, 实时内核的操作可以得到立即响应, 而且Linux内核不能延迟实时任务的执行。其原理结构图如图1所示:

RTLinux将标准Linux内核作为简单实时操作系统子内核里优先权最低的现场来运行, 并仿真了Linux内核所看到的中断控制器。这样, 在Linux进程和硬件中断之间, 本来由Linux内核完全控制, 现在在Linux内核和硬件中断的地方加上了一个RTLinux内核的控制。Linux的控制信号都要先交给RTLinux内核进行处理。

RTLinux在默认的情况下采用优先级的调度策略, 即系统调度器根据各个实时任务的优先级来确定执行的先后次序。优先级高的先执行, 优先级低的后执行, 这样就保证了实时进程的迅速调度。RTLinux将任务调度器本身设计成一个可装载的内核模块, 用户可以根据自己的实际需要, 编写适合自己的调度算法。在高速的处理器上能够获得低于10us的中断反应时间, 其优势在于实时和非实时的线程是被分离的。

(三) RTLinux内核编译

RTLinux内核的编译实际上是在Linux内核上打上一个RTLinux补丁, 其方法如下:

1. 下载内核及补丁

下载内核文件 (2.4.28内核) 及补丁 (RT-Linux3.2-rc1) , 将下载的两个文件放置到/var/tmp目录。用tar命令释放内核源代码, 然后将RT-Linux打包到Linux核中。打包命令如下:

2. 配置内核

首先通过命令make mrproper删除源代码目录中残留的.o文件和其它从属文件。然后make menuconfig, 启动内核配置程序。

3. 根据实际需要配置内核

Linux的内核配置程序提供了一系列配置选项。对于每一个配置选项, 用户可以回答"*"、"m"或""。其中"*"表示将相应特性的支持或设备驱动程序编译进内核;"m"表示将相应特性的支持或设备驱动程序编译成可加载模块, 在需要时, 可由系统或用户自行加入到内核中去;""表示内核不提供相应特性或驱动程序的支持。不合理的配置可能造成内核编译失败。

4. 编译内核

首先, 建立编译时所需的从属文件:make dep;然后, 清除内核编译的目标文件:make clean;最后, 进行内核编译内核:make bzImage。内核编译成功后, 会在/usr/src//rtlinux/linux/arch/i386/boot目录中生成一个新内核的映像文件bzImage。

5. 启动新内核

在此之前, 如果用户在配置内核时设置了可加载模块, 则需要对这些模块进行编译, 以便将来使用insmod命令进行加载。启动新内核具体步骤如下:

第一步:将/usr/src/rtlinux/linux/arch/i386/boot/bzImage文件拷贝到/boot目录下;

第二步:生成镜像文件rtlinux, 执行成功后会在/boot文件夹下生成rtlinux.img;

第三步:配置/boot/grub/brug.conf文件, 然后保存退出;

第四步:重新启动系统, 进入RTLinux;

第五步:编译RTLinux, 使用make devicds和make install命令安装实时模块, 此时应确保mbuff, rtl_fifo, rtl, rtl_posixio, rtl_sched, rtl_time等动态加载到RTLinux;

第六步:重启后进入RTLinux, 编译成功。

(四) RTLinux移植

RTLinux移植的目标板选用S3C2410开发板实现, 主要包括三个部分:交叉编译环境建立, Bootloader移植和RTLinux内核移植。

1. 交叉编译环境

交叉编译环境是一个由编译器、连接器和解释器组成的综合开发环境。交叉编译工具主要包括binutils、gcc和glibc几个部分。整个过程如下:

(1) 建立编译目录

(2) 建立内核头文件

(3) 建立二进制工具binutils

(4) 建立初始编译器bootstrap gcc

(5) 建立c库glibc

(6) 建立全套编译器full gcc

2. Bootloader移植

Bootloader是嵌入式系统的引导加载程序, 它在操作系统内核运行之前运行, 主要对硬件设备进行初始化、建立内存空间的映射图, 从而配置嵌入式系统的软硬件环境。在此, 我们选用的是U-Boot。U-Boot是德国DENX小组开发的用于多种嵌入式CPU的Bootloader程序, U-Boot支持多种包括Linux、VxWorks、NetBSD、LynxOs等在内的多种嵌入式系统以及PowerPC、ARM、x86等诸多常用系列的处理器。

首先定义开发板名称为:test2410, 并在u-boot中建立自己的开发板类型。然后修改Makefile:@./mkconfig$ (@:_config=) arm arm920t test2410 NULL S3C24x0。在目录中建立test2410, 并在include/configs/中建立配置头文件, 根据自身设置指定交叉编译工具的路径。然后就可以依照开发板的内存区的配置情况, 修改lowlevel_init.S文件。修改步骤完成后, 对其进行重编译, 测试能否成功。最后通过仿真器烧写到flash中, 就可以从NAND flash启动了。

3. 内核移植

对RTLinux内核的移植过程可以参照普通Linux内核的移植。修改Makefile, 设置flash分区, 包括分区信息的设置, 启动时初始化配置等操作;配置并编译内核, 成功后下载到开发板。

(五) 应用程序设计

1. 程序结构

由图1可知, RTLinux有两个内核。当有实时任务需要处理时, RTLinux运行实时任务;无实时任务时, RTLinux运行Linux的非实时进程。因此, 每个应用程序包括实时任务和非实时任务。实时任务是一种可由多个线程构成的内核任务, 工作在操作系统核心态的实时区, 要求尽可能简单, 只包含直接与时间相关的代码;而位于非实时区的用户进程可利用常规Linux操作系统提供的大量资源, 主要实现为数据的处理、传输以及用户界面等。实时任务与运行在Linux内核中的进程之间通过FIFO与共享内存的方式进行通讯和数据交换。图2为应用程序结构图。

2. 实时部分

通过API函数init_module完成对实时部分的初始化, cleanup_module实现关闭实时模块的任务。开发了上下文切换测试程序, 现给出主函数中循环部分的关键代码:

3. 非实时部分

非实时部分开发了一个应用程序, 在控制台下编写。其关键代码如下:

将应用程序移植到开发板中并进行测试, 其中断延迟的平均值在2.5微秒左右, 明显小于标准Linux的中断响应时间。因此RTLinux是符合实时运算标准的操作系统。

(五) 结论

RTLinux是一个具有硬实时能力的实时操作系统。可以广泛应用于工业控制、远程通信、仪器工业、多媒体等领域。本文对RTLinux的嵌入式系统结构和实时性进行分析, 完成了内核的编译和移植, 并开发了应用程序进行测试。在此基础上可以对应用程序做进一步开发, 以实现各种不同的嵌入式实时性应用。

摘要:对嵌入式实时操作系统RTLinux的结构和实时性进行了分析, 给出了内核编译的方法, 以及移植到S34C2410开发板的过程, 包括交叉编译环境建立、Bootloader移植和RTLinux内核移植。系统应用程序开发由实时部分和非实时部分构成, 给出了各部分设计的关键代码, 并进行了验证。测试结果表明, RTLinux符合实时性操作系统的要求。

关键词:嵌入式实时操作系统,RTLinux,移植,Bootloader

参考文献

[1]William Stallings.Operating Systems Internals and Design Principles[M].北京:电子工业出版社, 2001.

[2]陈文智, 王总辉.嵌入式实时系统RTLinux的实现和测试[J].计算机工程与应用, 2001 (19) :157-159.

[3]张帆.基于RTLinux的硬实时性研究[J].武汉理工大学学报, 2006 (28) :164-166.

[4]李华军, 等.RTLinux在列车检测系统中的应用[J].计算机工程, 2009 (35) :232-235.

操作系统移植 篇9

关键词:ARM嵌入式平台,WinCE操作系统,TQ2440开发板,系统移植

1 ARM及开发板硬件平台

ARM是对一类RISC微处理器的通称。目前,ARM微处理器已遍及工业控制、消费类电子产品、通信系统、网络系统及无线系统等各类电子市场。S3C2440A,是一种低价格、低功耗、高性能小型ARM微控制器,其杰出的特点是CPU为一个16/32位ARM920T的RISC处理器。采用S3C2440A作为中央处理器的开发板很多,该文采用天嵌科技公司生产的TQ2440开发板为硬件平台,其主频达到400 Hz外部存储器为64 MB,带有2个5线异步串行口、2个USB1.1接口和2个网口(10 M,100 M各一),为下载烧录操作系统提供了便利。

2 WinCE实时嵌入式操作系统[2]

Windows Embedded CE是一个硬实时操作系统,它提供可靠的内核服务来支持低延时、确定性、实时性的嵌入式系统设计。CE具有一个实时系统的以下特征:可抢占的多线程;优先线程调度;优先级反向预防;可预测的线程同步。

实时系统分为硬实时系统和软实时系统。软实时系统可以超过其限定的时间响应,允许偶尔超过时间界限,但仍可以保证系统性能处于合理的、可接受的水平。硬实时系统则不会超过任何限定的时间响应。当硬实时系统不满足其限定的响应时间时,可能会导致严重的系统故障。

3 Windows环境设置

ARM和WinCE操作系统的结合,提供了统一的、可裁减的、具有伸缩性的低功耗高性能嵌入式系统平台[3]。要把WinCE移植到ARM中,要先对Windows进行相关设置。

3.1 超级终端的设置

在对开发板进行开发时,需要知道开发板的实时状态,这就需要一个对等的通讯,TQ2440开发板与PC串口的交互需要一个终端程序,该文使用的是Windows XP自带的超级终端,如图1所示。

当在以下的操作中,出现:“默认Telnet程序”和“位置信息”对话框时,可根据实际需要进行适当的设置。在“连接描述”中,输入建立的超级终端的名字,当需要选择与开发板连接的接口时,选择COM1(要与后继设置保持一致)物理端口。对出现的“COM1属性”对话框进行如图2所示设置。

在文件中保存超级终端的设置,到此开发板与PC可以通过超级终端进行信息交换。

3.2 DNW软件的设置

DNW跟对等交互的超级终端不同,它是单向的,只能由PC把文件传输给开发板,采用USB协议。双击DNW软件打开对话框界面,点击“Configuration”菜单中的“Options”选项,设置“URAT/USB Options”如图3所示:

通过这样的设置,当计算机往开发板下载文件时,PC把准备写入串行设备的数据先放在UART(Universal Asynchronous Receiver/Transmitter)的临时寄存器中,再通过FIFO(First Input First Output)最终写入到开发板中。

3.3 安装GIVEIO驱动

当要使用Jtag软件SJF2440.exe烧写u-boot时,这需要安装驱动把并口虚拟成IO口,考虑到健壮性,最好使用SPP模式或者是EPP模式。

1)复制文件“giveio.sys”到目录“WINDOWsystem32drivers”下;

2)从控制面板的“添加硬件”进入安装引导;

3)在硬件列表中找到“端口(COM和LPT)”选项,然后继续;

4)在“添加硬件向导”对话框中,“厂商”一栏中,选择“标准端口类型”,

“型号”选择“Communications Port”;

5)找到“GIVEIO”目录,打开文件“giveio.inf”;

6)回到驱动设备安装界面,选择设备“giveio”;

7)按照对话框“添加硬件向导”中的提示,完成驱动的安装。

3.4 安装USB下载驱动

在PC与TQ2440进行USB通信时,需要安装其驱动,安装步骤如下:

1)打开超级终端,接上开发板的串口线和电源线,按住PC键盘的空格键,打开开发板电源,在超级终端上,会进入u-boot的控制台下,如图4所示:

插上USB电缆,PC会自动弹出“找到新的硬件向导”,选择“是,仅这一次(Y)”,然后继续。

2)执行操作:“从列表或指定位置安装(高级)”到“在这些位置上搜索最佳驱动程序”,在浏览文件夹中找到“USB驱动”,然后安装向导开始搜索硬件设备,在出现的对话框中选择“SEC SOC Test Board”选项。

3)在浏览选项中找到“secbulk.sys”文件,双击,开始安装USB下载驱动。检验是否安装成功的标志是打开DNW软件,看其状体,若在标题栏中出现:[USB:OK],则说明USB下载驱动安装成功.

4 Win CE内核的制定

Platform Builder是微软公司发布的一款用于定制Windows CE操作系统的集成开发环境。开发人员可以使用这个集成开发环境完成嵌入式操作系统的定制、编译和调试,并且还可以在这个集成开发环境中进行应用软件、驱动程序的开发等。

4.1 Platform Build 5.0的设置和安装

1)首先安装Framework net 1.0,找到安装程序dotnetfx.exe,在“Microsoft Windows CE 5.0–Setup Type”对话框中选择“Custom(Tools and OS)”,让CPU支持产生的镜像文件。软件的安装尽量放在缺省目录下。

2)对于TQ2440系列开发板,要注意“ARMV4I”的设置,如图5所示:

3)按照对话框的提示,选择“install”和“next”等操作,完成PB的安装。

4.2 编译需要的工程文件

1)在设置好“Workspace Name And Location”后,进入“Board Support Package”配置单中,选择“SANSUNG SMDK2440:ARMV4I”选项;

2)在“Design Template”配置选项中,选择“Mobile Handheld”;

3)在“Applications&Media”配置单中,选择需要的配置,如图6所示:同时,在“Networking&Communications”中,选择缺省设置;

4)工程建立完成后,选择菜单项“Platform”中的“Settings”,在出现的对话框“Platform Settings”中,选择“Locale”,选择对中文的支持,在“Build Options”选项中,不选择“Enable CE Target Control Support”和“Enable KITL”,其他选项选择缺省值,如图7所示:

5)加入MFC组件,依次打开“Catalog→Core OS→Windows CE devices→

Applications and Services Development”,然后选择“Add to Platform”;

6)加入USB键盘鼠标支持特性,依次打开“Catalog→Core OS→Windows CE devices→Core OS Service→USB Host Support→USB Human Input Device(HID)Class Driver”,选择“Add to Platform”,还要选择子项“USB HID Keyboard and Mouse”,同样要执行操作“Add to Platform”;

7)添加文件系统的支持,为了保存注册表,需添加上文件系统对HIVE的支持,对此,首先要添加的是对FAT文件系统的支持,再添加“Storage Manager Control Panel Applet”,然后添加对HIVE的支持,如图8所示:

8)添加对ROM和RAM的支持,如图9所示:

9)修改网络信息,包括IP地址、DNS和网关地址,修改“platform.reg”注册表的值;还要添加输入法和字库等支持,最后进行编译。

10)编译完成后,生成“NK.bin”和“NK.nb0”两个wince镜像内核文件,它位于"..RelDirsmdk2440_ARMV4I_Release"目录下。最后把压缩的NK.bin烧录到开发板中,完成wince的移植。

5 结束语

WinCE系统移植是嵌入式系统开发的重要环节,是进行后续功能开发的软件平台,其移植过程是十分复杂的,需要对WinCE系统本身的结构和文件之间的调用非常清楚,还要求对所依托的硬件足够熟悉,该文在TQ2440开发板上对操作系统内核的移植进行分析论述最终成功进行移植为下一步的系统开发建立基础[4]。

参考文献

[1]陈连坤.嵌入式系统的设计与开发[M].北京:清华大学出版社,2005.

[2]Samuel Phung,张冬松,陈芳园.Windows CE6.0嵌入式高级编程[M].北京:清华大学出版社,2009.

[3]杨宁,王立德,王苏敬,丁国君.基于ARM&WinCE的车载智能显示终端的开发[J].机车电传动,2010(1).

操作系统移植 篇10

1 静态方式分配内存池

静态内存池管理方式中内存池分为池(pool)和块(partition)。之所以称之为静态管理方式,是因为在使用过程中块的大小是固定的(即在创建过程中块大小是确定的)。静态内存池的整体结构如图1所示,池和块都有自己的头,池是由双向循环链表链接而成,块是由单向链表链接而成,每一块的头中还包含了自己属于哪一个池的属性。可用块的信息以单向链表的形式存储于池头中,并且可用块与已经分配的块的个数都在池头中有记录。

1.1 静态内存池的创建

池头中的主要参数包括内存池控制块指针、内存池名(只取8个字符)、起始地址、内存池总大小(字节为单位)、内存池分块大小(字节为单位)、挂起方式(先进先出或按优先级)等,图2是仿真器上运行过程中静态内存池结构体截图。

对图2中两个结构体链表参数说明如下:(1)pm_created:当前已经创建的内存池,采用双向循环链表连接,插入方式是在最后一个节点和首节点间填充;(2)pm_available_list:存储当前还可用partition的链表,结构与块的头部结构header_ptr相同(PM_OVERHEAD=8 B小块的头header_ptr:单向链表,内部有指向下一小块的指针和所属大块的控制块地址)。

在Nucleus内核中,内存池的创建主要由函数PMC_Create_Partition_Pool负责,创建流程如下:调用过程中首先进行参数合法性检测;然后在池头(控制块)中写入各个参数,创建链表;之后是一个重要的循环体,负责初始化partition链表,分配所有的partition,每个partition的大小在分配时需要在函数传入参数值的基础上加8 B,用来存储header_ptr;最后在内存池线程保护后将新的内存池插入内存池链表并计数。

1.2 静态内存池的分配

在TD-LTE无线综合测试仪中分配前由协议栈提供所需要分配的大小,这里主要是放置协议内部配置信息与层间交互原语。由于这些信息的大小固定,只是有几种不同大小的固定模式,所以很适合采用静态分配的方式来分配内存,只需要根据数据大小选择密度合适的内存池即可。移植过程中使用了不同大小的partition构建不同密度的内存池,因此,可根据申请partition的大小来判定用那种密度的内存池,以减少内部碎片的大小。这种方法可以有效避免空间浪费[3],同时又可提高分配效率。

在Nucleus内核中静态内存池的分配主要由函数PMC_Allocate_Partition负责,其主要参数为内存池指针(指向调用的内存指针,不能为NULL,设置为可用内存地址即可)、分配大小和挂起标志位。函数中主要判断内存池指针是否合法、内存池与partition是否匹配、指向调用的内存指针是否合法、任务挂起标志位是否有效。其分配流程如图3所示。过程如下:调用内核函数TCT_System_Protect(TCT_Protect)保护内存池同步互斥通道。判断是否还有可用partition,若有,则将可用数量减1、分配数量加1并更新pm_available_list以及将指向调用内存指针赋值为当前分配的partition地址(partition地址要+8 B删去头);若没有,则将任务挂起直至有可用Partition才恢复。最后解保护并返回。

1.3 静态内存池的释放

系统采用PMC_Deallocate_Partition函数来完成释放。流程如下:调用内核函数保护内存池同步互斥通道。判断是否有等待任务,若有,则分配给这个任务当前partition,再判断当前任务是否允许被抢占,允许就调用TCT_Control_To_System抢占当前任务、激活等待内存的任务;若没有,则等待任务,将当前partition重新接入到可用partition列表的头部。最后调用TCT_Unprotect解保护。

2 动态方式分配内存池

动态内存池也分为池和块两个部分,动态池直接由双向循环链表实现连接。内部块是动态分配的,由最小可分配空间来限制块的最小值。与静态分配不同,动态分配块也由双向循环链表来链接。创建时的初始结构为两个块,在申请时动态分割。图4是仿真器上运行过程中动态内存池与块的结构体截图。

池控制块结构中dm_memory_list与块头结构体相同,池通过dm_memory_list来完成块搜索;块头结构中dm_memory_pool与大块头结构相同,通过它来比配大块。

2.1 动态内存池的创建

初始化完成时的内存结构:初始化创建完成时内存池中有2个块,1个大小为总大小减去32 B,包含自己的头DM_OVERHEAD=16 B,设置为可以状态free=‘0x01’;1个大小为16 B,只有自己的头,没有空间,设置为不可以状态free=‘0x00’。因此,此时的可用空间为除去池的控制块外的总大小减去32 B。初始化结构如图5所示(没有将池控制块表示出来)。

创建时,首先为控制块指针赋值,内存池大小与最小分区大小进行字对齐校正;判断控制块指针、起始地址、最小分配空间、挂起标志是否合法。创建过程如下:初始化控制块中的各个参数,并按图5初始化小块、创建小块双向循环链表,与静态分配相同需要先进行线程保护再加入到池动态内存池链表。

2.2 动态内存池的申请

动态申请主要用于操作系统内模块(如任务、队列等的堆栈分配与模块占用空间的分配。由于在TD-LTE无线综合测试仪中这些分配的空间大小浮动不定,因此需要使用动态分配内存。Nucleus中动态分配采用首次匹配原则,每一次申请内存时动态分配申请大小加16 B(这个16 B的头对应剩下的可用空间)的内存池空间,并把分配过的部分设置为不可用状态free=‘0x00’。

负责实现的函数是DMC_Allocate_Memory。首先进行各种参数的合法性检测,然后将分配空间size小于最小分配空间的分配空间大小赋值为最小空间,对size进行字对齐处理,调用线程保护后采用首先匹配法来找适用空间,即:在循环体中先判断free标志,是空闲块(free=‘0x01’),则算出减去本次分配的头后所剩的空间,当此空间大于本次请求size时进行分配,小于时则移动到下一个块;若不是空闲块,则直接把剩余空间设置为0进行后面小于size时移动到下一个块的判断。注意:这里用到了控制块中的dm_search_ptr属性(结构与小块的头相同),该属性用于记录开始匹配的起始位置,作为判断循环体结束的条件之一,如果循环到此处,就表示没有找到可分配空间。图6是动态分配的流程图。

循环结束后判断是否找到可用于分配的块,若找到则进行是否需要分割该可用块的判断。条件是这个可用块的大小大于或等于本次所需空间size+头大小+最小分配空间的值,若满足此条件则分割出一个新块并对其加头初始化,再计算出剩余可用空间;不满足此条件则直接计算剩余可用空间。分配的空间标志为非空闲后,把所分配空间的地址赋给指向调用的内存指针(注意去头)。为提高效率,还需要进行一个简单处理,即判断如果在搜索块时一次性匹配成功,则将dm_search_ptr移向下一个块。

如果没有找到可用块则将任务挂起等待,没有采用挂起模式则直接返回NULL给指向调用的内存指针,最后调用TCT_Unprotect解保护。图7是分配第一块内存后动态内存池的结构。

2.3 动态内存池的释放

释放过程与静态类似,需要注意的是,如果相邻块有空闲块需要合并,则合并后把dm_search_ptr指向当前合并的空闲块。

动态分配内存的算法复杂度要高于静态分配,从时间复杂度来看,静态分配是O(1)、动态是O(n)。但是动态分配的内存利用率要高于静态分配内存[5],在实际应用中要结合具体情况决定采用何种分配方式。在本设计中合理使用了两种分配方式:在静态分配中进行密度的动态判断,在动态分配中进行静态的最小分配大小匹配。动、静相结合,使操作系统在分配中尽可能地节约内存的同时,有效减少了内存碎片。本分配方式已经运用于TD-LTE无线综合测试仪中,在实现操作系统基本内存管理功能的同时,满足了TD-LTE无线综合测试仪对系统内存资源和调度时间的设计要求。

参考文献

[1]冯宝祥,王桂棠.嵌入式实时操作系统Nucleus PLUS在S3C2410A上移植的实现[J].电子设计应用,2007(5):104-106.

[2]王小银,陈莉君.Linux内核中内存池的实现及应用[J].西安邮电学院学报,2001,16(4):40-43.

[3]张磊,王忠仁.嵌入式系统中一种池式内存管理中应用[J].实验科学与技术,2007,5(2):150-152

[4]LMAS S H.An application-level memory managementservice[C].ICTTA 2008.3rd International Conference on.7-11 April 2008:1-4.

明天我们移植面孔 篇11

烧伤、受伤或疾病有时会导致毁容。整形外科现在虽已取得巨大的进步,但对一些太严重的病历仍无能为力。这使许多毁容者只能足不出户,与世隔绝,生活也就毁了。目前正在试验的面部移植手术可能给这部分人带来福音。不过,面部移植所需的整片供体只能来自死去的人——把死者的面部移植给一个活人,这种手术带来的就不仅仅是技术上的问题了,而更多的是心理承受上的问题。一个接受心脏移植的患者不会每天早晨对着镜子琢磨自己新移植的部位,而接受面部移植的人就不同了。“对一个人面貌特征的‘偷梁换柱’,会引起各种心理上的错位和混乱,”伦敦皇家医院整形外科的世界顶级专家彼得·巴特勒博士承认,“移植面孔的计划引起了非常强烈的反响。”

法国医生深知其中利害,所以巴黎市郊一所医院的整形外科小组在一年来的面部移植研究试验中,采取了慎之又慎的态度,对外守口如瓶。2002年3月,这个小组终于向国家伦理咨询委员会提出面部移植手术的正式申请。整形专家弗朗索瓦·珀蒂博士解释说:“我们的目标是推进移植技术。使病人能‘复原’,即像移植其他器官一样,提取脑死亡者的同类组织来代替毁容者缺损组织。”伦理咨询委员会要在几个月后做出决定。在此之前,小组的外科医生们不想公开这一计划的内容,但他们承认是研究从下颌到颧颊部位的面部移植。

手术由几部分组成

面部骨架:这是脸部的支架,需用金属微板把要移植部分的全部内部骨架固定在毁容者尚存的骨头上,移植这个部位发生异体排斥的可能性较小。

面部肌肉:要用微创缝合术把供者颧骨的肌肉移植给毁容者,这些肌肉将对恢复他的面部表情起关键作用。

面部神经:移植过来的供体面部神经与毁容者的面部神经将使用微显技术缝合。这是整个移植手术最困难的阶段之一,是使面部神经再生和让面部逐步恢复活动的关键。面部血管“动脉和静脉血管布满整个脸部,被移植部位的血液必须流动通畅才能保证移植成功。

面部皮肤:从免疫学角度看,皮肤是个很复杂的区域,它的排异反应特别强。接受面部移植的人和断手再植的人一样,必须终生接受抗异体排斥的特殊治疗。

从摘取到移植,整个手术需要十几个小时。

由于已有抗排异药物,免疫障碍还比较容易克服,血管形成和神经再生技术成为主要挑战。另外最主要的压力还是社会难以接受这种手术。因此即使伦理委员会开了绿灯,面部移植手术在法国也还得再等几年。必须先对手术者能受益和捐献组织的死者能受到尊重这两点展开充分词‘论,手术才能畅通无阻。在此期间,砌:究和试验会继续下去。首先是外科医生要反复进行操作训练;其次是必须选择毁容实在严重,因而肯冒手术风险的病人。

移植后手术者的面容到底像谁

专家称:“应该明确,手术后的新面容会介乎供者与受者的相貌之间,纯属幻想。因为面部的总体结构完全不同了,根本没有可比性。同时要知道,构成一个人区别于他人的不变的特征主要是眼神和表情,对这两样我们不会做改动。”对更详尽的信息,专家们三缄其口,公众不得而知。

在拉芒什海峡的彼岸,英国专家的同类手术已在准备之中,他们对舆论的态度似乎开放得多。2002年7月,彼德·巴特勒博士表示要从事面部移植事业,并称要增加透明度。他尚未得到英国伦理委员会的批准就进入了试验阶段。几个月来,他手下的所有工作人员都已熟练掌握这种手术的操作。“我试验了好几个月,已不存在任何能阻碍这种手术的技术问题。从供者身上取下面部移植部分需2~3小时,从摘取到移植全过程估计需要12~14小时。我将在一年后施行第一例手术,方法上与法国同行有所不同,我们要移植的是整张面孔,也就是从额头顶部到颈下端的肌肉、神经、血管和皮肤,但不包括骨骼。我们将在最易愈合的地方缝合,比如头发根部、眼皮周围,还有下巴的脖子部位。”

现在的问题已不是能不能,而是该不该,这对患者将是一个痛苦的选择

到目前为止,全贬界只有过4例与此有些相似的面部手术,不过那都是把病人本身已被撕离但尚未毁坏的一部分面孔复归原处。这与目前试验中的手术最大的区别是:被移植的部分是病人自身的组织,因而无须终身服用抗排异药物。当然,这在整形外科的发展道路上也有不可磨灭的功绩。此外,面部移植的手术成功与否,还取决于供者的皮肤表层是否适合受者的骨架,因此对供体选择至关重要,它应尽量符合毁容者原先的肤色和脸形。手术的预期效果将是在两米之外看不出异常。“但在实施第一例手术前,”巴特勒博士说,“我们无法断言移植的面孔能不能像真的一样。”

这种手术的确非常神奇。对法国的医疗小组来说,若没有由里昴的让,米歇尔·迪贝尔纳教授1998年以来多次在断手再植手术中获得的成功经验,面部移植是不可能的。断手再植和面部移植这两件事看似毫不相干,其实有不少共同之处:都是要移植由骨骼、肌肉和皮肤这些不同成分构成的组织。迪贝尔纳教授首例断手再植的成功表明,新的抑制排异的治疗法相当有效,移植从死者身上取下的皮肤是可行的。而由于皮肤很强的排异反应,这在当时是冒了很大的风险的。以往的经验教训还证明了患者精神状态的重要性。由于心理上的原因,世界首例接受断手再植的病人克林特·哈勒姆在手术后不到两年半,又要求截去了再植的手。这次不完满的手术说明,移植手术非同一般,它的成功在很大程度上取决于病人及其亲友的心理状态,因此伦理问题成了研究小组的核心问题。

必须重视终身服用抗排异药物的副作用,比如有可能引起癌症或各种慢性病。因此,做还是不做,这个选择对于病人是很痛苦的,要容他们在充分权衡手术的利弊之后,自己做出决定。

基于SOA的系统移植框架研究 篇12

遗留系统经过多年的维护,内部结构十分复杂,代码间关系盘根错节,令人难以理解。为从遗留系统中抽取出可重用的代码,本文提出了如图1所示的框架。下面将对框架中的各个部分进行详细描述。

1.1 可行性分析

遗留系统向SOA移植并不是总能成功,它面临着遗留系统自身和目标SOA环境两方面的挑战。由于遗留系统所采用的技术的限制,将遗留系统的功能封装并发布成服务有时是不可能的。这种技术限制可能来源于遗留系统自身,也有可能是由遗留系统所在的软硬件环境造成的。因此,将遗留系统功能封装并发布成服务的代价有可能比重新开发一个面向服务的系统来替换这个遗留系统的代价还要高。而采用不同的技术构建的SOA环境对遗留系统向SOA的迁移也将造成不同的影响。因此必须对遗留系统向SOA移植进行可行性分析,以降低项目失败的的风险。一般可采用决策树模型或层次分析法解决该问题。

1.2 抽取可重用代码

抽取可重用代码就是从遗留系统中找出可这种可承载服务的代码资源,将其作为服务封装的基础。抽取可重用代码可分为3个步骤,分别为问题域服务标识、遗留系统服务标识、服务与功能代码的匹配分析,如图2所示:

问题域服务标识的目标是找出能够作为服务发布的业务功能,并将它们标识出来。它分为业务功能域划分、业务流程分析和服务发现3个步骤。业务功能域划分勾勒出了目标系统的业务结构,它一方面可以从全局角度来理解目标系统的业务,另一方面也是组织服务层次结构的重要依据;业务流程分析是对业务功能子域的深入详细了解,它是进行服务发现的主要入口点。服务发现则是标识业务流程内的各种服务候选者,它是以前两个步骤作为基础。

遗留系统服务标识的目标是从遗留系统源代码中分析出能够承载服务业务功能的代码,并详细描述它们。它分为高层系统架构恢复、底层代码功能分析和函数功能描述3个步骤。高层系统架构恢复旨在从遗留系统源代码中分析出系统的高层设计,从而便于对遗留系统功能的理解,同时对底层代码功能的分析。底层代码功能分析着重于研究各个代码段的工作流程、相互之间的关系、输入与输出。函数功能描述是指在底层功能代码分析的基础上,找出具体的包含业务功能的代码段,描述其名称、功能、输入参数、输出参数等等。

服务与功能代码匹配分析是指在前两个步骤的基础上筛选可重用功能代码的过程。只有满足服务业务功能需求的可重用功能代码才有可能作为承载服务的资源封装并发布出去。

1.3 服务封装

当可用于承载服务的可重用代码被标识出来后,便可以对这些可重用代码进行封装。服务封装包含代码清洗、包装可重用代码和发布服务3个步骤,具体描述如下:

(1)代码清洗。经过步骤抽取可重用代码,我们获得了用于承载服务的可重用代码。从可重用代码的说明,我们可以发现,尽管可重用代码能够提供服务所需的业务功能,但是它们的输入输出参数却不能满足服务接口的定义,又或者可重用代码中存在过多的与业务功能无关的代码,因此必须对可重用代码进行清洗调整,使之满足服务接口的定义。

(2)包装可重用代码。由于不同Web Service技术有不同的编写规则,同时遗留系统源代码也可有许多不同程序设计语言编写,因此当确定采用某种Web Service技术之后,就必须考虑怎样对可重用代码进行包装,使之符合对应的Web Service编写规范。

(3)发布服务。将服务接口与服务实现的一些问题解决后,就可以将这些服务向服务注册中心发布了。随后服务的使用者就可以通过服务注册中心获取所需的服务,从而构造自己想要的功能。

1.4 系统改造

将遗留系统中的可重用代码封装成服务并发布之后,其它的应用程序将可以使用这些服务所提供的功能。接下来就是采用面向服务的方法对遗留系统进行改造,将遗留系统彻底地移植到SOA中。移植后的系统的功能将主要由它所调用的服务实现。这些所调用的服务将分成3个部分,分别是:(1)从遗留系统抽取并发布的服务。这些服务将成为移植后系统的主要组成部分;(2)SOA环境中原有已发布的服务。这些服务是对移植后系统所调用服务的重要补充,可以节省改造遗留系统的时间,体现了SOA的优势;(3)为移植后系统编写的服务。前二个部分的服务可能不能完全满足移植后系统的需要,因此可能需要编写一些新的服务,以供移植后系统调用。

2 应用实例

以一个研究生信息管理系统为例说明其从SOA的移植过程中所遇到的问题。在某个学院的研究生管理部门长期使用着一个研究生信息管理系统。随着该部门业务的增长与变化,该系统已无法满足研究生管理部门日常的业务需求。为此研究生管理部门希望将该系统移植到SOA中。

该研究生信息管理系统是C/S结构的。客户端用C++开发的。所有的业务逻辑在客户端被实现。它是一个典型的胖客户应用。主要配置Windows NT和一个桌面数据库。这个信息系统已被修改了很多次。代码中的许多部分都无完整的文档,将这样的系统移植到SOA中是一个巨大的挑战。

2.1 系统移植过程

经过分析,该研究生信息管理系统向SOA移植是可行的。下面就是从该系统中抽取可重用的代码,并封装发布成服务。为此我们开发了一个原型工具辅助移植,该工具名为MSOA。

Step1:MSOA对系统源代码进行语法分析,检测到该系统由51个类和998个成员和非成员函数组成,同时检测出有1096个程序实体与它们之间的2568种依赖关系。

Step2:MSOA生成该系统的类图。

Step3:MSOA以凝聚式层次聚类算法为基础,生成该系统的组件图。

Step4:使用MSOA选择要封装成服务的业务功能。

Step5:封闭并发布服务。

2.2 移植后的研究生信息管理系统

经过系统移植,从原研究生信息管理系统中抽取出一部分可重用的功能,并发布为服务。在此基础上,形成了新的基于SOA的研究生信息管理系统。

3 结束语

与相似的研究相比,该框架对系统的理解更灵活,使新的系统更容易维护,并降低维护费用。但是在遗留系统服务标识中的高层体系结构恢复中还存在一些不足之处,那就是恢复出来的高层体系结构图还比较单一,只存在类图和组件图。将来,我们将进一步研究其他高层体系结构图的生成,以增进对遗留系统的理解,更好地辅助整个的系统移植过程。

参考文献

[1]中国电子技术标准化研究所.SOA用户指南[M].北京:电子工业出版社,2008.

[2]BRODIE M L,STONE BRAKER M.Migrating Leagacy System[M].In:Morgan Kauf-Mann Publisher,1995.

[3]ZHOUPENG ZHANG,HONGJI YANG.Incubating services in legacy systems for architectural migration[J].In Proceedings of the11th Asia-Pacific Software Engineering Conference(APSEC'04),2004.

[4]张友生.遗留系统的评价方法与进化策略[J].计算机工程与应用,2003(13).

[5]李静,黄永忠,刘岩.基于面向服务架构的遗留系统再设计方法[J].计算机工程与设计,2007(6).

上一篇:土地承包制度下一篇:国际旅游城市