嵌入策略(精选十篇)
嵌入策略 篇1
1 嵌入式软件测试环境
软件工程意义上的软件测试环境是指为了完成软件测试工作所必需的硬件、软件、外设、历史数据的总称。一般说来,良好的测试环境需要具备三大要素:优化的测试模型、多样化的系统配置以及熟练使用工具的测试员。
在规划测试策略与计划时,测试环境的建设是测试实施的一个重要阶段,测试环境的适合与否会严重影响测试结果的真实性与准确性。在智能楼宇对讲系统中,由于软件是烧写在硬件芯片方案中直接执行的(就是所谓“嵌入式”),所以最可靠的测试环境,就是将待测软件烧录后再执行测试,但是这种模式下,有多少次回归就要进行多少次烧录芯片的操作,无疑增大了测试资源的投入,也限制了软件系统的快速迭代。目前业界比较通行的方式是采用虚拟机(或者模拟器)的方式,在可接受的拟真度情况下,应用虚拟机对嵌入式软件进行模拟烧录、回归测试并最后下装验证。在DH-T90智能楼宇对讲系统中,应用软件以APP文件烧录在芯片中,因此,我们在模拟测试环境下执行功能模块的接口测试。
2 嵌入式系统的软件架构与模块
一般的,在进行软件模块接口测试中,首先需要了解软件总体架构与模块划分的逻辑关系,理解并掌握模块间的接口定义,在此基础上才能构建测试模型与设计测试方法。
2.1 DH-T90的软件架构
从概要设计书中,我们了解了DH-T90的软件总体架构:
1)表现层(ui):主要是用户界面这一块。
2)业务逻辑层(logic):具体的业务逻辑这块,和问题领域相关。
3)系统平台层(system):内核、各种驱动、c库等等。
并且在架构中制定了模块依赖规则:同层次的模块相互依赖,不允许下层模块依赖与上层模块。
2.2软件模块间的依赖性
了解了软件的总体架构后,需要根据测试需求明确DH-T90的测试范围我们限定于APP子系统中,而我们的接口测试对象就聚焦于“UI”、“Logic”层所包含的各模块间接口。
接下来就需要充分理解并掌握“UI”、“Logic”层所包含各模块的依赖关系。通过图1的方式,可以对模块划分类别,并清晰的勾勒出测试模块间的依赖关系:
1)实体类、Widget:是完成一个模块的基本单位,和别的模块基本是不相关的,独立性高;
2)控制类、表现层:主要是其协调、控制控制这些基本组件的功能,和很多的模块相互关联;
3)其中的单向箭头说明的模块依赖关系。
根据模块分类及相互间的依赖关系,我们需要对测试范围内的模块进行梳理。表1列举了DH-T90系统中部分模块间的相互依赖关系。
2.3软件模块间的接口定义
按照表1中模块依赖关系,我们能够较明确的了解到被依赖较多的模块有哪些,比如:CM_keyboard、CM_FTK、UI_Config等。针对这些模块,我们需要掌握模块接口参数说明,因为在后续制定测试模型时,模块依赖关系的强弱将作为计算测试优先级的因素。
从软件概要设计中明确CM_keyboard、CM_FTK、UI_Config的模块接口参数如下:
3 测试策略与测试方法
3.1建立接口测试策略
所谓测试策略就是对于一系列待测试模块,我们需要考虑该如何安排测试序列,优先测试哪些模块才能使投入的测试资源更高效。根据历史测试经验,一般定义的模块测试策略公式:优先级数值=模块依赖系数×模块功能系数。然后根据计算出的每个模块的优先级数值来安排测试序列。
根据表1中模块依赖关系,按照被依赖越多的模块,依赖系数越高的原则,制定每个模块的依赖系数。同时根据各模块实现功能重要性,列举模块功能系数。最后按照测试策略公式计算出的优先级系数值,如下表2。
最后,根据模块优先级数值表(表2),在测试策略中明确出各模块测试序列。
3.2设计接口测试方法
3.2.1评估测试方法
确定模块优先级后,不是一个一个的顺序对模块接口进行测试,而是采用对两个或者三个模块进行组合测试的方法,组合策略的选择是一个比较严谨的评估过程。
不同组合,对于测试用例的要求不尽相同。基于标准组合定义为:CA=Nt,其中CA为组合用例数,N为模块接口输入用例范围(也就是所谓的组合模式中的“水平”),t为模块依赖系数(也就是所谓的组合模式中的“因子”)。因此如果按照完全覆盖标准组合测试来设计两两模块组合测试用例,将需要比较庞大的测试用例集。而对于实用楼宇对讲系统的模块测试经验数据库,我们可以选择变强度组合测试的方法来设计测试用例,以期达到在保持充分质量水平的情况下,减少测试用例覆盖,缩短测试周期,提高项目整体效率。
3.2.2设计高效的测试用例
所谓强度组合测试,指在完全覆盖的标准组合测试用例范围内,根据模块接口测试经验数据库进行一定程度的比对,在保证一定覆盖度比例与重点历史权限全关联的情况下,筛选出较少的必要测试用例集。一般的,我们在测试检验数据库比对中采用正交表模式,设计筛选公式自动完成测试用例集的生成。正交表应用与测试经验数据库的实例如表3。
从以上表3看到,对于编号为“C006”与“U001”的模块间的测试用例由于其“依赖系数”较高,所以在测试经验库比对中有高比例的测试用例数进入用例集。
4 有效的迭代与回归策略
4.1有效桩的设计
由于嵌入式系统的模块集成受限于平台编译与下装,所以一般我们在进行模块间接口测试时,采用桩来替代已完整通过功能测试的(单元)模块。不同模块间的接口测试,需要考虑的因素有很多,根据测试策略,采用桩的目的就是进行自动化的性能测试,也就是采用自动化脚本,对耦合最紧密的接口参数进行输入输出封装,并验证软件长稳性能。
在本文的接口测试例子中,我们设计的桩用于替代应用频度最高(依赖系数最高)的模块C001:CM_keyboard,也就是设计S001:STUB_keyboard,对应于CM_keyboard封装的输入输出参数,例如:“int key_enable_call”等上文说明的编号C001模块中定义的参数,从而实现对应于相关联模块接口的桩测试。
有效桩的设计关系到整体接口测试效率与可靠的性能测试,自动化性能测试一般采用指令脚本的方式执行。
4.2 接口测试的迭代版本控制
在完成接口测试桩设计后,更进一步就要进行迭代版本的控制。因为接口测试中用桩替代功能模块进行接口参数验证是有较高代价的,在测试的任何一个阶段,如果待测接口关联的模块功能发生改变,那么意味着桩就需重新设计。所以模块内任何的改变情况下,继续用继承桩进行测试,就可能会遗漏对模块修改引发错误的发现。
制定迭代版本控制的原则,关键就是坚持在模块功能完整测试通过后,进行接口桩设计与自动化性能测试,而版本迭代就要求集中在性能测试阶段,迭代重点就应该是桩的接口参数封装是否完整以及自动化测试脚本更新,尽量减少功能模块的变更。
4.3 回归测试度量
在嵌入式系统中,从测试用例库抽取的用例集也可能变得相当大,如果每次回归测试都需要重新运行完整的测试流程,那么测试的时间与资源开销就很大。回归测试的价值在于它是一个能够检测到回归错误的受控实验。选择回归测试策略应该兼顾效率和有效性两个方面。当然“再测试全部用例”仍然是所有策略中安全性和覆盖性最高的一种。但由于嵌入式系统对于时间与资源等测试开销的限制,一般不允许选择“再测试全部用例”的回归测试策略。
在本文的接口测试案例中,我们选择三种方式相结合进行回归测试,包括:
1)基于风险选择测试
可以基于一定的风险标准来从基线测试用例集中选择部分用例用于回归测试。首先运行最重要的、关键的和可疑的测试,而跳过那些非关键的、优先级别低的或者高稳定的测试用例,这些用例即便可能测试到缺陷,这些缺陷的严重性也较低。一般而言,测试选择从主要特征到次要特征。
2)基于操作剖面选择测试
继承上文提到的针对性测试策略,用更精简测试用例的分布情况来反映系统的实际使用情况。回归测试所使用的测试用例个数可以由测试预算确定,即回归测试可以优先选择那些对最重要或最频繁使用功能模块的测试用例,释放和缓解最高级别的风险,有助于尽早发现那些对接口可靠性有最大影响的故障。
3)再测试修改的部分
当我们对修改后提交的模块代码有足够的信心时,就通过关联性分析模块修改情况与修改的影响,将回归测试局限于被改变的模块和它的接口上。通常,一个回归错误一定涉及一个新的、修改的或删除的代码农而不再扩散到接口相关联的模块。
5 结束语
对于嵌入式系统的接口测试策略,需要时间和人力来计划、实施和管理。在给定的进度下,尽可能实现有效率的模块关系模式计算和桩设计,需要对测试用例集进行优化筛选并且选择相应的回归测试方法。当一系列都成为规范时候,系统接口测试就能够保证足够的效率与可控的风险。
摘要:在日益广泛应用的嵌入式系统中,软件测试因为系统平台局限性需要重复下装,耗费较大的测试资源与时间成本。文章根据嵌入式系统软件的特性,结合实际案例智能楼宇对讲系统DH-T90,从测试环境描述、测试用例筛选、回归策略选择等一系列方法步骤,较系统的说明一种制定智能楼宇对讲系统接口测试的规划策略,从而优化嵌入式系统的接口测试,规范了测试风险,并提升了测试效率。
关键词:软件工程,嵌入式,测试方法,测试用例,回归测试
参考文献
[1]Ian Sommerville.软件工程(英文版)[M].9版.北京:机械工业出版社,2011.
[2]陈云川.嵌入式软件调试技术[M].北京:电子工业出版社,2009.
[3]刘利枚,汪文勇,唐科.嵌入式软件测试方法与技术[J].计算机与现代化,2005(4):123-126.
嵌入策略 篇2
[大] [中] [小] 来源:江苏国税 作者:邹国庆 刘文元 2010-01-08
在实现信息化与工业化融合的具体途径方面,以芯片和软件为核心的嵌入式系统技术将发挥巨大的推动作用,必将成为连接信息化与工业化的重要桥梁。嵌入式软件“嵌入”到工业产品与现代制造装备产品中,将有效提升产品的性价比与市场竞争力,典型的应用包括汽车电子、数控加工装备、智能仪器仪表、自动化控制系统等。因此,发展嵌入式技术及其在先进装备制造领域中的应用,将有效促进信息产业与制造业产业的调整及产品的升级换代。
一、嵌入式软件税收新政策出台及执行概况
为进一步推动嵌入式软件的研发和应用,财政部、国家税务总局联合出台税收优惠政策即《关于嵌入式软件增值税政策的通知》(财税[2008]92号,以下简称92号文)支持其发展。92号文对嵌入式软件增值税政策作了重要的调整,由原来的列举不享受增值税优惠政策的软件产品,改为只要能分别核算销售额,就可以和其它自行开发生产的计算机软件产品一样享受税收优惠政策。92号文明确了该优惠政策所需具备的必要条件,即必须能分别核算嵌入式软件与计算机硬件、机器设备等的销售额,同时也明确了税收优惠的方法并准予对前期销售追溯优惠。这一政策对于生产嵌入式计算机软件产品的企业绝对是一个高含金量的利好。
常州高新技术产业开发区国家税务局针对辖区内软件企业和制造业企业的特点,及时、主动地贯彻落实嵌入式软件税收政策。一是加强政策解读。2008年12月在新北区人民政府主办的“嵌入式软件与制造业融合推介会”向与会的嵌入式软件企业和制造企业宣传、解读新的嵌入式软件政策。二是开展专项辅导。加强与常州创意产业管委会的定期联系,建立了专人指导税收政策的服务制度,扩大政策宣传的涵盖面,有针对性地主动了解企业需求,指导企业完善享受新政策所需的条件。三是严格资料审核。谨慎审核批准某自动化有限公司对于前期销售的追溯优惠税额536万元,要求企业提供由第三方认证的前期销售产品中含有经批准的嵌入式软件证明材料。
尽管在贯彻落实嵌入式软件税收政策上税务部门已付出诸多努力,但是能享受该税收优惠政策的企业占比仍然较小,目前仅有不到10户企业符合条件。在常州市已拥有的5万多家制造业企业中,至少有50家较大企业已投入嵌入式软件技术的研发和应用,有条件的其他企业也大都产生了研发和应用嵌入式软件的意向和需求,但仅有个别企业申请和咨询了享受嵌入式软件政策。所以,嵌入式软件增值税税收优惠政策能不能很好地贯彻执行对常州制造业的发展影响重大。
二、执行嵌入式软件税收新政策过程中涉及的难题
在贯彻执行92号文的过程中,我们发现仍存在一些难点问题,影响了嵌入式软件增值税税收优惠政策的落实:
(一)税收优惠政策的多次变化,导致企业认识不一
嵌入式软件的税收优惠政策变化多次,经历了“可以—不可以—限制性可以—可以”享受税收优惠的波折。自1999年《财政部国家税务总局关于贯彻落实<中共中央、国务院关于加强技术创新,发展高科技,实现产业化的决定>有关税收问题的通知》(财税字[1999]273号)发布至《财政部、国家税务总局关于增值税若干政策的通知》(财税[2005]165号)出台前,因为没有明确规定,嵌入式软件在增值税政策上实际是按软件产品可以享受优惠处理的。但《财政部、国家税务总局关于增值税若干政策的通知》(财税[2005]165号)的发布则明确了嵌入式软件不属于财政部、国家税务总局《关于鼓励软件产业和集成电路产业发展有关税收政策问题的通知》(财税[2000]25号)规定的享受增值税优惠政策的软件产品,不予退税。此后,又下发了《关于嵌入式软件增值税政策问题的通知》(财税[2006]174号)规定“嵌入的软件产品凡是分别核算其成本的,按照其占总成本的比例,享受有关增值税即征即退政策”,即有条件享受。直到2008年7月,《财政部 国家税务总局关于嵌入式软件增值税政策的通知》(财税[2008]92号)进一步明确了优惠政策的适用条件及实施办法,才使税收优惠政策具有了较强的可操作性。
政策的多次变化,导致企业跟不上变化,出现认识上的偏差。譬如有拆分能力的嵌入式软件生产企业在165号文后,把企业拆分成二个独立的企业,其中一个专门开发销售软件卖给另一个企业用于生产最终产品,这样开发销售软件的那个企业能享受税收优惠。但对于那些还没有拆分能力,并且其产品中的软件部分不能单独销售或无法单独开具发票的企业,只能放弃此项优惠政策。而这部分企业绝大多数恰恰是国家应该大力鼓励发展的处境最困难的小型科技型企业。由于165号文关于嵌入式软件不予退税,在此后新成立的企业,长期存在着这一概念,以致对嵌入式软件不申报软件产品。直至现在,新的政策出台后,尚有企业不了解。
(二)执行嵌入式软件优惠新政过程中存在诸多难题
1、嵌入式软件企业税收优惠的确认问题
92号文规定“增值税一般纳税人随同计算机网络、计算机硬件和机器设备等一并销售其自行开发生产的嵌入式软件,……可以享受软件产品增值税优惠政策”,嵌入式软件如何确认不明确。
(1)嵌入式软件的定义。在废止的《财政部国家税务总局关于嵌入式软件增值税政策问题的通知》(财税[2006]第174号)中,“嵌入式软件”是指纳税人在生产过程中已经嵌入在计算机硬件、机器设备中并随同一并销售,构成计算机硬件、机器设备的组成部分并且不能准确单独核算软件成本的软件产品。这是财税部门给嵌入式软件下的定义,或许因为不专业,不能完全阐述其内涵,现已废止。根据相关学者的专业论述,嵌入式软件包括嵌入式系统软件、支撑软件和应用软件。嵌入式系统软件是指控制、调度嵌入式系统资源的软件,主要包括嵌入式操作系统等。嵌入式支撑软件是指辅助应用软件开发的工具软件,包括系统分析设计工具、仿真开发工具、交叉开发工具、配置管理工具和系统维护工具等。嵌入式应用软件是指嵌入式系统中面向特定应用的软件。目前,这一定义虽然具有专业性,但是仍限于学术范围,目前尚不具备法律效力,所以在执行税收优惠政策过程中,税务部门很难应用。
(2)嵌入式软件界定难。嵌入式软件是软件的一个类别,这在中华人民共和国信息产业部监制的“双软认定申报表系统”(版本1.2)中“产品登记申报”的相关内容中可以体现:“产品类型”为“系统软件”的,其中包括“嵌入式操作系统”;“产品类型”为“应用软件”的,其中包括“嵌入式应用软件”。同时,按照《江苏省软件开发企业及软件产品认定实施办法(试行)》规定:江苏省科技行政主管部门是我省软件开发企业及其软件产品认定工作的主管机关。所在地科技行政主管部门受理软件开发企业及软件产品的认定申请,经审查同意,逐级报省科技行政主管部门审核批准后,由省科技行政主管部门颁发软件开发企业证书及软件产品证书和高新技术企业证书。经省科技行政主管部门认定的软件开发企业和软件产品,在报经税务机关批准后,可享受有关优惠政策。此规定仅仅明确了软件企业和软件产品的认定部门,但并没有明确说明由何部门来认定某一软件产品中是否含有嵌入式软件。
(3)税务部门确认难。对于一般的软件,税务部门在审批其享受税收优惠时,主要根据企业取得的《软件产品证书》中的软件产品和开具该产品的发票来确认的。但是,含嵌入式软件的产品在发票上只体现产品名称,不体现嵌入式软件,税务部门无法确认企业申报的嵌入式软件销售收入是不是经过有关部门批准的嵌入式软件的销售收入,也无能力判别企业销售的产品有没有包含经过有关部门批准的嵌入式软件。如果企业采取冒充或者虚假申报手段骗取优惠政策,虽然由企业承担经济、法律责任,但税务部门也由于审核不严脱不了干系。
2、成本利润率问题
92号文规定,纳税人按照下列公式核算嵌入式软件的销售额:嵌入式软件销售额=嵌入式软件与计算机硬件、机器设备销售额合计-[计算机硬件、机器设备成本×(1+成本利润率)]。这一公式中的成本是指,销售自产(或外购)的计算机硬件与机器设备的实际生产(或采购)成本。成本利润率是指,纳税人一并销售的计算机硬件与机器设备的成本利润率,实际成本利润率高于10%的,按实际成本利润率确定,低于10%的,按10%确定。如果企业当期或近期销售相同的计算机硬件、机器设备,或者同类计算机硬件、机器设备具有市场价格,可以计算出硬件成本利润率,即:硬件成本利润率=(硬件收入-硬件成本)/硬件成本。如果排除上述可能,企业的硬件成本利润率=(全部收入-软件收入-硬件成本)/硬件成本,这使得要计算出硬件成本利润率必须先知道软件收入,因此,软件收入与硬件成本率陷入死循环。
三、完善嵌入式软件税收政策的建议
为推动嵌入式软件生产企业加快发展步伐,促进嵌入式软件与制造业的融合,进一步完善嵌入式软件税收政策,我们提出如下建议,供有关部门参考:
(一)国家的政策制定必须保持稳定性和一贯性
根据《财政部国家税务总局关于进一步鼓励软件产业和集成电路产业发展税收政策的通知》(财税[2002]第070号)规定,鼓励软件产业的政策暂执行至2010年底。我们希望从2011年起,鼓励软件产业政策应继续保持,并且要有一贯性,让软件行业能持续稳定地发展壮大。
(二)加强宣传税收优惠政策,鼓励企业做大做强
虽然行业主管部门、税务部门通过诸如“嵌入式软件与制造业融合推介会”、税收政策解读日等形式进行了辅导宣传,但由于税收政策的变化,一些嵌入式软件生产企业还存在误解,甚至对新政策了解不透,这仍将是当前和今后行业主管部门、税务部门工作的重点。对于部分拆分为两个独立企业的嵌入式软件生产单位,行业主管部门应鼓励其合并。对普通规模的企业而言,拆分成两个独立的企业将导致企业的整体效率下降,增加了企业的管理及运行成本。科技型企业由于受行业、品牌、知识产权、技术、产品、服务和人才等综合因素的制约,是市场中最稳定、最不易有短期行为、最考虑长远发展的企业,因此也是市场体系中最有机会成长为有远见的、诚信的、注重企业文化的,拥有健康体系的中、大型企业的后备队。行业主管部门应鼓励支持嵌入式软件企业形成合力、做大做强。
(三)税务部门修改计算嵌入式软件销售收入额条款,保持可操作性
鉴于92号文关于嵌入式软件销售收入额中的成本利润率的不可计算性,参照《中华人民共和国增值税暂行条例实施细则》第十六条规定,建议修改该条款:纳税人按照下列公式核算嵌入式软件的销售额,嵌入式软件销售额=嵌入式软件与计算机硬件、机器设备销售额合计-[计算机硬件、机器设备成本×(1+成本利润率)]。
上述公式中的成本是指,销售自产(或外购)的计算机硬件与机器设备的实际生产(或采购)成本。成本利润率是指,纳税人一并销售的计算机硬件与机器设备的成本利润率,纳税人可以按照最近时期销售同类货物的平均销售价格计算成本利润率,如果纳税人最近时期没有销售同类货物的可以按其他纳税人最近时期同类货物的平均销售价格计算成本利润率,实际成本利润率高于10%的,按实际成本利润率确定,否则,按10%确定。
(四)实行联合年检,规避税务风险、防范企业恶意行为
嵌入生活化情境的中学物理教学策略 篇3
当前教学研究中的焦点问题之一即情境化教学。如何将情境化教学与具体学科课程相结合,并有效提高教学效果,“生活化”教学策略给出了一个有益的尝试途径。“生活化”教学策略即依据教学三维目标,基于中学生的学习特征,依据教学任务,精心创设贴合生活情境、贴合社会生活实际的教学情境,辅以一系列源于生活问题,重构教学内容,以实验演示、情境活动为线索展开丰富多彩的教学组织形式,构成激发中学生学习兴趣、培养中学生科学素养和动手能力的教学策略与方法。在中学物理教学中,引入“生活化”教学策略,是对情境教学理论方法的实践探索,也是有效提高中学生物理学习的兴趣,培养和激发中学生创新和动手能力,提升中学生科学素养的有益尝试。
一、营造生活化的物理课堂
在学生的日常生活中,存在着能够体现物理教材知识点的大量实例与应用问题。教师可以从日常生产生活和社会新闻热点中发现素材,及时与物理知识点相联系,打造生活化的物理教学。具体而言,教师依据生活实践经验,收集和整理切合学生实际生活的实例,从学生的衣食住行、当下的社会新闻热点、学生关心的流行事物等方面入手,选择关联的问题。将这些与学习者能够切身体会和参与的劣构问题呈现在课堂上,在教师的引导下将之抽象为良构物理问题,使得学生共同开展探究活动。正因为这些实例与问题和学习者密切相关,也受到学习者普遍关注,因此学生的积极性可以获得较大提高。就学习的迁移运用方面来说,通过生活化的物理教学,也有助于学生将这些物理知识运用到实际生活中去,进而解决生活中遇到的问题,有助于学习者运用物理知识认知未知世界,解释不曾遇到的实际现象,构成良性循环。并有助于学习者构建科学的认识方法与价值观。
1.選择学生熟悉的生活素材创设教学情境
现代教育心理学的最近发展区理论研究成果表明,若需要提高学习者对知识的接纳程度,则学习的内容与知识需要更加贴近学习者的原有认知结构,即最近发展区。在物理学习中,则表现为物理知识尽可能地贴近学习者的原有认知,即生活实际。在日常生活、社会新闻热点、学生关心的流行事物等方面,都可以较好地用来构建物理教学情境。例如,大多数男生喜欢球类运动。无论是篮球、足球,其投篮技巧、射门技术都可以用物理科学知识来解释,进而可以运用到具体的教学中去,例如与抛体运动及规律结合起来讲解,同样,还可以用力的合成与分解来解释其中的运动规律。再如与家庭生活相关,可以大量结合生活中的电器使用、物理现象进行探究学习。例如将空调与电冰箱制冷工作原理与“热力学定律”相结合;将溜溜球、洗衣机的离心现象来讲解向心力作用;利用消毒机来开展紫外线的教学;运用电吹风来讲解电热、电功等等。学生的家庭生活与日常娱乐活动都与物理知识存在千丝万缕的关联,将之运用起来,可以使得学生在学习过程中充满亲切感,同时具有较好的趣味性,能极大提高学习者的积极性与参与性。
2.引导学生主动探究生活问题
在物理课堂中应广泛运用生活化情境的实例之外,教师还应当鼓励学生对这些实例和问题进行探究,并解决实际问题。正因为这些实例是来源于生活实际的活动,学生自然能够感受到这些问题源自生活,从而激发学生热爱物理、运用物理知识去探索未知世界的热情与能力。例如,在物理教学“电磁感应”环节的课程教学中,教师就可以抛出一个源自生活的问题:“如何不用电池点亮手电筒?”引起同学们的探究热情,激发同学们的好奇心和求知欲,进而让同学们解决手电筒如何不用电池就可以发光的问题。在同学们自主探究后,教师则可以引导学生从手电筒工作原理入手,通过拆解和分析手电筒的内部装置和电路,以及相关的磁铁与线圈来分析手电筒的工作机制。然后提出问题:“磁铁与线圈与手电筒发光有何联系?”引导学生以小组形式开展对电磁感应规律的探究活动。倘若依照此方式逐步深入剖析问题,层层分析,透视物理原理,则可以充分激发学习者的求知欲,激发学生学习物理的主动性,从而优化学习效果,使得学生在轻松快乐的解密过程中习得物理知识,达到较好的掌握程度。
3.将物理学应用于学生生活和社会实际
构建嵌入生活化情境的物理教学,除了在课堂教学中引入生活情境之外,还应当主动引导学生将学习的物理知识运用到实际生活中去,即将知识的迁移和外显化。学习的根本目的是用知识解决实际生活生产中遇到的问题,实现了这一步就达到了物理学习的真正目的。
高中的物理知识应当运用丰富多彩的形式,向学生展现物理知识运用的效果和前景,能够为我们的生活带来什么样的变化,为社会进步带来怎样的变革等。当进行了力学中牛顿第三运动定律的教学后,可以让学生探究解决“拔河比赛中获得胜利的关键要素有哪些?”这一问题,进而得出一系列结论。然后在实际班级比赛中,可以运用这些结论进一步探索“如需赢得拔河比赛需要改变哪些因素?”这类问题,然后帮助学生在有限的力量下获得较好的拔河名次。物理知识的发展同时也带来社会的进步,产生巨大的社会价值。又如,牛顿运动定律与万有引力理论在现代太空航天技术上的运用;蒸汽机动力、石油动力、电力为社会生产力的发展带来的工业革命;电气化和信息化社会与电磁感应原理、电磁场理论的联系;光纤与光的全反射的联系等,物理知识的运用与实践为社会进步带来强大的推动作用,给人们的实际生产生活带来巨大的革新与影响。将物理知识回归到实际生产生活中,就可以极大地展现物理科学知识的魅力,让同学们体会和感悟到学习物理的价值。
二、开展贴近学生生活的实验教学
在实际物理教学中,嵌入生活化情境的教学策略的核心,就是开展嵌入生活化情境的物理实验。所谓嵌入生活化情境的物理实验的主要内容有二:其一是运用日常生活中的素材或材料进行物理实验;其二是摆脱纯粹抽象的物理实验,将物理实验与解决日常生活问题紧密结合起来。
1.选择生活中常见物品做实验
在学生学习和生活活动中,学生周围的学习用品和相关器具也是极为贴合生活化情境的实验工具。运用日常生活和学习中的资源进行实验,有诸多优点:一是容易获得,二是使用简便,三是价格便宜。非常有利于培养学生的动手能力和实验的操作技能,能够较好地促进学生创新思维的培养。许多生活和学习中的材料都可以替代标准的实验室器材。例如,在电学中,通常都使用滑动变阻器开展实验,然而为了贴近生活实际,同时也让学生认识到石墨的导电特性,可以让学生使用铅笔芯来取代滑动变阻器。在相关实验中,将导线的一端与铅笔芯连接,另一端导线则可以在铅笔芯上自由滑动,由此可以实现滑动变阻器同样的效果,使得灯泡的亮度发生变化。由此,还可以向学生解释石墨的导电特性。再如,可以运用激光笔或者学生爱玩的激光枪作为干涉光源,开展双缝干涉实验。在实验中,可以运用教室的白色墙壁作为大型屏幕,得到非常清晰的干涉条纹,获得良好的实验效果。诸如此类运用学生熟悉和身边容易获得的材料开展物理实验,较容易引起学生的探究兴趣,在知晓实验方法后,学生非常容易在脱离传统实验室的条件下,借助在家中简单的验证实验过程,就可以使学生积极地参加到实验操作中来,扎扎实实地掌握实验原理,习得物理知识。
2.将实验研究与解决生活问题联系起来
由于传统教学思路下的物理实验教学只能在纯粹的实验室环境下进行,脱离了生活实际,所运用的器材是专门制作的,验证的实验原理是抽象的,解决的问题也是学术性的,这样的实验学习难以使学生产生学习兴趣,更难以运用到实际生活学习中去,不能解决实际问题,也为知识迁移平添了难度。因此,将物理实验与生活问题的优化解决结合起来是急需解决的问题。例如,在能力的转换与传输的物理课堂教学中,学生根据生活常识仅仅知道家庭生活用电和工业生产用电是由发电厂进行发电的,但是如何传输到家家户户中并且进行运用,却不能够清晰了解和掌握。因此,教师可以模拟真实生活情境与学生一起动手,开展实验过程如下:首先,使用六伏的信号灯蓄电池代表火力发电厂,表征火力发电厂将煤炭所储存的化学能转换为电能;然后,将若干个灯座用导线连接起来,用冰棒棍和胶水黏结起来,做成十字架的形状,表征为电线杆,将导线架设在电线杆上模拟输配电线路;接着将纸箱做成小房子,在房子中间放置一个小电灯泡,模拟家庭用电。在整个传输电路中,接入单刀双掷开关,表征变电站对不同电路负载的投切操作。最后,将单刀双掷开关投切到不同导线上,使得不同房间的电灯泡点亮。当开关和上某条线路时,电能就通过输电线路达到每个家庭中,然后使得电灯亮起,那么能量则由发电厂的化学能转换为电能,再传输到家庭中,转化为光能和热能。如此一来,将实际生产生活实践与物理实验内容巧妙地结合起来,使得学生能够快速掌握物理知识,并且能够解答生活中遇到的各种问题,体会到日常生活与物理科学实验中的紧密关联。
三、选编并布置生活化的物理作业
1.提供生活化习题的练习
在传统物理教学中,教师往往忽视作业的设计,只依赖传统的课后习题或者教辅材料,而不能根据生活中的实际情境开展探究性的作业。传统的作业仅仅停留在应试层面上,绝大多数无助于培养和训练学生的物理科学思维能力,特别是解决问题能力与创新能力。而嵌入生活化情境的物理作业,可以培养学生的综合分析能力,包括问题的抽象与概括、分析与解决能力。
2.布置观察类和课外简易实验的作业
物理科学与生活生产中的许多事物都密切相关。例如生活中常见的自然景象,太阳月亮、降雨、彩虹等等;生活中经常运用到的电器,如冰箱、微波炉、取暖器等等。这类现象和器材都蕴含着非常丰富的物理现象,內中则体现了物理科学原理,教师应当更多地设计让学生对身边的自然现象进行研究、对家庭中运用的生活电器进行探索的实践性作业,在作业中让学生解释其中的物理现象,并研究其原理,这样可以加深对学习的理解,更好地掌握物理知识。
3.将生活化问题整合到研究性学习之中
生活化情境中的许多实际生活问题是作为物理探究性学习的良好素材。例如,城市道路或小区道路经常会发生路面破损的情况,造成路面损坏的原因有很多,其中,大量的超载汽车对路面造成的伤害是具有极大破坏性的,破坏的路面也为行车造成了大量的不安全因素,存在安全隐患。那么,如何减少超重汽车对路面的破坏呢?如何有效延长路面的使用年限呢?怎样提出对应的合理化举措呢?这些现实生活中与同学们衣食住行息息相关的复杂问题,可以作为学生的课外研究性课题,促进学生将学习的物理知识运用在实际生活当中,并解决实际问题,培养学生科学严谨的思维能力和创新能力。
通过以上研究我们可以得出相关结论,物理课堂教学首先要激发学生兴趣,从学生生活周围能够接触到的各种事物入手,将生活中的乐趣与物理课程与知识的学习运用联系起来,促使学生发现学习物理的快乐,从而培养学生积极动手、勇于创新的良好科学素养,并在学习的过程中,能够合作探索,积极培养学生对生活中实际问题的解决能力,从而树立学生正确的科学价值观和严谨的科学态度。
(作者单位:江西电力职业技术学院 江西科技师范大学)
□责任编辑 王金瑞
嵌入式网络防火墙安全策略的探讨 篇4
关键词:嵌入式防火墙,安全策略,网络安全系统,数据包
1 网络安全系统的主要构成和缺陷
既有网络安全系统采用的安全策略是将多层次的安全作为前提, 以对应的防护手段和防火墙, 构建典型的安全管理网络系统, 从而形成科学、合理的网络安全处理流程, 保护网络系统中的数据。
1.1 既有网络安全系统的主要构成
1.1.1 网络控制代理功能
该功能在网关管理过程中起到了十分关键的作用, 可针对数据包进行对应的安全管理工作。
1.1.2 网络检测代理
该系统的主要作用是对网络入侵行为进行检测, 并及时获得相关入侵信息和数据包, 发现来自网络的各种入侵行为, 进而为网络管理人员提供有力的信息支持。
1.1.3 主机代理安全管理
主机代理安全管理的主要功能在于对流动的数据包进行威胁评估, 同时, 分析和评估主机中存留的相关记录, 以提高系统自身的整体安全性能。
1.1.4 管理中心
系统网络安全管理中心是系统管理人员与用户沟通的渠道。管理人员利用管理中心的不同功能可开展安全威胁评估、安全威胁分析和安全策略实施等工作, 是实现系统与用户良好沟通的重要平台。
1.2 既有网络安全系统的主要特点和缺陷
1.2.1 既有网络安全系统的主要特点
在既有网络安全系统中, 利用网络控制代理和网络监测代理对对应的硬件进行安全管理, 但主机安全代理和安全管理网络中心主要通过软件管理。
1.2.2 既有网络安全系统中存在的缺陷
因网络安全系统属于应用程序级别, 在使用过程中易受到攻击。因此, 在嵌入式网络安全管理中存在一定的安全隐患。
2 主要网络攻击的类型
2.1 伪装攻击
伪装攻击行为是指攻击方伪装成为其他具有迷惑性的实体, 通过与其他主动攻击方式的配合攻击, 尤其是在消息重叠时比较常见, 存在差异明显的实体, 往往与主动攻击形式共同使用。
2.2 重演和篡改攻击
重演是指消息在未授权的情况下通过循环流通的方式在消息传递过程中持续重演, 导致系统运行超负荷, 进而造成系统崩溃;篡改攻击是指在不被用户发现、未授权的情况下修改消息。
2.3 拒绝服务
拒绝服务通常指在实体无法履行自身功能, 且实体活动影响到其他相关嵌入式设备的正常功能后出现的攻击方式。这种攻击方式具有一般性, 部分实体会阻碍其他相关功能的发挥, 在通信、物流行业的嵌入式系统中较为常见。
2.4 网络系统内部攻击
当用户采取不正当途径或不正当行为操作系统时, 可能导致系统内部遭到攻击。通常情况下, 导致嵌入式网络系统产生内部攻击的主要原因是计算机犯罪导致的系统破坏。
2.5 外部攻击
嵌入式系统所承受的外部攻击主要包括: (1) 搭线。包括主动和被动两种形式。 (2) 辐射。 (3) 黑客伪装成为授权用户或直接伪装成为网络自身的构成部分, 进入网络系统中对系统数据安全造成威胁。
2.6 实体攻击
实体攻击直接影响了系统硬件设备的安全, 会限制正常的使用, 进而对嵌入式网络实体造成了直接影响, 破坏性较大。
3 嵌入式网络安全的主要特点
由于嵌入式网络设备的存储空间有限, 因此, 处理信息的能力较差, 易成为黑客的攻击对象, 且在一般的攻击下易出现安全问题。对于一些小型的嵌入式系统, 一般只设置了简单的防火墙软件, 对安全威胁的防范能力较差。正因其在网络中处于较低层级, 且嵌入式系统中的设备大多不具备安全防范能力, 导致嵌入式系统不需要应对低水平的多元化攻击。此外, 嵌入式设备一般是根据相关的用户要求而开发的, 因此, 其网络化功能较差, 这间接地降低了外网访问的可能性, 降低了其被攻击的概率。
嵌入式系统的管理层次较低, 导致部分计算机攻击病毒无法长时间留在系统中, 但易受到内存消耗型攻击的侵扰。由于嵌入式网络设备的功能具有很强的针对性, 导致设备功能规划存在明显差异, 一般的攻击行为可能无法奏效。
4 嵌入式网络防火墙平台的构建
4.1 处理器的选择
目前, 市场中主要的嵌入式处理器包括ARM、MIPS处理器、X86处理器和DSP处理器等。ARM处理器的性价比较高, 在普通用户中得到了广泛应用。在嵌入式网络系统的应用中, 个人电子产品、无线通信、数据处理和控制等产品中都用到了ARM处理器。ARM处理器属于32位处理器, 同时配置了16位的指令集, 其中, 以ARM9最为典型。因此, 本文选择ARM9作为嵌入式网络防火墙平台的处理器。
4.2 EOS的选择
EOS是专门用于嵌入式系统的操作系统, 是应用广泛的系统操作软件, 具有GUI的图形用户操作界面和对应的地层硬件驱动程序。同时, 其内部集成了各种类型的数据通信协议、浏览器等。目前, 其他类型的嵌入式操作系统包括嵌入式Linux、Windows CE等。
4.3 防火墙的过滤规则和过滤处理机理
嵌入式网络系统防火墙构建中的关键之一是确定防火墙的过滤处理规则和机理, 即确定防火墙如何识别某个具体的数据包最终顺利通过还是被丢弃。在实际操作过程中, 通常利用对应的过滤规则实现该功能。
通常情况下, 每条规则中都包含对应的处理命令, 一般的处理命令包括Allow、Deny和Reject。Allow命令是指防火墙认可数据包的安全性, 可直接通过;Deny命令是指防火墙不认可数据包的安全性, 拒绝数据包通过;Reject命令是指直接丢弃数据包, 避免其威胁嵌入式操作系统, 同时, 将ICMPHost Unreachable信息发送给Sender, 确认无法与Host进行数据交换, 以免Sende持续向无法连接的Host发送连接请求, 从而避免了系统过载问题。本文设计的防火墙数据包规则如图1所示。
通常情况下, 数据包过滤规则是基于顺序匹配算法而运行的, 其基本原理与顺序选择算法类似, 通过遍历规则库当中的每一条记录一一匹配, 直至完成匹配为止。但该算法耗时较长, 尤其是在需要过滤的规则较多时, 使用顺序匹配算法存在效率较低的问题。因此, 本文使用的算法为RFC (Recursive Flow Classification, 递归流分类算法) , 通过使用分类规则的方式将过滤数据集中起来, 将数据包的分类问题当作数据包的包头分类, 直接将需要分类的Sbit字段映射成为Tbit, 并将之作为规则的标准标识符。比如, 当IPv4中存在5维 (目的区域 (32 bit) /源地址域 (32 bit) 、目的端口域 (16 bit) /源端口域 (16 bit) 、协议域 (8bit) ) 数据空间时, 防火墙数据过滤算法需要构建一个规模为32×232×216×216×28的映射表, 且需要1 024 GB的内存空间, 这是无法实现的。此时, 利用RFC算法将传统的单阶段映射转变成为多阶段映射, 通过递归操作的方式实现数据的整体映射, 每完成一个阶段后实现一次规模缩减, 最终将一个大集合映射成多个小集合, 降低了映射处理的复杂程度, 提高了映射处理的效率, 有利于提高网络防火墙对数据包的处理效率。
5 结束语
综上所述, 提高防火墙抵抗安全威胁的能力对嵌入式网络的进一步发展起着至关重要的作用。本文就嵌入式网络防火墙的安全策略进行了深入探讨, 提出了一系列相应的解决策略, 以期为有关方面的需要提供一定的参考和借鉴。
参考文献
[1]马永红, 高洁.基于嵌入式马尔可夫链的网络防火墙性能建模与分析[J].计算机应用研究, 2014 (05) .
嵌入策略 篇5
大多数的Linux系统运行于PC平台,但是,Linux也可在嵌入式系统中可靠的工作。此篇论文讲述了嵌入式系统的概况,以及论证了有关Linux应用于商业嵌入式系统的问题。
嵌入式系统 ---- 比摩西还老
那些用以控制设备的计算机,或叫嵌入式系统,差不多同计算机本身一样早地出现在我们的周围。
在通信领域中,这些嵌入式系统早在20世纪60年代后期就被用来控制电话的电子式机械交换并被称为“存储程控控制“系统“计算机”一词在那时尚不常见;所谓的存储程序是指那些放有程序和路由信息的内存。存储这些控制逻辑而不是用硬件来实现是在观念上的一种真正突破,现今,我们早认为这种工作机理是理所当然的了。
为适应每一个应用,这些计算机是被定做出来的(简言之,这些计算机是面向应用的).按今天的标准来看,他们有着奇怪的专用指令以及与主要计算引擎集成在一起的I/O设备,就像一批突变异种者.
微处理器通过提供一个小巧低价的并可以在大系统中像搭积木那样使用的CPU引擎改变了这一情况;它利用一基于被一条总线挂接在一起的不同外设所构建的严格的硬件体系结构并提供一个可以简化编程的通用目的编程模型.
同硬件一起,软件也得到了发展.最初,只有一些简单的开发工具可供用以创建和调试软件.各工程项目的运行软件通常以信手涂鸦的方式编出来.由于编译器经常有很多错误而且也缺乏象样的调试器,这些软件差不多总是用汇编语言或宏语言来写.采用软件构建块和标准库的编程思想直到20世纪70年代中期才流行起来.
用于嵌入式系统的与“搁架”无关的操作系统(OS)在20世纪70年代后期开始出现.它们中的许多是用汇编语言写就的并且仅能用于为其编写的微处理器上.当这些微处理器变得过时的时候,它们使用的OS也厄运同临.只能在新的处理器上从新写一遍才能运行.今天,许多这种早期的系统只不过成了人们模糊的记忆,还有人能记起MTOS吗?当C语言出现后,OS可以用一种高效的,稳定的和可移植的方式来编写.这种方式对使用和经营有直接的吸引力,因为它承载着人们当微处理器废弃不用时能保护他们的软件投资的希望.听起来,有点儿像商业市场营销中的一段传奇故事.用C来编写OS已经成了一种标准直至今天.总之,软件的可复用性已经为人接受而且正在很好地发挥作用.
在20世纪80年代早期,我特别喜爱的OS是Wendon操作系统;大概只要150美金,就可以获得它的C源代码库.它是一个开发套件,人们可以通过选择一些组件来构建自己的OS---整个过程就像是从中餐菜单里订餐一样.比如,可以从库中的多个可行选项列表中精选出一种任务调度算法和内存管理方案.
许多用于嵌入式系统的的商业操作系统在20世纪80年代获得了蓬勃发展.(Wendon)这一原始的炖菜已经发展成为了商业操作系统这一现代炖肉.今天已经有几打的商业性操作系统可供选择.出现了许多互相竞争的产品,如VxWorks,pSOS,Neculeus和WindowsCE.
许多嵌入式系统根本就没有操作系统,只不过有一个控制环而已.对很简单的嵌入式系统来说,这可能已经足够.不过,随着嵌入式系统在复杂性上的增长,一个操作系统显得重要起来,因为否则的话,将使(控制)软件复杂度变得极不合理.可悲的是,现实中确实有一些复杂得另人生畏的嵌入式系统,而且它们之所以变得复杂就因为它们的设计者坚持认为它们的系统不需要操作系统.
渐渐地,更多的嵌入式系统需要被连接到某些网络上,因而,需要在嵌入式系统中有网络协议栈(支持);甚至很多宾馆中的门把手都有一个连接到网络的微处理器.
把网络栈添加到一个仅用控制环来实现的简单嵌入式系统所带来的复杂程度可能足以唤起人们对一个操作系统的渴望.
除了各种商业性操作系统以外,还有多种私拥操作系统.其中,有很多是涂鸦式写就的,像Cisco公司的IOS等.有些则源于对别的操作系统的改写,像很多网络产品都衍生于同一版本的伯克利UNIX操作系统,因为后者有完整的网络支持能力;而还有一些则基于公共域OS,比如KA9Q就来源于PhilKarn.
作为侯选的嵌入式操作系统,LINUX有一些引人的优势:它可以移植到多个有不同结构的CPU和硬件平台上,很好的稳定性,各种性能的升级能力,而且开发更容易.。
开发工具--打破了传统仿真器的阻碍
在开发嵌入式系统中极为关键的一项是有各种可用的工具.就像任何一个行当一样,好的工具有助于快捷而圆满地完成任务;在嵌入式系统开发的不同阶段,可能要用到不同的工具.
传统上,开发嵌入式系统的首选工具是仿真器。这是一块比较昂贵的设备,一般插于微处理器和它的总线之间的电路中,从而让开发者监视和控制所有输入和输出 微处理器的各种活动和行为.在装配起来,可能有一些困难,并且由于它们的侵入性,装上后可能造成不稳定 的性能;尽管这样,它们却能在总线级上给出一个系统正在发生什么的清晰的描绘并排除了很多在硬件和软件 接口最底层上的猜测工作.
在以往,一些工程项目依赖它--经常在开发周期中的各个阶段--作为主要的调试工具.不过,一旦当编制的软件 有能力支持一个串型口的时候,大量的调试可以不用ICE而使用别的方法来完成.同样,大部分新一代的嵌入式系统 采用蛮像食谱式的微处理器设计;通信工作的启动代码常常是具备的以使串型口尽快地工作,这意味着开发者能 在没有ICE的情况下也能很好地进展;去掉了ICE,从而降低了开发成本.一旦串型口可以工作起来,便能用于支持那 些日渐复杂的开发工具的相关(软件)层
LINUX基于GNU C 编译器;后者作为GNU工具集的一组成部分,和源码级调试器gdb一起工作,提供了在开发一个嵌入式 LINUX系统中要用到的所有软件工具.下面是在为一个新的硬件开发一个新的嵌入式LINUX系统时要用到的典型调试 工具的序列和步骤:
1:写出或移植一段启动代码(后面再详细讨论);
2:写一段代码在串型口上输出一字符串,像“Hello,World!”(其实,我更喜欢人类发明电话后,通过电话说的第一句话“Watson, come here I need you”);
3:移植gdb目标码使之能在串型口上工作.这将允许向另一台正运行着gdb程序的LINUX主机会话;你只不过要告诉 gdb是通过串型口调试该目标程序;gdb通过串型口与你的测试计算机上的gdb目标码会话并给出全部C源码级的 调试信息.你也可以利用这一(通信)能力把附加的代码下载到RAM或闪存中.
4:借助gdb,执行余下的直到LINUX内核开始接管之前的所有硬件和软件的初始化代码.
5: 一旦LINUX内核启动后,上述的串型口就成为LINUX的控制台端口并可以利用它的便利来进行后继开发过程.再使用gdb的内核调试版本kgdb.这一步常常不是必需的.如果你有一个网络连接,比如,10BaseT,你或许会想让它紧接着工作起来.
6: 如果你的目标平台运行的Linux kernel是全功能的(即:未经删减过功能),你可以利用gdb或其图形化替代品如xgdb去调试你的应用进程.
实时--真是这样吗?
轻率,大部分的系统并不是如此。嵌入式系统经常被错误地说做实时系统,但是它们中的大多数并不具备实时特性。实时性仅仅是相对的。实时严谨地定义应为硬实时:能在极短的时间(毫秒级)内响应,并以某种确定的方式处理事件。现在,许多硬实时功能正逐渐集中在DSP或ASIC的设计中,通过一些适当的硬件,如FIFO,DMA或其它专用硬件来实现。
对大多数系统来说,有1到5毫秒的实时响应时间应足够了。当然,另一种宽松的要求也是可以接受的,例如:
Windows 98的处理监视器崩溃画面的中断,要求必须在4微秒之内处理的,占所有情况的98%;而在20微秒之内处理的,占各情况的100%.
这些宽松的实时要求可以很容易达到.实现它们过程中涉及到一些探讨,包括现场切换,中断延迟,任务选优和调度.
现场切换曾一度成为操作系统界的一个热点话题,不过,由于大多数CPU在这点上处理得比较令人满意而且CPU速度现在已经变得足够的快,现场切换现已不再是主要关注点了.
实时的严格性要求通常应由一个中断例程或内核中的现场驱动函数来处理以确保行为的一致性.当中断发生后,处理该中断所用的时间,即中断延迟,在很大程度上,由中断优先级与其它能临时屏蔽该中断的软件决定.
(实时系统中的)中断必须应被高效地设计和安排以确保满足时间上的要求,就像在其它OS中那样.在Intel X86处理器系列中,这项工作可以能被扩充了实时性的Linux很好地处理.(实时Linux,即:RTLinux,参看www.rtlinux.org/).从本质上说,它提供了一个把Linux作为其后台任务而运行的中断处理调度器.(This essentially provides an interrupt processing scheduler that runs Linux as its background task)一些关键(临界)中断可以不为Linux其他部分所知地得到服务(处理),因而,你就有了对临界时间的控制权.这种做法提供了实时级别和时间限制性较为宽松的基本Linux级别之间的界面.并提供了一个与别的嵌入式操作系统类似的实时处理框架.从根本上讲,为满足实时性要求,采用了把实时性的关键(临界)代码段隔离开来并进行高效的安排,然后对该段代码的处理结果再以更一般的方式(或许在进程级别上)来做进一步处理.
嵌入式系统--定义
一种观点认为: 如果某种应用没有用户界面,从而,用户不能直接地和它交互,那么它就是嵌入式系统.这当然太过简单化了.电梯控制系统是嵌入式系统,但却有一个用户界面: 选择楼层的按钮和显示电梯正到达几层的指示器. 对于那些连入网络的嵌入式系统,如果该系统包含一个用于监视和控制的web服务器,界面上的区别就更显模糊了.一个较好的定义应强调在该系统的重要功能或主要用途上.
由于Linux可以提供一个用以执行嵌入功能的基本内核以及各种你想要的用户界面元素,所以Linux有很强的通用特点.它能处理嵌入性任务和有关用户界面两方面的作业.可以把Linux看作如下的一个连续体:
从一个只有内存管理,任务调度,定时器服务的缩简的微内核到一个支持各种文件系统和多种网络服务的完整服务器.
一个最小的嵌入式系统仅需如下基本组成部分:
1 : 一个用作引导的可用设施(工具);
2 : 一个具备内存管理,进程管理,和定时器服务的Linux微内核;
3 : 一个初始进程;
为让上面的最小嵌入式系统变得有一定实用性,尚需加上一些东西:
1 : 硬件的驱动程序;
2 : 一个或几个应用进程以提供必要的应用功效.
随着对系统要求的增加,也许还要用到下面这些组件:
1 : 一个文件系统(或许放在ROM或RAM中);
2 : TCP/IP 网络协议栈;
3 : 一个磁盘用来存放半易失性数据和提供交换能力.
硬件平台
挑选最好的硬件是一项很复杂的工作,充满着各种顾忌和干扰:公司的政策,各种成(偏)见,其它工程的影响以及缺乏完整或准确的信息.
成本经常是一个关键性因素.当你着眼成本时,一定要考虑产品的整体成本,而不要只看到CPU;有时一个快速而廉价的CPU可能成了这个产品的耗价的问题根源,一旦当你加上总线和延迟逻辑以便同你的各种外设协同工作的时候.如果你是一个仅管听命的软件员,那么你就只能对早已作好的决定撞运气了,如果你是系统的设计者,就需要尽力制订一个合理的预算并且所选用的硬件要能令你满意地处理实时任务.
从实际中观察CPU到底需要多快方能把工作做好,然后把这个速度乘3(才是系统将所要的CPU速度);因为CPU在理论上所能达到的能力到了现实中总是难以置信地大打折扣!不要忘记缓存对你的系统的影响.
也要计算出总线需要运行多快,如果有二级总线(像一条PCI总线那样),也要把它们包含进来;一条慢的或过多参与DMA传输的总线能够让一个快速的CPU变成在爬行.
有集成外设的CPU很不错,因为很少有硬件需要调试.而且,为支持主流CPU,它们的驱动程序经常是可用的.不过在我以往的工程中,这些芯片对外设的组合好象总是不合理或者缺少我们期望的性能(功能);同样,正因为这些外设被集成在一起,所以不要设想这会是一个最低价的(硬件平台)方案.
把10磅的Linux塞进5磅的口袋
对Linux的一个通常观点是,它由于太大而不宜用作嵌入式系统.这种观点不一定是真实的.面向PC机的Linux典型发布版有很多你根本用不上的功能特征甚至也超过了一个真正PC用户的需求.
首先,我们要把内核和各种任务分开来.标准的Linux内核总是长驻内存的.每一个要运行的应用程序需要从磁盘中装载到内存中,并在那里被执行.当该程序运行结束,它占用的内存被释放掉,也就是说,该程序被卸载掉.在一个嵌入式系统中,可能不存在一个磁盘.因系统的复杂程度和硬件的不同设计,有两种方法可用以摆脱对一个磁盘的依赖性.在一个简单的系统中,当系统启动后,内核和各种应用进程均驻留在内存中--这是大多数传统嵌入式系统的工作方式.Linux也支持这种方式.
使用Linux, 出现了另外一种方式.既然Linux有装载和卸载程序的能力,一个嵌入式系统可以利用这一点以节省RAM.考虑一个比较典型的系统:有大约8兆到16兆的闪存和8兆RAM;那么闪存可以被用作文件系统.用闪存驱动程序作为从闪存到文件系统的界面.作为一种选择,也可以用一个闪存磁盘.这是用闪存来摆脱系统对一个磁盘的需求(依赖).使用这种方式的一个例子是M-System(www.m-systems.com/)中的DiskOnChip技术,它可以支持160MB.所有应用程序以文件的形式被存放在闪存文件系统中并在必要的时候被装载到内存中;这种“用到时才装载”的能力是一个很强大的特征,从而可以很容易地具有(支持)以下各种能力:
1: 允许系统启动后抛弃(释放)那些初始化代码(空间).典型地,Linux用到很多运行在内核外部的工具性程序(utilities).它们通常仅在系统初始化期间运行一次,以后将再也用不到.而且,它们以互斥的方式,一个接一个地依序运行.这样,随着系统的启动,一段内存可以被反复地使用:“以页调入”的方式运载每一个程序.这可以很好地节省内存,特别是处理像网络栈那样的对象时,因为这些对象一经配置便永不更变.
2: 如果Linux之支持可动态装卸模块的特征被包含在内核之中,不仅各种应用程序,驱动程序也可被动态装卸.这样,系统能够检查硬件环境并有选择性地仅仅装载那些适应当前硬件环境的软件.这可以取消(降低)让一个程序以占用更多闪存的代价处理众多硬件变数的复杂性.
3: 系统的升级更加标准化(模块化),你可以常常在系统运行过程中升级一些应用和驱动程序.
4: 配置信息和运行时间参数可作为数据文件存放在闪存中.
无虚拟内存交换
另外一个Linux的特性就是虚拟内存交换,
这一特性将应用程序的编写引入歧途,应用程序的内存需求量可以无限制地上升,因为操作系统在磁盘中提供了交换空间。而在一个无盘的嵌入式系统中,这种特性就用不上了。
如此强大的功能,在嵌入式系统中竟无用武之地。事实上,在一个严格的实时系统中你可能并不需要这种特性,因为它会导致定时功能的失控。如同其它的嵌入式系统一样,软件的设计必须很紧凑,以适应较小的物理内存。
注意,这取决于你的CPU体系,比较明智的做法是保留Linux的这段代码,毕竟,砍掉这些代码,还是要付出一些工作量的。但是,这些代码依然有保留的理由。因为它们能够支持代码共享,多个进程可以共享某一软件的同一拷贝。如果无此功能,那么,每一个程序都必须拥有库程序的独立拷贝,例如:printf 。
将交换空间大小简单地置为零,就可以关掉系统虚拟内存的分页交换机制了。当你的程序要求内存大于实际的内存时,系统的表现就如同交换空间溢出时一样:你的程序不会被加载,或者,当要求过多内存时,malloc 调用失败。
在许多的CPU体系中,虚存机制提供的内存管理可使进程的地址空间相互隔离。一般在嵌入式系统中不是这样,地址空间是简单的,平坦的情况。Linux的虚存机制使出错的进程不致影响整个系统。在许多嵌入式系统中,因为效率原因而设置的全局数据,同时被几个进程所共享,这在Linux中也存在,那就是内存共享,它可以经过设置,使某一段内存成为共享内存。
文件系统
许多嵌入式系统不存在一个磁盘或者一个文件系统。没有它们中的任何一个,Linux也可以运行。正如前面提到的那样,应用任务可以随同内核一起被编译并在启动时作为一个映像被加载.对简单系统来说,这已经胜任.不过,它却缺少前面描述到的各种灵活性.
事实上,如果你观察过许多商业性嵌入式系统,你会发现他们把文件系统作为可选项来提供.大部分要么是一个私人拥有的(专门)文件系统,要么是一个与MS-DOS兼容的文件系统.Linux不但支持许多其它文件系统也支持MS-DOS兼容的文件系统,通常推荐使用除MS-DOS兼容文件系统以外的其它文件系统,因为它们有较优的健壮性和容错性.Linux也有检查和修复工具(不过商业卖主一般不提供),这对从网络上进行更新的闪存系统尤为重要.如果系统在升级中断电,可能导致系统无法再用.一个修复工具通常可以排解此类问题.
文件系统可以放在一个传统磁盘驱动中,或闪存中,或任何可用的其它介质中.同样,一个小的RAM disk常常可以很好地存放暂时性文件(易失性文件).闪存被分隔成很多小块(并被组织起来).它们中可能有一个引导块,它存放了CPU上电后运行的第一个软件.可能存放的就是Linux的引导程序.余下的闪存块可以被用作文件系统.Linux的内核可以被引导程序从闪存中拷贝到RAM中;或者,作为另一种选择,可以把内核放在闪存的一个独立区中并从那里直接运行.
对一些系统来说,另一可行的选择是包含一个廉价的CD-ROM驱动.它可能比闪存还要便宜.并且借助更换CD-ROM盘片就可很容易地得到升级.通过这种方法,Linux只需从CD-ROM启动并可以像对一个硬盘那样从该CD-ROM中获得所有用到的程序.
最后,对于网络上的嵌入式系统(有网络支持的嵌入式系统),Linux支持NFS(Network File System).这一着打开了在一个网络支持系统中实现各种增值特征的通道.首先它允许通过网络加载各种应用程序.由于用在每一个嵌入式系统上的软件可以从一个公用的服务器上加载,这在控制软件的修订或升级中是很重要的.在系统运行的过程中,导入和导出数据,配置,状态信息的一个备份也很有用.对用户监控而言,这是一个非常强大的特征;举例来说,一个嵌入式系统可能装配了一个RAM disk,它包含着与系统当前状态的更新维持一致的(状态)文件.那么别的嵌入式系统仅需通过网络把这个RAM disk作为远程磁盘mount过来便可以访问那些位于远端RAM disk中的状态文件.这也允许在另一台机器上的WEB服务器借助简单的CGI脚本来访问那些状态信息.运行在其他机器上的应用程序包能够很容易地访问这些数据.对更复杂的监控,像MatLab(www.mathworks.com/products/matlab/)这样的一个应用程序包能很容易地用图形化来显示在一个系统操作者的PC或工作站上的系统操作.
引导内核--当没有LILO或BIOS时
当一个微处理器最初启动时,它首先执行在一个预定地址处的指令.通常这个位置是只读内存,其中存放着系统初始化或引导程序.在PC中,它就是BIOS.这些程序要执行低级的CPU初始化并配置其他硬件.BIOS接着判断出哪一个磁盘包含有操作系统,再把OS拷贝到RAM中,并把控制权交给OS.实际上,整个过程远非这么简单,不过对我们的理解已经足够.运行在PC上的Linux系统依赖于该PC的BIOS来提供这些配置和OS加载功能.
在一个嵌入式系统里,常常没有上述的BIOS;这样,你就需要去提供等价的启动代码.还好,一个嵌入式系统的BIOS并不需要像PC BIOS引导程序那样有那么多的灵活性,因为它通常仅需处理一种硬件配置方案.这些代码比较简单但也另人厌烦.它是一些把特定的数写入指定硬件寄存器的指令序列.不过这是很关键的代码,因为这些数值必须要符合你的硬件并且要按特定顺序来完成.在大多数情况下,(这些代码中)有一个最小化的加电自检模块用以检查内存,让一些LED闪现一下,也可能探测一些其它让Linux OS启动和运行的必要硬件.这些启动代码是高度硬件专用性的,因而,不具移植性.
有幸的是,大多数系统为核心微处理器和内存使用了食谱式的硬件设计.典型地,芯片制造商有一个可供设计参考的演示板--新设计多少可以从中直接拷贝一些.对这些食谱式的设计,经常有现成的启动代码可用,而且可以很容易地被修改以适应你的需要.很少(会遇到)有需要从头开始编写的启动代码.
为了测试你的(启动)代码,你可以使用一个包含它自己的仿真内存的电子仿真器(in-circuit emulator),这里的仿真内存用以替换目标内存.你把待测代码加载到仿真器中并通过仿真器调试它.如果没有可用的仿真器,也可以跳过这一步,不过需要一个较长的调试周期.
这些代码最终要从非易失性存储器中运行,通常是用闪存或EPROM芯片,你要想办法把这些代码放进前述芯片中,放入的具体方法依赖于“目标”硬件和工具.一个常见的方法是把闪存或EPROM芯片插入到一个EPROM或闪存“烧炉”中.这种方法将把你的程序“烧入”(存入)芯片中.然后,把芯片插入到你目标板上的一个插槽中,打开电源.这种方法要求在板子上具有插槽化(socketed)部分;然而,有些设备包格式(结构)不允许 槽化(socketed).
另一种办法是通过一个JTAG接口.一些芯片包含一个JTAG接口,从而可以对芯片编程.这是一种最简便的办法.芯片可以被永久地焊接到板子上.一段电缆从板子上的JTAG连接器(通常是一个PC卡)连接着一个JTAG接口.接下来要求在操纵JTAG接口的PC上做一些用户定制性编程.在仅需较少运行量的产品中,也可以使用这种方法.
健壮性---比政客的承诺还可靠
这是显而易见的,作为一种选择,Linux已被普遍地认为能够在PC平台上可靠地,稳定地运行。嵌入式内核自身有多稳定?对于大多数微处理器来说,Linux是很好用的。将Linux移植到新的微处理器体系也是非常迅捷的。一般是将其移植到一种新型的目标板,这种新型的目标板包含有独特的外设,当然还有CPU.
幸运的是,大部分的内核代码都是相同的,因为它们与微处理器无关,所以,移植的工作都集中在那些不同的部分,通常是一些存储器管理及中断处理程序。一旦完成,它们往往是非常稳定。如同前面谈到的,引导的过程非常依赖于硬件的变化而变化,所以,一定要周密地计划一番。
设备驱动程序虽然变化多端,但其中一些已相当稳定。同时,你的选择也不算太多,一旦离开PC平台,那就只有自己去写了。所幸的是,在我们周围已有许多既有的设备驱动程序,你总能找到一个近似的,而去修改它。驱动程序的接口是明确定义的。大多数驱动程序之间都是相似的,所以,移植一个磁盘,网络,串行口驱动程序,从一个设备到另一种,经常不是太难。我发现大多数的驱动程序都写的很好,并很好理解,而难题反而是在我手上的那本讲解内核结构的书。
就我个人的经验而言,Linux与我曾经使用过的那些顶顶大名的商业操作系统一样稳定。总的来说,关于这些操作系统(包括Linux)的问题都源于对系统工作策略的误解,而不是纯代码bug或基本设计错误。大量的操作系统的bug故事,在这里没有必要再重提。而Linux的优点,就在于其源码是公开的,并有很好的注释和完整的文档说明,从而,你也就拥有了控制与解决一切问题的能力基础。
即内核与驱动程序之后,还有一点:如果一个系统中有一只硬盘,那么,系统的可靠性可能会成为问题。我们拥有两年的经验和时间,都沉浸在有盘嵌入式系统中。这些系统从不关机,电源有几次被意外地断掉,可是,EXT2文件系统表现得很好。标准的Linux初始化脚本运行了fsck程序。这个程序做了一个漂亮的检查与清理不正常节点的工作。还有一处英明之举,也是一处较大的变动,我们将update程序由30秒执行一次,调整为5或10秒执行一次。这使得磁盘高速缓存中的数据能较频繁地写回到磁盘里,从而,降低了丢失数据的可能性。
没有
嵌入式Linux当然有它的不足。比如,它很占内存,尽管不比一些商业竞争者的情况更坏。但可以通过消减一些不必要的功能来改善,也有可能得不偿失,因为很可能会产生比较严重的bug。
大多数Linux应用程序都会使用虚拟内存交换,这在很多嵌入式系统中是一种非确定因素,所以,不要假定任何一个无盘嵌入式系统能够运行什么Linux应用程序。
低等级的,内核级的调试工具仍然不是很好使。kgdb会使人感到很不适应,你常要reboot。很不幸,调试仍然是以打印语句为主。
对于我来说最严重的问题是心理作用。Linux是一种极具适用性的操作系统。可是,嵌入式系统在通常情况下是不具备这种性质的;它们是对于特定的用途,进行过仔细优化了。但Linux的这种适用性倾向,保持了系统的通用性和多变性,同时也是一个奢侈的目标,付出的代价很高,需要增添许多额外的工作,会有许多附加的程序产生,从而增加了软件包的体积,有时还会以降低性能为代价。举一个常提到的例子--配置程序:在一个网络接口上配置IP地址,一般是由启动脚本中的ifconfig完成的。这是一个大小约28K左右程序,其实只用几行代码就可以完成它的工作:它负责根据配置文件中的内容初始化一些相应的数据结构。事情就是这样:当一切成为一件合理的事情去做时,你不这样做,又能怎样呢?不然“软件”意义又何在呢。
结束语
在嵌入式系统中使用Linux是可能的,并且已经成功了。它可以可靠地工作。从此,我们就在开发的成本上有了第二种选择。
嵌入策略 篇6
由于嵌入式系统软硬件的限制,在应用于通用计算机系统的标准文件系统(例如用于Win32/DOS的FAT和用于Linux的EXT)时,必须进行相应修改以适应嵌入式环境。在通用的文件系统趋向于简单化和专业化的进程中,研究主要集中在以下几个方面[2,3]:在一个小的高速存储器上实现嵌入式系统处理速度和有限资源的平衡;实现特定性能,如用于满足不同的嵌入式应用环境的数据加密和运行的可靠性的功能;提高嵌入式系统的实时性能。事实上,不少嵌入式系统是根据客户的特殊要求定做的。针对这种情况,开发了具有高可靠性的简化嵌入式闪存文件系统,与复杂的商用文件系统相比,这个嵌入式计算机数值控制系统更实用。
1 FFS存储结构和框架
嵌入式系统中闪存有以下特点:(1)闪存以扇区为单位执行,如果修改扇区内1 B的数据,则整个扇区的数据都将被重写;(2)通常任一扇区可重写大约0.1~1万次;(3)损坏扇区难免。在计算机数控系统中应用了闪存特性和局部处理程序访问特征,在逻辑上非结构化的数据流模式被应用到FFS,在物理上存储空间以扇区为基础分成不同的块[4]。闪存文件系统(FFS)不仅提供了根据文件名查找和访问文件,使得有限的存储空间得到合理和充分利用,而且还提供基于存储内容的擦写策略损坏扇区的适应性管理,因此,在某种程度上FFS的可靠性有所提高。
为了使闪存文件系统在不同的平台上更易于进行维护、升级和移植,基于Madnick分层模型设计了一个文件系统分层结构。图1所示的文件系统包括2个主要部分:文件管理单元和存储空间管理单元。较低层为上层部分提供服务。每一层仅涉及接口,而不是更低或上层内部结构。
2 存储空间管理
作为嵌入式系统的一部分,闪存存储管理的主要功能包括提高使用效率、加快执行速度和根据其物理特性使用特殊算法管理闪存内存单元的使用频率[5]。存储空间管理单元在逻辑上由3个层次组成:文件物理层、存储设备分配层和闪存驱动层[6]。闪存驱动层为上层提供最基本的驱动程序,如下:
2.1 存储扇区管理
本文开发的FFS存储结构类似于MS-DOS的FAT,是FAT系统的修改。图2显示了一系列模式的基本存储结构。
系统记录区(SRA)存储介质信息和最重要的文件系统信息,如闪存类型、容量、扇区数和扇区利用现状。这个扇区的利用状况包括文件数、未使用的扇区数、损坏扇区数、第一个和最后一个未使用的扇区编号。图3显示了在SRA上的内存分配。文件信息区域(FIA)用于存储文件的详细信息,如文件名、文件类型、文件大小、文件属性和闪存链表项。程序数据区(PDA)用于存储程序数据。在图2阴影部分是每个区域损坏的扇区。如果损坏的扇区数达到给定界限值,警报将自动启动。图3为SRA上的内存分配情况,不同部分存储特定的记录信息:1为闪存内存类型;2为闪存内存容量;3为扇区数;4为文件数;5为未使用扇区数;6为损坏的扇区数;7为最后一次写入FIA的扇区组数;8为第一个未使用扇区号;9为最后未使用扇区号;10为系统记录控制的关键字;11为下一个要写入的扇区号。
不同的系统有不同的存储空间管理模式,最简单的可能是一个命令模式,但它并不适用于某些特殊应用。例如,在计算机数控系统中使用命令模式,用户不方便编辑、修改或者删除由各种机器处理指令组成的G代码程序。另一个常用的方式是静态存储模式,这意味着每一个文件分配固定的扇区数。在这种情况下,如果文件大小超过了给定的空间,虽然仍有未使用的扇区,但写操作却不能成功完成。同样,小文件显然将导致存储空间浪费。此外,由于过度频繁地访问同一个文件,与其他的扇区相比这样的扇区更易于损坏。因此,静态存储模式不是一个很好的选择。
为了克服这些问题,提出了一个动态存储空间管理模式,采用平均擦除和写入策略。先入先出(FIFO)的引入,保证了闪存存储扇区的平均使用。当系统第一次加电,未使用的扇区都初始化为一个双链表。此后,这些扇区应该从链表头节点转到尾节点。这样,在访问每个扇区的频率将趋于平等,每个扇区将不会过度频繁读取/写入。假设链表有N个节点,每个扇区访问的概率只有1/N,因此,闪存的使用寿命可以明显延长。
相对而言,基于MS-DOS的FAT系统只为数据区提供损害管理,却忽视了文件系统结构区域。相对地,SRA作为FFS结构区域,由于存储了系统关键信息而成为最重要的区域。而且,由于频繁访问,SRA往往更易损坏。因此,这一区域应当运用一种安全策略。根据在SRA、FIA和PDA存放的数据的重要性不同,不同存储区域应当分配不同的可靠性要求。因此,可以充分利用闪存存储能力,写校验时间将会减少,从而写速度将有所改善。
2.2 SRA的平均擦除和写入管理
为了实现对System record area(SRA)平均擦除和写管理,避免由系统记录扇区物理损伤而导致整体系统的故障,SRA被平均划分成3个小组。3组依次进行写操作,可以为系统记录存储安全提供一个冗余策略,从而提高系统的可靠性,延长系统寿命。这对于每次在系统通电之后获取SRA代码值是必要的。由系统记录关键字(Sys Keyword)控制的值,标记着系统关闭前最后一次写操作的系统扇区的执行记录,它显示为:
在系统初始化时,SRA中每组的相应系统变量关键字(1~3)初始化为0。在后续操作中,各组关键字(Sys Keyword)的真实值应该更新,在系统每次启动时分别从SRA读出。因此,Sys Code Value的值可根据式(1)得到。执行最后一次写操作的组号可以通过调用函数Get LastGroup-Num()获得。一旦SRA的记录数据被更改,系统关键字应该相应更新。然后包括Sys Keyword的记录数据,应写入到根据以下方法获得的相应扇区。
下一次将被写入的该系统记录扇区的组号与转移的参量Last Group Num可以通过调用函数Get Next GroupNum(Uchar Last Group Num)共同获得。Sys Code Value的值将更新如下:
通过组合式(1)和式(2)可以得到每组Sys Keyword的值,因此,可以迅速查出最新和最旧的记录。该方法是一种快速计算和跟踪策略,这样,根据得到的组号和Sys Keyword的值,写操作可以顺利执行。
该系统记录扇区的详细参数值如表1所示。
3 文件管理
文件管理层(FML)封装了整个文件系统,并且为操作系统和上层的应用程序提供统一标准的程序接口(APIs)。用户操作请求将被APIs移交到文件的逻辑层(FLL),然后将请求发送到文件的物理层(FPL)。
3.1 文件编辑
文件系统应提供友好的用户界面,用户可以操作文件,无需考虑文件的结构或物理位置。图4显示编辑一个存储在闪存的文件流程图。首先要遍历文件信息链表,根据文件名来查找存储此文件信息的节点。因此,该文件存储空间的第一个扇区可获取,后续扇区依次获取。然后,每个扇区将逐个读取,数据将被写入缓冲区。通过建立一个双链表显示数据,然后通过人机界面进行编辑操作。最后,将修改后的数据写回到闪存,文件信息和系统记录将自动更新。
3.2 文件存储和文件删除
连续的文件存储结构模式(如图5中的文件N005和N011)在存储前,文件通常被划分成为大小相等的多个数据块(除最后一个块的大小可能小于其他块)。块的数量是由文件和块大小决定,而块的大小与存储介质有关。在本文中,闪存的存储单元(即扇区)为256 B,因此,该块的大小建议不超过256 B。在这里,把文件划分为252 B大小的块,每个数据块占用一个扇区的存储空间。因此,块的数量(即被占用的扇区数)可以计算出,这是最低整数不少于文件字节大小除以块字节大小所得的商数。然后未使用的扇区链表的头节点作为这个文件存储空间的第一个扇区。紧随第一个扇区,很多未使用的扇区被取出后,整个文件的存储空间可用。因此,该文件成功保存。
闪存的地址空间不允许随意被删除,删除一个文件时必须把扇区作为一个删除单元。因此,删除一个文件,要使用与编辑操作相同的手段获得该文件节点的存储信息,这样文件的信息可以使用。有了文件信息,文件的存储空间的第一个扇区可以得到,其他的也可以依次得到。然后未使用的扇区链表上的扇区可以通过调用函数Free Sect(Ulong Sect Num)释放第一个扇区。最后,根据双链表的原则,这个节点将被删除。
图5为一个文件创建和删除过程的示例。要创建一个文件(文件名为N005,大小为912 B,第一个扇区是5号),未使用扇区链表的头节点作为这个文件的存储空间的第一个扇区(扇区号为5)。同时,在文件信息链表的尾节点写文件信息。这个文件的存储扇区数可以计算出来,结果被证明是4。然后,从未使用的扇区链表头部,4个扇区依次用于存储文件数据。从而,文件信息和系统记录更新后,文件的创建操作完成。
要删除文件(文件名是N011,文件大小为2 026 B,第一个扇区编号为6),根据文件名N011,通过遍历文件信息链表获取文件信息节点,根据存储在此节点文件信息,可以获得文件大小和存储空间项(即文件的第一个扇区)。扇区数目也可以计算出来。由于指针索引指向下一个节点,每个扇区被释放,并连接到未使用扇区链表尾节点。最后的操作是从文件信息链表删除这个节点。与此同时,文件信息和系统的记录应该更新。
通过在一个嵌入式计算机数控系统上的有效且成功应用充分展示了FFS的良好性能。这个FFS经过略微的修改即可在不同的嵌入式平台上进行移植,且具有一定的普遍性。
为了提高存储和管理嵌入式平台上文件数据的性能,本文提出了一种新的应用于闪存文件系统(FFS)的策略,其特点可以描述如下:
(1)减少写周期提高写入速度。
(2)采用动态分配存储空间,提高利用效率和延长闪存的使用寿命。
(3)相应的文件被删除后,存储扇区可以很快被释放,并可以连接到未使用的扇区链表。
(4)当损坏扇区的数量到达设置值时自动报警,确保系统处于良好状态。
(5)FAT分配的内存空间存储指针以数组的形式作为全局变量。
(6)为延长内核扇区寿命确保系统启动可靠服务,采用冗余设计、快速计算和追踪策略。
因此,本文中的FFS,特别是在可靠性、存储效率和良好的可移植性方面已获得明显的成效。
摘要:开发了一个基于闪存平台的嵌入式文件系统。为保证闪存扇区的平均使用率和均衡擦写次数,引入了损坏管理策略,在这种策略中采用了动态存储空间管理模式和先入先出(FIFO)策略。所采用的冗余设计、快速计算和跟踪策略还可以延长核心扇区使用寿命,保证系统启动可靠的服务。
关键词:存储管理,嵌入式系统,闪存,扇区,闪存文件系统
参考文献
[1]ZHAO Kui,ZHANG Fan.A storage management scheme for embedded system[J].Technological Development of Enter-prise,2005,24(1):23-26.
[2]周兴德,孟晓风.实时系统软件设计方法[J].计算机自动测量与控制,2000(4-6).
[3]NOERGAARD T.Embedded systems architecture:a compre-hensive guide for engineers and programmers[M].Newnes,USA,2005:369-412.
[4]ROSENBLUM M,OUSTERHOUT J K.The design and im-plementation of a log-structured file system[J].ACM Trans-actions on Computer Systems(TOCS),1992,10(1):26-52.
[5]Kim Han Joon,Lee Sang Goo.A new flash memory manage-ment for flash storage system[C].In:Proceedings of the TwentyThird Annual International Computer Software and Applications Conference.IEEE Computer Society,Washington DC,USA,1999:284-289.
嵌入策略 篇7
在嵌入式系统[1,2]中,由于设备性能限制系统总的可分配内存相对较小,而在嵌入式平台上浏览器正常运行所需内存一般都比较大,并且内存分配和释放操作也比较频繁,例如,IPTV EPG界面上显示各类菜单按钮、链接以及为用户提供动态和静态的多媒体内容时,往往EPG页面中存在着各种长短不一节目导航提示信息、各种表单、导航按钮以及图片等,对于这些要显示的对象需要通过数个矩形数据结构来表示它们。在界面排版过程中,随着上、下文的改变,会进行频繁的分配释放,例如把图片插入到网页的时候,网页会把一个局部区域内的显示对象释放然后重新生成,从内存管理角度来看,这导致了频繁的内存分配和释放。为了保证浏览器Browser的正常运行和减小内部碎片,本文在分析和研究μCLinux嵌入式操作系统内存管理基础之上,提出运行在嵌入式设备上浏览器的内存管理策略,该策略主要针对浏览器中固定大小结构的频繁分配和释放,比如各种box,采用池式分配的方式(Pooled Allocation)来管理固定大小结构的分配和释放;对于可变大小结构的分配和释放,比如字符串,采用Vector进行分配和释放。
1 μCLinux内存管理分析
μCLinux是主流嵌入式Linux 系统之一,其设计的目标平台是那些不具有内存管理单元(MMU)的微处理芯片。μCLinux对标准Linux修改最大的部分在于内存管理部分,而浏览器内存管理是在一块已分配的内存上进行再组织内存的使用方式,把这块已分配的内存当作物理内存来使用。因此μCLinux的内存管理思想[3,4]对于本文设计嵌入式设备浏览器内存管理有较好参考意义
1.1 μCLinux内存管理数据结构
μCLinux取消了标准Linux的VMA结构(该结构建立在虚拟内存之上),每个进程维护自己的内存地址空间的方法是在它的mm_DataStruct 中维护了一个此进程所使用的内存块的链表。一个进程可以拥有任意多个内存块,每个内存块用mm_Rblock_DataStruct 类型的数据结构描述其起始地址、长度以及当前被使用的次数。每个内存块由mMap()的调用来建立。
每个进程维护了一个mm_DataStruct结构(如图1所示)用来管理它所拥有的内存空间。tblock是管理所有这个进程所用到的内存区域块的链表表头。mm_Tblock_DataStruct是管理mm_Rblock_DataStruct的链表结构,rblock指向当前位置的链表项,next 是指向下一个位置的链表项。mm_Rblock_DataStruct结构是用来管理内存块的数据结构,size指明kblock所指向的内存区域的大小,ref_count记录了这个内存空间的用户个数,kblock是指向这个内存块空间起始位置的指针。
1.2 μCLinux物理空间管理
虽然μCLinux中对内存地址的操作都是直接对物理内存进行的,但是仍然需要使用Linux中对物理页帧的管理数据结构,μCLinux对物理空间管理主要有以下几个方面:
(1) 物理内存以页帧为单位,页帧的长度固定为4 KB,在内核中使用page结构来表示每个物理页帧;
(2) 所有的page结构形成一个mem_map表,mem_map表在系统初始化时由free_area_init()函数创建;
(3) 在物理内存低端的bitmap 表以位图方式记录了所有物理内存的空闲状况,它也是在系统初始化时由free_area_init()函数创建,bitmap 表分割NR_MEM_LISTS 组,对第i组初始化时设定长度为(end_mem -start_ mem)/PAGE_SIZE/2(i+3),每位表示连续2i个页帧的空状况,置位为1表示其中一页或几页已被占用;
(4) 用free_area数组记录空闲的物理页帧,free_area数组由NR_MEM_LISTS 个free_area_struct结构类型的数组元素构成,每个元素均作为一条空闲块链表的表头,连续2i个空闲页帧则挂到free_area数组的第i项后面,free_area当前空闲页面个数要大于系统中硬性规定的必须保留的空闲页面的个数(5 或者低于5的某个数值),如果不足规定的空闲页面,则调用try_to_free_page()函数尝试增加系统中的空闲页面的数量;
(5) Linux采用buddy算法分配空闲块。
2 嵌入式设备浏览器内存管理策略
应用程序浏览器内存管理是在一块已分配的内存上进行再组织内存[5]的使用方式,它不会涉及操作系统的内存管理,但是可以借鉴操作系统的各种内存管理方法,使对应用程序级的内存管理[6,7]更高效。首先系统获得一块固定大小的内存,然后把这块内存按照功能进行固定分区,图2是Brow ser内存管理各分区的布局。把从系统获得的内存分为4个区:第一个区是Static Section,大小为20 KB,这个区主要用于保存全局性数据结构GlobalCtlVar,50 Word大小的索引缓存(Indices Buffer)和Pool Linked List。第二个区是String Map Section是一个对象表,大小为20 KB,用于存入数组结构StrMap的数组,预定义数组大小为1 000,String Map功能之一类似于bitmap,用于管理空闲的数据块。第三个区是Reserve Section(保留区),大小是20 KB。第四个区是Available Section,真正分配给用户的内存从这个区取出,有关pool的分配从上到下,有关Vector的分配从下到上。
(1) 管理策略一:
具有垃圾回收机制的可动态增长的池式分配。与传统固定大小的内存池技术[7]相比,在此引入了具有垃圾回收机制的可动态增长的池式分配,其数据结构如图3所示。由于会根据需要而动态增长,因此不用预测内存池的大小;由于具有垃圾回收机制,因此可以循环使用池内空间。浏览器使用多种box对象,并经常对它们进行分配和归还,但典型的内存管理器会为每一个对象存储一个header(表头),对小对象而言这些headers可能会使程序的内存需求加倍,此外,在一个共享的heap中分配和归还小对象会带来碎片风险,并因大量动态对象而增加管理时间。因此,对每种分配和归还频繁的box对象分别建立一个对象池,各种对象池形成一个poollinkedlist。一个对象池首先预先分配一个固定大小的arena并按对象大小对arena进行格式化,当用完arena的最后一个对象时,对当前的pool进行垃圾回收,把回收的空间放入这个pool的freelist当中,用户可以重用freelist上的空间,如果垃圾回收后发现在这个pool中已经没有可用空间,则动态分配一个arena。从这种池式分配的过程来看,对arena 的分配采用了动态分区方式,对arena 中结构对象的分配采用了固定分区方式。
从理论上分析,由于内存管理器减少了存储每一个对象需要的一个header(表头)大小(在这里这个表头是GCThing, GCThing由next指针、flagp指针组成),并且减少了碎片,池式分配能够在较少内存中存储更多对象,减少系统的整体内存需求。同时,通过一个具有垃圾回收机制的可动态增长的内存池来容纳一类小型结构对象,使这些小型结构对象在内存中紧密排列,因而降低分页系统中的paging频率及其带来的额外开销。由于本方案实现的分配和归还函数性能较好,因而提高了时间效率和实时响应能力。但是,对于每个arena,由于在最后剩余空间不能容纳一个结构对象的大小,那么这块剩余空间就会成内部碎片。当然,求出arena 的合理大小会使内部碎片减少到几个字节,甚至是没有内部碎片;特别是每个pool的最后一个arena,由于这个arena最有可能没有放满结构对象,因此可能会有比较多的空间浪费。
用户从arena中分配走内存空间,图3 中标有allocated space的区域(这块区域由其上面的GCThing数据结构进行管理,GCThing 由next 指针、flagp 指针组成),当用户用完这块内存空间,应用程序级的内存管理应该如何重用它,以及在什么时候重用它。采用位图与垃圾回收机制结合来重用在arena中已被用户废弃的内存空间。在图3中的FLAG SECTION其本质上是一个bitmap,在FLAG SECTION中最小的单位是一个字节而不是一个位,在FLAG SECTION 中每一个flag都与一个按存放结构大小进行格式化后的内存区域相对应,在图3中用GCThing数据结构中的flagp指针处理flag 与其相对应的内存区域之间相互挂钩,用flag字节来表示其相对应的内存区域是正在使用,还是用户已经废弃,或是已经被的内存管理器回收。 用户通过的内存管理器获得一块内存区域,内存管理器把相对应的flag 置为正在使用;用户通过内存管理器释放分配给它的内存区域,内存管理器把相对应的flag置为已经废弃;内存管理器回收flag标志为已经废弃的内存区域,把回收的内存区域通过GCThing 数据结构挂到以freeListHead为头指针的空闲块链表中,如图3所示,从而达到了废弃内存区域的循环使用。
(2) 管理策略二:
具有Compaction机制的Vector分配策略。在Browser中,除了结构大小固定的对象频繁分配和归还外,经常有大量大小不同的对象分配和归还,目前,这种现象主要出现在处理TextBox这一块内容上,这些大小不同的对象具有如下特点:其一是对象的分配和归还是随机发生的;其二是对象可以在其生命过程中改变自身大小。如果直接利用系统函数进行分配和释放,在总内存比较小的嵌入式系统中会造成过多的碎片[8],从而浪费了大量内存空间。具有Compac tion机制的Vector通过移动“继续在用对象”来移除“继续在用对象”之间的“已经废弃不用的对象”,从而把“继续在用对象”移成连续排列,而“已经废弃不用的所有对象”所占用的空间解放出来放到地址空间的某一端,对它们进行循环使用,移动对象,最富有挑战的问题在于保证原来对内存空间的引用都被正确更新。当某个对象移往一个新位置,所有指向原地址的指针都将失效。虽然技术上有可能找出每一个移动对象的原有指针并更新之,但通常引入一个额外的间接层会使问题更简单:用户引用的是指向对象表中一个项目栏内对象的“handle”,而不再直接指向对象地址,“handle”是指向某对象真实地址的“惟一”指针,对象表中一个项目栏内有代表handle的addr、有表示对象所占空间的大小size和用于标志对象所占空间是否为“继续在用对象”还是“已经废弃不用的对象”的标志位mark。图4表示了对象引用、对象表和实际对象的三者关系。当内存中移动“继续在用对象”的时候,只需要更新对象表中相对应项目栏中代表handle的addr,使它指向对象的新地址,其他所有引用都可以继续正确地访问该对象。这里返回给用户的引用是对象表的索引,用户再通过索引获得相对应的handle指针addr,为了使用户快速获取可用索引,建立了50个可用索引的buffer。
如果对许多对象执行Compaction,那么整个Compaction过程是比较费时的,因此,什么时候执行Compaction将对一个应用程序的执行效率有着重大影响。原则是:在内存空间和可用索引能够满足分配的情况下,能不要Compaction 就不要执行Compaction。因此建立了两个执行Compaction 的触发点,一个触发点是当用完了预分配1 000个索引值时;另一个触发点是当没有可用内存空间用于分配时触发。结果,在许多情况下避开了Compaction过程。对于管理索引值问题,采用了如下简单算法:先取前50个索引值放到Index Buffer中,用完50个索引值以后,再取50个索引值放入Buffer中,直到预分配的1 000个索引值用完为止,这时执行Compaction,然后按顺序搜索对象表,如果对象表表项标志为可以重复利用,则把这个对象表表项的索引加入到Index Buffer之中,直到填满Index Buffer为止;如果1 000个索引值已经全部用完,则按100为单位动态增加索引值。在Vector中,存放对象表需要一些额外的空间,大量对象的Compaction会占用比较多的时间,从而降低时间效率。
3 Browser内存管理的性能分析
Browser分别调用自己应用程序级的内存管理的接口与系统级的内存管理的接口进行运行比较,结论是应用程序级的内存管理效率比系统级的内存管理效率要高,网页越大,体现出来的效率越高。
3.1 池式分配内存使用情况
对于Browse中各种固定大小的结构(这种结构称谓thing),分别用相对应的一个内存池(pool)进行管理,各个pool形成一条pool链,内存管理器在执行一段时间后会按照各个pool的调用频率高低对pool链进行排序,从而提高了查找pool的效率。用小网页、中等大小网页和大网页对pool链中的各个pool进行测试,得到如图5所示的结果。
3.2 执行Compaction 前后Vector中的内存使用情况
首先我们察看在打开网页的过程中在没有执行Compaction的情况下,Vector中的内存使用情况,如图6所示,由图可知,标志为蓝颜色区域是正在使用的内存空间,白颜色表示已经废弃不用的内存空间。在没有Compaction以前,已经废弃不用的区域占用了大量的内存空间,在执行Compaction以后,所有正在使用的区域都会整齐地排列在内存的高端,从而提高了内存的使用效率。
3.3 内存总体使用情况及与调用系统内存管理接口性能的比较
首先从系统堆中分配出4 MB的内存,然后对这4 MB的内存进行应用程序级的内存管理,为了测试应用程序级的内存管理[9,10]的各项性能指标,使用小、中和大三种网页对总体内存使用情况进行了统计,并且做了与调用系统内存分配和释放接口进行性能比较。表1是实验网页文件大小以及性能占用数据表,图7是运行一个大网页的时候,所有内存池占用空间和Vector所占用空间的比例图,图8是针对一段关键上下文,调用应用程序级的内存管理接口和调用系统级的内存管理接口对三种大小不一的网页在执行这段上下文的时候所用平均时间的比较。从图8中可以看出,网页越大,内存管理的性能越优于直接运用系统的内存管理。
4 结 语
本文主要在对嵌入式操作系统μCLinux内存管理进行分析和小结的基础之上,根据Browser 实际运行情况,提出了运行在嵌入式设备上浏览器的内存管理池式分批和Vector分配策略,并分析了这种策略的特点和性能。最后通过实验数据来分析并得出浏览器分别调用应用程序级的内存管理的接口与系统级的内存管理的接口进行运行比较,得出应用程序级的内存管理效率比系统级的内存管理效率要高。
摘要:为了解决嵌入式设备中内存频繁分配和释放所引起的内存碎片以及浏览器正常运行难问题,提出具有垃圾回收机制的可动态增长池式分配数据结构设计和具有Compaction机制的Vector分配方法;在嵌入式环境系统设计时,采用可回收动态增长池式分配策略,系统无需预测内存大小,而且可以循环使用池内空间;Compaction机制的Vector分配方法可以移动“在用”对象和“废弃”对象调整内存占用,减少碎片。实验设计中应用上述策略,验证了该内存管理效率比系统级效率要高,嵌入式设备中打开网页文件越大,体现出来的效率更高。
关键词:嵌入式设备,浏览器,池式分配,位图,对象表
参考文献
[1]李善平,刘文峰,王焕龙.Linux与嵌入式系统[M].北京:清华大学出版社,2003.
[2]William Stallings.操作系统:内核与设计原理[M].北京:电子工业出版社,2001.
[3]朱玮玮,杨建明.μClinux一种嵌入式Linux系统[J].舰船电子工程,2003(4):47-50.
[4]罗嘉,薛涛,龚光华.μClinux上的应用程序设计[J].单片机与嵌入式系统应用,2002(2):81-84.
[5]James Noble,Charles Weir.内存受限系统之软件开发[M].武汉:华中科技大学出版社,2003.
[6]陈蜀宇,于渤,曹俊勇.嵌入式浏览器可移植性的研究与实现[J].计算机工程与设计,2007(2):74-77.
[7]吴晓勇,曾家智.操作系统内核中动态内存分配机制的研究[J].成都信息工程学院学报,2005,20(1):27-30.
[8]李志军.面向嵌入式实时系统的动态内存管理方法研究[D].重庆:重庆大学,2007.
[9]胡琳琳,李挺屹,胡建良,等.一种基于嵌入式系统的网络浏览器的实现[J].微计算机应用,2006,27(1):16-18.
嵌入策略 篇8
随着社会结构变化和生活水平提升, 居民对社区服务的要求日益提高, 社会工作专业化逐渐成为提高社区公共服务水平的主要途径。本文将从专业社会工作的概念和作用开始, 开辟“专业社会工作嵌入社区公共服务”的公共服务模式, 通过加强专业社工培训和政策引导, 来改善并逐步解决当前社区公共服务中普遍存在的专业水准不高、服务效率低的问题。
1专业社会工作的概念及作用
专业社会工作是指政府为主体, 社会力量广泛参与的, 以社会工作、社会学、心理学等为主干学科基础, 物业管理、医学、法学等为辅助学科, 以助人自助为核心理念, 以个案工作、小组工作、社区工作为直接工作方法的学科, 目的是在与环境互动过程中, 通过为案主 (client) 提供专业服务来帮助其解决各类问题, 从而使案主重塑自信, 协助解决困境, 重新融入社会。专业社会工作人才是现代社会管理与服务的重要力量。工作人员秉承助人的工作理念, 运用专业知识和方法, 进行心理辅导、困难救助、行为矫治、矛盾调解、维权等社会服务工作的专业人员, 在预防和解决社会矛盾、促进社会公正和谐等方面起着非常关键的作用。
2社区公共服务的概念及现状
2.1概念社区公共服务主要指为了满足社区成员需求而由政府直接提供或引导社会力量提供的社区服务项目或服务设施。
2.2现状社区公共服务在西方发达国家由来已久。像英、美等国早已建立起功能强大的社会公共服务体系, 有许多受过专业化教育培训的人从事着专业化的社区公共服务。现阶段, 随着中国改革发展的向前推进, 社会经济体制和社会结构都朝着高水平、专业化的方向不断调整和改进, 国人的思想观念逐渐开放。这种巨大的社会变革使国内的社会经济发生了翻天覆地的变化, 但社会矛盾也不断出现, 国人面临许多考验。譬如:在传统社区组织系统之下, 社区服务目的变得不明确, 日常工作逐渐失去活力变成形式化的存在体, 一些社区服务机构形如虚构。这是因为市场经济体制下社区角色定位不明确, 许多社区服务项目带有明显的政绩色彩, 比如经常搞强迫式推销服务或临时性活动等等, 并不在意居民的实际需要, 最终导致居民参与度不高。具体来讲, 这些问题集中表现在以下几个方面:
(1) 具有显著的政绩色彩。许多社区组织长期受行政干预, 组织成员的选拔与聘用、服务项目等日常管理工作基本由政府主导。社区工作站实际上相当于政府和街道办下属的一个机构, 而不是社区公共服务供给中平等的合作主体。
(2) 机制不灵活、效率差、服务方式落后, 无法充分满足居民的需求。社区公共服务虽然不同于政府的纯公益性质的服务, 但也不是私人性的营利服务。按常规来说, 应根据社区居民的需要配备社区公共物品和社区服务项目, 但由于政府干预, 许多社区的公共服务都是基于政府指令进行“一刀切”, 使得我们所提供的服务项目和服务设施无法满足居民需求。
(3) 社区服务产业发展中的市场化倾向。在服务市场中, 一些机构以“社区服务”的名义提供服务工作, 在一些服务项目上按高标准收费, 使得社区公共服务失去了服务大众的公益光环, 变得物质化。
(4) 社区干部没有足够的时间和精力面向社区民众提供系统、专业的公共服务, 在一定程度上限制了公共服务水平的提升。社区干部平日里已疲于应付政务指令, 没有足够的时间针对社区公共服务进行深入的研究和实践。加之大多数社区公共服务工作者没有经过专业化的训练, 普遍缺乏专业化服务理念和创造力, 使得均面向社区居民的公共服务质量大打折扣。
为了化解这些矛盾, 迫切需要将社区公共服务工作纳入专业化的发展框架, 以提高社区公共服务水平。专业社会工作的嵌入恰好解决了这一问题。专业社工机构在公益资源、专业人才等方面具有一些优势, 能够在一定程度上弥补社区公共服务部门的短板。
3专业社会工作嵌入社区公共服务的总体思路及具体措施
3.1专业社会工作嵌入社区公共服务的重要意义
(1) 专业性有助于提升社区公共服务的效果。社会工作秉承“以人为本、助人自助”的服务宗旨, 根据社区中的边缘人群或弱势群体的基本需求提供专业服务, 同时努力解决社区矛盾, 为建设和谐社区贡献力量。社会工作者所提供的社区服务不仅仅局限于表面化、物质化的范畴, 还涉及一些微观层面的服务, 其服务带有一定的社区管理职能。可以这样说, 专业社会工作的应用优势在社区中得以充分体现。
(2) 非营利性与社区公共服务的性质相吻合, 提升社区公共服务的公平性。目前, 西方发达国家和国内港台地区都已建立起比较成熟的社会公共服务机制, 社工广泛分布在非营利服务机构或者专业化的社会工作机构, 这些机构都属于公益性的非营利组织, 在国内已逐步发展成为一种新的社会公共服务载体。从本质上讲, 社会工作的利他主义其实就是社区公共服务的主要目的。所以说, 专业社会工作在社区公共服务中具有显著的应用优势。
(3) 准市场机制与社会机制的结合, 充分体现“以人为本、助人自助”的服务理念。专业社会工作介入社区公共服务的准市场机制是指, 社区公共服务人员和专业社会工作机构, 基于平等的服务契约购买与提供社会公共服务的交易关系;具备专业资历的专业社会工作机构通过竞标获得社区公共服务项目, 服务项目的供应者可以在非营利社工组织、社会工作机构以及专业从事社会服务的企业之间进行选择。另外, 为了提高社会工作的专业水平, 服务机构应该根据服务需要有针对性的引入市场服务经验, 比如引入绩效评估模式来提高服务质量。
严格来讲, 专业社会工作嵌入社区公共服务项目, 这种运营模式与市场运营机制有着本质的区别。譬如, 专业社会工作旨在围绕“以人为本, 助人自助”的根本目的, 通过对社区资源的优化配置, 带动社区居民广泛参与, 创设一个专业服务机构牵头、居民自助互助的良好格局, 而商业化的服务机构主要以盈利为目的来提供昂贵的专业服务。再者, 专业社会工作在提供服务的过程中, 都有一套正规、完善的服务管理流程, 从接案、预估、计划, 到中期的服务嵌入, 再到后期的效果评估、结案等等, 都按照正规流程逐一实施, 这是其有别于服务工作的一个显著特点。
3.2专业社会工作嵌入社区公共服务的总体思路
3.3具体措施
(1) 建立“督导+社工师+助理社工师+社工员”的梯队社工人才队伍培养体系。地方政府应该结合本地发展条件, 建立“督导+社工师+助理社工师+社工员”的梯队社工人才队伍培养体系, 将加强社会工作专业人才队伍建设纳入社区协商、社区建设试点、国家新型城镇化规划、社区减负增效等方面的法规政策范围, 辅以专业化的能力考核, 为社区公共服务专业化储备专业人才。
(2) 推行“三社”优化联动, 打破政府包揽社区公共事务的格局。为打破基层政府包揽社区公共事务的格局, 使社区回归自治, 各地采取多种措施为“三社”优化联动环境, 全面清理社区事务, 建制村、社区承担公共事务目录, 建立公共服务事务准入制度, 使社区减负增效。
(3) 依靠政策与机制的引导, 将专业社会工作纳入社区服务管理体系。专业社会工作作为新生事物, 融入社区管理服务体系, 迫切需要政策与机制的创新。地方政府应该制定专门的社区社会工作发展政策, 建立综合服务中心, 将专业社会工作纳入社区服务平台, 实现平台联动。比如:在街道或社区探索设立家庭综合服务中心, 为开展社区社会工作服务提供场地、配备设施;将专业社会工作服务设施建设纳入社区设施建设总体规划予以重点保障;制定政策, 要求社区面向社会工作服务组织和专业社工开放资源, 确保开展社区社会工作服务有场地、有设施、有保障等等。
4河南省社区服务专业化实践探索
社区公共服务组织性差、政府干预程度高、服务专业性差, 是近几年河南省社区公共服务工作中比较突出的问题。为了改善这些问题, 尽全力为社区居民提供专业化的社区公共服务, 从“十一五”开始, 河南省就对社区公共服务专业化的问题进行了许多积极的尝试。首先是借鉴嘉兴市在专业工作嵌入社区公共服务中的成功经验, 引入“督导+社工师+助理社工师+社工员”的梯队社工人才队伍培养体系, 提高社工的专业水准。2015年间, 全省已有52名社工成为首批全国行政和实务督导, 并对首批132名本土助理督导师落实了专业培养方案。目前全省共有持证社工达到了1.4万人。其次, 在社区公共服务专业化的管理工作中, 实现了民政领域和社工委单位全覆盖, 涵盖了社会福利、社会救助、社区建设和妇女、青少年、教育、计卫、失独家庭、司法矫治等领域, 广大居民群众真正得到了专业化和精细化的服务。2015年一年间, 全年共投入政府购买社会工作服务经费2300多万元, 累计开展专业社工服务项目372个, 提供个案、小组、社区工作专业服务案例2.8多个, 直接服务群众33多万人次。根据2015年底, 河南省在所服务的33万群众《专业化社区公共服务群众满意度》调研结果显示, 群众满意度达到了99.9%。由此乐见, 在社区服务专业化建设方面, 河南省可以说是卓有成效。
5结论
河南省在专业社会工作与社区公共服务管理融合中所做的一系列工作和取得的成效, 充分说明专业社会工作嵌入社区公共服务领域的思路和方法, 有效提高了社区公共服务专业化程度和服务范围, 应该将本服务模式推广到全国各省市中, 以提高整个公共服务系统的专业化水平。
参考文献
[1]文军.专业社会工作:特征与功能[J].中国民政, 2015 (10) .
[2]郭伟和.专业社会工作的发展机遇和策略[J].中国民政, 2015 (10) .
[3]徐向文.西方专业社会工作合法化路径及其对我国的启示[J].甘肃社会科学, 2015 (04) .
[4]彭秀良.充分发挥专业社会工作在和谐社会构建中的重要作用[J].乡音, 2011 (08) .
[5]原会建.专业社会工作介入社会救助的路径与策略[J].人民论坛, 2014 (35) .
嵌入策略 篇9
一、什么是微课? 如何构思微课
1. 什么是微课
自微课诞生以来, 国内外给它戴了各种各样的帽子, 能举出来的定义不下十种, 笔者认为, 微课是一种教学视频资源, 是一种特殊的学习资源, 并非是常规课堂的微型化. 它具有如下几个特点:
(1) 微课不受 “课堂学习”的时间、空间限制, 符合网络学习、碎片化学习、移动学习学习规律;
(2) 微课的教学设计是有针对性的, 针对知识的重点、难点、疑点、易错点、易混淆点, 等等.
(3) 微课的知识讲授流程具有情境性、 启发性和可视化等特点.
(4) 微课是一种辅助性教学资源.
2. 如何构思数学微课
如何构思微课是一门学问, 笔者认为构思微课应该从微课的特征及教学作用出发, 教师要清楚这节微课的目标指向在哪里, 是为了讲清楚某一个知识点, 还是为了在教材知识讲解的基础上进行深化和创新. 在目标明确的基础上设计微课, 首先, 应该从学生的角度进行思考微课中所讲的知识需要学生前期有哪些知识准备, 并将其作为第一个环节讲解;接着, 就微课要讲解的知识进行探究和再探究;然后, 就探究的结果进行反思并促进新的结论、认识生成, 这里可以是对概念深层次的认识, 也可以是对数学问题思考方法的创新;最后再对重点知识进行总结, 突出这节微课的重点.
3. 数学微课教学与 “可视化”的关系
首先微课教学的学习主体是学生, 教师给学生提供了一个较短的学习视频或学习素材, 其目的在于让抽象的数学知识变得具象化、直观化, 因此微课教学应该是用可视化的元素充实的课堂, 我们在微课的设计上, 每个环节如动画模拟、问题的领引、 生活化情境的创设都可以充分调动学生的思维, 让学生看到的不是抽象的数学知识, 而是具体的、生动的形象化语言, 当然除了情景的可视化外, 对于学生而言, 思维的可视化是更为重要的另一个方面, 我们在微课制作的过程中, 对于这个问题更是需要动点脑子, 具体的可以借助于问题引导学生思维逐步深化, 直到思维与问题的解决方案有效对接.
二、数学微课教学如何嵌入“可视化”元素
1. 动画模拟, 促进数学思维可视化
随着多媒体、信息技术的发展, 课堂教学手段呈现出多元化, 多媒体在高中数学教学中的运用价值也越发凸显. 或动画、或控制、或演示等多种模拟展示, 让课堂变得生动又富有逻辑性, 营造了有利于学生思维发展的数学学习环境, 促进课堂教学走向高效. 新课程倡导情境化教学, 与传统教学相比较, 借助于多媒体技术能够很好地辅助数学教学, 促进学生的直觉思维和逻辑性思维有效发展, 注意点我们在制作微课的过程中更应该好好地利用.
数学教材中有很多内容都是不直观的, 尤其是数学思维过程很抽象, 导致学生在学习过程中感觉到高中数学很难, 多媒体技术包含图形的闪烁、移动和色彩变化等功能, 借助于这些功能能够促使思维过程可视化, 激活学生的认知.
例如, 笔者和学生一起学习立体几何时, 制作微课可以借助于多媒体图形的动态变化功能 (如分、转、合、移、展、裁等等) 给学生呈现出各种柱体、锥体、台体和球体等等, 通过空间图形深化学生的认识, 同时有助于学生自主推导得到面积、体积的计算式, 在立体几何动态呈现的时候, 我们教师再配以解说, 能够丰富学生的感性认识, 学生有一种身临其境之感, 问题自然生成, 学生的学习注意力很自然地集中到对图形间内在联系的挖掘上来, 促进计算式的自主得到.
微课制作, 借助于多媒体技术进行“动画模拟”不但给学生提供了丰富的感性材料, 与传统数学课教学相比, 让课堂更加生动, 学生的数学学习不再是凭空想象、似有非有, 在情境的驱动下概念理解变得容易了, 学生能够在变化过程中自主发现问题, 学生的主观能动性得到有效激发, 学习过程变得主动且具有创造性.
2. 分层显示, 引导学生拾级而上
学习是深入浅出的过程, 一口吃不了一个饼, 借助于多媒体技术制作微课, 可以使数学课堂教学更为丰富, 视频、音频、图像让数学知识的呈现更为生动、形象, 同时多媒体技术可以将知识的形成过程、图形的变化过程有层次、有条理地呈现, 有效扩大了课堂的容量, 提高了课堂知识呈现的层次性.
例如:笔者制作等比数列的微课时, 将这部分知识与“等差数列”的相关知识相联系, 借助于多媒体将“等差数列”和“等比数列”的概念及其相关知识并到一起显示, 两个层次的显示, 如此一来降低学生思维的台阶, 学生通过微课学习等比数列的过程也不会觉得枯燥, 在学习等比数列的过程中也起到了复习等差数列知识的效果, 一举两得.
当然, 我们在情景的设置上也可以借助于具有层次性的问题, 让学生在跟着情境来逐步深化思维. 还以等比数列教学为例, 可以通过这样一则故事引入微课:在古印度有一个国王, 他非常喜欢国际象棋, 为此他要奖赏国际象棋的发明者, 当问到发明者有什么要求时, 发明者仅仅提出一个非常简单的要求“他只想要国王按照他的要求用小麦一粒一粒地填满棋盘”, 具体的填法如下:“第一个格放1 粒, 第二个格放2 粒, 第三个格放4 粒..., 以此类推, 每个格放上前一格两倍多的麦粒”, 听到这里, 国王满口答应了, 于是大臣拿来了一袋麦子开始工作起来, 随着时间的推移, 一袋麦子空了, 又一袋空了, 国王慌了, 赶忙让财务大臣来计算, 结果是什么样的呢? 学生在微课时也会感到惊讶和疑惑:“一个小小的棋盘到底能放入多少小麦? ”借助于这个激趣故事, 学生对等比数列求和公式产生了浓厚的学习兴趣. 在短暂的停顿后, 揭秘发明者要的麦粒个数是多少:S = l + 2 + 4 + 8 + 16 + 32 + 64 +128 + … 新的问题又生成了 “这个和S怎样求出呢? ”在问题引领下, 学生的认知和思维逐步深化.
3. 联系生活, 渗透数学学习的价值
生活即教育! 我们的数学课堂教学也应该与生活密切联系, 微课制作也不可脱离了生活, 在降低思维切入门槛的同时让学生感受到数学学习的价值. 具体可以从如下几个方面着手:
(1) 联系生活设问. 数学源于生活而服务于生活. 数学教师在微课中要将数学问题设计成与生活密切结合的应用性问题, 知道在生活里到处都存在数学知识, 深知数学无处不在.
例如:在“异面直线及其夹角”的微课制作中, 教师可以这样设问:你的生活中有没有既不平行也不相交的直线? 这样能够轻易唤起学生思维.
(2) 通过游戏设问. 数学比较枯燥, 学生学习时相对而言比较乏味. 教师在教学时可以将问题设计成一个游戏, 在游戏中摸索其数学规律, 进行思考、分析、总结, 从而提高学生学习的主动性.
例如, “用二分法求方程的根”的微课制作中, 教师可以利用课件演示“看商品猜价格”这个游戏节目, 学生猜中后, 再引入二分法求方程的根. 这样学生能够体会到数学思想的本质, 加深对新知识的理解.
(3) 利用试验设问. 数学微课也可以采用实验的方式创设问题情境, 在设计情景时要符合学生身心发展的规律, 引导学生主动参与到实践去, 从而发现问题, 思考问题, 分析问题, 并进行解决问题的教学活动.
例如在有关几何、概率等教学中就可以借助于微课的引导, 让学生生成一种要动手试验的情感需要.
(4) 是通过复习设问. 原有的知识已经融入了学生的学习与生活, 数学学习必须做到温故而知新, 让学生通过问题产生前后知识的联想, 在回忆旧知识基础上, 拓展延伸, 进行新课程的学习.
当然, 为了能够制作出更具思维价值的微课, 我们教师也要定期调整自身知识积累结构形态, 随时配合最新设备资源进行教学情境调整改善, 结合阶段培训知识与数学学习规则探索个体独特的学习方法.
摘要:微课教学应该注重可视化元素的嵌入式设计, 目的在于通过这些元素激活学生的思维, 促进学生认知的有序发展.
关键词:微课制作,可视化,认知,问题
参考文献
[1]刘华为.“惑”在何处?“解”自何方?—对“解惑型”微课的两点拙见[J].中学数学教学参考.2015 (20) .
[2]刘鑫.微课———施精雕细琢之工, 收易学乐学之效[J].中学数学教学参考.2015 (20) .
[3]张先云.一节微课的教学设计与反思[J].中学数学月刊.2015 (01) .
嵌入策略 篇10
在商用计算机领域,SMP操作系统作为一种有效提升计算机系统处理和运算速度的手段被广泛应用。MontaVista Linux是Linux 2.4内核的派生产品,内带一个完全抢占调度器。Wind River的VxWorks采用同步原语,该同步原语基础是各节点上运行的不同VxWorks之间的消息传递接口,但由于其技术保密,无法获知其技术细节。QNX支持操作系统为微核结构而非整体结构的SMP设计。其内核自身支持一组核心服务,而其它服务则以单独的进程方式运行[1,2]。
虽然SMP技术不能使系统性能成倍增长,但它的确用最小的代价提高了系统数据处理能力、实现了负载均衡。SMP操作系统要充分利用多个处理器的运算能力,良好地支持任务并行工作,首先要解决的问题是多个任务,以及任务和中断之间的互斥。但传统的单机操作系统互斥共享资源的方法在多个CPU同时运行的条件下完全失效,SMP的互斥策略需要重新设计[3,4]。
本文针对机载计算机系统中处理器数量少、系统实时性和确定性要求高的特点,在自主版权机载单机操作系统ACoreOS上设计SMP操作系统的互斥策略。
1 互斥策略
1.1 单机操作系统的互斥
任何多任务操作系统,或带中断的操作系统都会遇到对共享资源的保护问题。第一种情况为多个任务竞争同一个资源,第二种情况为任务占有资源期间外部中断请求该资源。根据任务对资源需求的时间长度,又可以将第一种情况分为短期互斥和长期互斥。
(1)短期互斥。
是指在短期临界区中防止竞争条件发生。通常这些临界区是更新内核数据的代码。由于所有执行任务共享内核数据结构,当两个以上任务同时访问同一段数据时可能出现竞争条件。单机系统中每个时刻只有一个任务执行,竞争条件只可能发生在任务被抢占的情况下。为此,在内核模式下采用非抢占方式调度任务。只有在内核允许的情况下,任务之间的上下文切换才会发生。
(2)长期互斥。
是指避免在对硬件资源或文件系统等需要长时间操作时出现竞争条件。在单机操作系统可以采用信号量,确定时间内只有获得信号量的任务可以访问资源,其他任务都处于等待状态,当信号量被释放后,等待任务具有竞争信号量的权利,根据一定的算法互斥占有资源。
(3)带中断的互斥。
任务访问数据允许中断访问也会产生竞争条件。单机操作系统提供了关闭中断的功能,因而,任务在访问和中断共享的数据结构之前通过关闭中断避免这种竞争条件的出现,任务退出时开启中断实现了对这种资源保护的互斥。
1.2 现有SMP操作系统互斥技术
单机系统中短期互斥成立的前提条件是内核任务调度的不抢占策略。可是,在多机系统中多个处理器并发执行内核程序,破坏了这种条件的成立。当多个处理器并发执行内核程序时,竞争条件出现会破坏内核数据结构。带中断的互斥在多机系统中也不能正常运行。每个处理器禁止中断只能影响本机,并不能影响其他处理器。单机中的长期互斥策略在多机中也不适用。因为长期互斥采用的信号量不是原子操作,多个处理器可能同时对其操作造成错误,这种方法不能在多机系统中应用。
1.2.1 QNX
QNX是完全可抢占式系统,对多处理器支持仅限于微内核,外围服务进程无需任何改动即可在SMP系统上适用。任何时候高优先级的任务都有权利立即剥夺低优先级任务的CPU资源。为控制任务访问共享数据,使用POSIX 互斥原语-互斥、条件变量、信号灯等。在多处理器系统中中断可以抢占任务,但任务不可以抢占中断。采用两种方法保护共享数据:(1)将任务绑定到特定的处理器。(2)在任务和中断之间利用新的互斥自旋锁变量-中断锁。
1.2.2 MontaVista Linux
MontaVista Linux 内核引进两种锁机制RCU和MUTEX 改进Linux 2.4的性能。RCU(Read-Copy-Update)是读-拷贝-更新,允许多个读写者并发执行,对于被RCU保护的共享数据结构,读者不需要获得任何锁就可以访问它,但写者在访问它时首先拷贝一个副本,然后对副本进行修改,最后使用一个回调机制在适当的时机把指向原来数据的指针重新指向新的被修改的数据。这个时机就是所有引用该数据的处理器核都退出对共享数据的操作。RCU对读者多而写者少共享资源保护非常有效。RCU没有使用锁,因此不存在死锁问题。但RCU应用条件非常苛刻,它只适用于空间动态分配的数据结构,且数组共享数据空间会带来额外的计算量和时间消耗,不适合作为操作系统内核的互斥方法。
MUTEX锁代替读写锁,实现了优先级继承功能。当高优先级的任务请求共享数据时,升高占有共享数据的任务优先级,避免了低优先级的任务抢占CPU资源发生优先级翻转,有效提高了系统的响应时间,是机载多处理器操作系统保护共享数据短期互斥可借鉴的一种方法。
2 互斥策略的设计
设计的基础是自主版权的机载单机操作系统ACoreOS,通过修改其内核实现对SMP系统的支持。ACoreOS采用层次化结构,分为模块支持层、操作系统核心层、和应用层。除了和硬件相关的同步原语在模块支持层实现,其他互斥机制都在操作系统核心层完成。
考虑机载嵌入式系统高实时性的要求,本文设计的原则是维护系统内核完整性,正确的协调好CPU的并行活动,避免危害到内核的数据结构;保证系统高性能运行,采用有效的同步原语,自旋锁时间合理地短,避免CPU等待时间过长。主要解决SMP操作系统互斥设计的3个关键问题:(1)自旋锁设计。包括自旋锁数据结构和锁粒度两个方面,数据结构能体现自旋锁设计理念,是互斥策略的基础;自旋锁粒度根据系统处理器数量和期望应用设计,既要避免锁过大造成系统响应时间偏长,又要防止锁过小导致系统复杂度和计算开销急剧上升。(2)中断、任务切换、和长期互斥方法失效的问题。需要新的机制完成共享资源保护的功能。(3)死锁问题。自旋锁的引入带来了锁互持和多锁嵌套问题,竞争条件更易发生,死锁条件的预防是SMP互斥的一个重要问题。
2.1 自旋锁的设计
单机操作系统互斥的前提条件是单条指令能够完成的操作是“原子操作”,而在多机操作系统中多个CPU同时运行,单条指令若由多个“微操作”组成,“原子性”就不能够保证。多处理器系统中总线是每个CPU访问内存必经之路,所以在SMP操作系统中采用锁总线的方法实现对CPU对内存操作的原子性。
以PPC系列为例,提供一对专有的存取指令lwarx 和stwcx来构建内存的原子操作。通过这两个指令的配合实现同步原语。自旋锁的设计不仅包括功能方面的考虑,还应包括性能方面的考虑。分析自旋锁的操作,共享资源的读操作和写操作对互斥的要求不同,多个读操作可以并行访问共享资源,而写操作和其他操作只能串行执行。因此,在自旋锁的设计时,加入对访问资源操作类型区分,从而达到提高访问资源并行度,优化自旋锁性能的目的。同时,为避免优先级反转,锁设计借鉴MUTEX锁的设计方法,实现优先级继承功能,并结合前面对锁操作类型的划分,降低系统计算开销。
2.1.1 自旋锁结构
自旋锁实质上是内存中的一个变量,变量的值表示锁的状态。自旋锁的获取和释放是通过同步原语修改变量的值。如果要区分读锁和写锁,在锁数据结构中应该体现锁操作的类型,因此,需要增加一个变量记录是读操作还是写操作。修改后的锁数据结构为
readers是增加的变量,表示读操作者的数目。修改锁结构后的自旋锁获取和释放区分了访问临界资源的类型,流程如下:
(1)读自旋锁获取。首先判断锁状态,0x1表示锁被写者占有不能获取;0x0表示锁没有占有者或被读者占有,可以获取;成功获取锁后不修改锁状态,依然为0x0,只是将readers值加1,表示读者数目增加。
(2)读自旋锁释放。readers值减1,表示读者数目减少。
(3)写自旋锁获取。判断锁状态,锁值为0x0且readers值为0x0,表示锁没有占有者,可以获取,获取成功将锁状态置为0x1;否则锁不能获取。
(4)写自旋锁释放。将锁状态设置为0x0。
自旋锁的基本操作和数据结构设计完成后,考虑解决优先级反转的问题。MUTEX锁利用优先级继承的方法成功避免了低优先级任务占有自旋锁而高优先级任务等待的情况。本文将MUTEX锁引入SMP的设计,并对该锁进行优化,优化后的锁称为PRI锁,增加锁访问者对临界资源操作类型的区分,从而达到降低系统开销的目的。
如图1所示,将锁持有和请求分为4种情况。在锁持有和请求者都为读操作时,由于前面锁的设计允许同时操作临界区,因而不提升占有锁任务的优先级,在读操作频繁执行的环境中能够极大降低系统提升优先级的开销。
2.1.2 自旋锁粒度
目前系统考虑处理器数量少的情况,因此系统中锁的粒度不需要很细。基于系统时间和空间代价综合考虑,对频繁访问,对系统实时性影响高的对象采用细粒度锁,其他对象采用粗粒度锁。经过分析系统中对响应时间和任务切换时间影响大的资源包括:线程控制块、信号量、扩展链、就绪队列,对它们每个资源采用一个自旋锁。
(1)线程控制块锁。
实现对每个线程控制块的互斥操作。在线程的挂起,停止,删除,启动等操作中需要获取该锁。
(2)信号量锁。
信号量是频繁访问的对象,对它单独用一个自旋锁保护。
(3)扩展锁。
所有扩展都挂在一个扩展链上,为避免多个线程同时操作扩展链造成错误,在线程操作扩展链之前必须获得扩展锁。
(4)就绪队列锁。
就绪队列是所有处理器访问最频繁的资源,为提高访问速度采用优先级映像表,因此,对优先级映像表和就绪队列合用一个自旋锁——就绪队列锁进行保护。
2.2 长期互斥、中断、任务切换
(1)长期互斥。
采用原子信号量,该原语能够解决单机长期互斥不是原子操作的问题,并且在任务得不到锁的条件下允许挂起而不占用处理器资源。
信号量的状态由一个有符号整数表示。操作系统通过两个原子操作改变整数值。P(s)操作给信号量值减1,如果操作后的值<0则阻塞任务;如果操作后的值≥0,任务继续执行。V(s)操作给信号量值加1,如果新值≤0,为等待该信号量的一个任务解除阻塞。阻塞在某个信号量上的任务队列和信号量值组成整个信号量。当信号量值为负,它的绝对值表示这个队列上任务的数目。原子PV操作不仅决定一个任务是否应该被挂起,同时执行任务的挂起操作。既然信号量记录了相关状态,为保证对其操作的原子性,PV操作都需要加自旋锁保证每次只有一个CPU对其操作。
(2)中断。
ACoreOS为避免在访问同一个全局共享资源的任务和中断句柄之间出现潜在竞争条件,当一个任务正在执行其临界区代码时,该任务会暂时禁止各种中断。然而在一个多处理器系统中,仅禁止中断并不足以避免出现竞争条件。
为避免在SMP系统中的任务和中断服务程序之间出现竞争条件,引入中断锁的概念,任务和中断服务程序必须获得一个中断锁才能访问其临界区所用到的共享资源。如果中断服务程序发现已有其他程序在使用旋转锁,那么它将在空转中等待其他任务或中断服务程序释放该旋转锁。这对中断延时以及整个系统对外部事件的响应均有影响。因此,任务尽量避免和中断服务程序共享资源,如果无法避免,共享资源必须足够短,不能对中断响应时间影响太大。
(3)任务切换。
如图2所示,占有自旋锁的任务切换让出CPU资源但是不释放自旋锁,将导致后面请求该自旋锁的任务无法执行。因此,不能允许占有自旋锁的任务被切换,在设计上通过关本调度的方式完成,即不允许占有自旋锁的任务被切换,直到锁释放为止。
2.3 死锁问题的避免
如图3所示,自旋锁的应用存在两种情况导致死锁:锁互持和锁多次获得。
锁互持源自任务在执行中需要获得多个自旋锁,例如:任务控制块锁,对象锁,扩展锁等。甲任务获得部分锁,乙任务获得部分锁,甲乙两个任务持有对方需要的锁,又需要对方占有的锁,互相僵持导致了死锁条件的产生。
将任务优先级的概念引入自旋锁设计中,系统中所有自旋锁地位是不平等的。每个锁都有一个固定优先级,任务获得多个自旋锁必须按照优先级从高到低的顺序获得。如图4所示,任务1和任务都需要获得任务控制块锁和信号量锁两个自旋锁,获锁顺序先任务控制块锁后信号量锁,从而在任务1持有任务控制块锁的条件下,任务2将不能获得任务锁处于等待状态,死锁条件避免。
图3(b)所示为同一个锁多次获得示意图,任务控制块锁已经被任务1占有,但在任务扩展中又需要再次获得,只能等待陷入死锁。针对该问题修改自旋锁结构,加入一项owner表示锁持有者身份,加入一项nest表示锁嵌套层次。
当锁的请求者和持有者相同时,锁请求者获得锁,锁状态不变,nest加0x1,表示锁获得的嵌套层次。锁释放只有在nest为0时,也就是锁持有者只获得锁一次的条件下,修改锁状态。否则,锁状态不变,只是nest数目减0x1。
3 验证
SMP操作系统是在ACoreOS的基础上设计和实现的,测试平台采用的CPU为MPC7410。ACoreOS运行的硬件平台和SMP操作系统相同,外部设备、底层驱动、内存管理等性能也没有差异。
对这两种操作系统的任务切换时间进行对比,经50 000次任务切换比较,单机操作系统和SMP操作系统的任务切换时间均值分别为23.4 μs和23.6 μs,切换时间代价增长为0.8%。采用优先级抢占调度策略,3个优先级分别为60,61,62的计算任务循环执行,取5次运行的均值。单机操作系统1 min执行1 275 964次循环,SMP操作系统执行2 483 756循环,处理能力提高94.6%。
4 结束语
本文在机载嵌入式操作系统的基础之上引入自旋锁机制,解决传统互斥方法被SMP多CPU并行工作破坏的问题,并对SMP操作系统的性能和开销代价做了初步测试,表明SMP系统在不影响实时性的前提下,有效提高了计算机系统的处理能力。下一步将设计更为复杂的任务测试系统性能,包括多个自旋锁申请和释放的程序、包括长期共享公共资源的程序,以及任务执行过程中出现中断的情况等。
摘要:针对多种商用对称多处理器(SMP)操作系统的互斥策略,重点研究了互斥策略的3个关键问题:自旋锁设计、长期互斥等失效的解决方法和死锁问题。借鉴先进的商用方法,分析不同类型共享资源的特点,设计了高效自旋锁,并在研究死锁竞争条件产生条件的基础上,提出了明确的解决方法。最后,在MPC7410平台上对系统性能进行实测,结果证明,文中互斥策略能够以小的时间开销为代价,有效提高计算机系统处理速度,在机载嵌入式计算机领域有广泛的应用前景。
关键词:多机操作系统,短期互斥,自旋锁,长期互斥
参考文献
[1]毛德操,胡希明.Linux内核源代码情景分析[M].杭州:浙江大学出版社,2001.
[2]DOMINIK M.TopsySMP—a small multi-threaded microker-nel for symmetrical multiprocessing hardware architectures[J].Journal Article,1998(12):131-138.
[3]BATAT A,FEITEL S D.Gang scheduling with memory con-sideration[C].Cancun,Mexico:In Proceedings of the14th IEEE International Parallel and Distributed Processing Sym-posium,2000:109-114.
相关文章:
链接与嵌入01-23
工作嵌入01-23
网络关系嵌入01-23
嵌入衍生工具01-23
2025年家长会的经典发言稿 家长会的精彩发言(十九篇)01-23
嵌入工作过程01-23
唐朝的离婚协议书01-23
利用VB编程实现弦的振动实验的数据处理01-23
数据库编程与图像处理01-23
不同煤种01-23