首页 | 新闻 | 新品 | 文库 | 方案 | 视频 | 下载 | 商城 | 开发板 | 数据中心 | 座谈新版 | 培训 | 工具 | 博客 | 论坛 | 百科 | GEC | 活动 | 主题月 | 电子展
返回列表 回复 发帖

虚拟化:使软件尽早插手系统设计(1)

虚拟化:使软件尽早插手系统设计(1)

软件开发是一个令人着迷的产业。在过去这些年来,随着开发商不断的采用新的编程语言(从Fortran到Pascal再到C++及其他更高级的语言),它也在不断的改变着。但是,尽管开发商很容易注意到软件本身可以推动创新,但是很少考虑他们基础设施应对变化的可能手段。在虚拟化发展过程中 ,这将有所改变。
当第一个嵌入式设备出现时,众所周知,软件根本不存在;所有的功能建立在硬件中。随着微处理器的引入,软件内容出现了,但是仍然在整体系统中只占一小部分。在过去二十年,随着软件规模和复杂性的爆炸性增长,嵌入式行业经历了一个整体的迁移。今天,软件是嵌入式系统中提高功能和创新的主要推动力。
虽然硬件设计在工具和工艺开发方面得到了重要的投资,但是软件的开发流程基本上从二十世纪八十年代就保持基本静态。硬件产业得益于良好的标准和流程,但是软件开发的方法并没有跟上,使得程序员从事软件开发完全是临时性的。
这种缺乏基本的软件开发基础设施的后果太常见了:成本超支、跟不上日程和质量差的软件。软件开发目前的办法可以看出约有三分之二的项目迟于上市,三分之一超过预算,并且,将近一半的嵌入式设计被取消。即使为工作或者产品的性能增拨资源,也不能使得软件开发者脱离一贯的碰壁情况。
为什么在嵌入式程序世界存在如此惊人的断开?为什么软件在设计越来越复杂时仍停滞不前?这既不是人也不是设备的问题。相反,它是没有为辅助软件发展设计出精密战略发展基础设施而造成的。
一个嵌入式设备通常是重新开始的,始于硬件且终于软件。这个过程是顺序的,由硬件开始设计围绕一定的期望,考虑存储、MIPS、界面、连接性等等。多种器件放到一块建立起一个硬件系统,它才是软件开发最重要的。这种以硬件为中心,自下而上的方法涉及到许多步骤和多重依赖关系,而且只有经过系统整合阶段,当软件实际在平台运行时,这个系统才能从性能的角度去理解。(相比之下,面向服务的体系结构(Service-Oriented Architecture,SOA),这种方法规在设计一个基础架构(以支持必要的服务)之前已经规划好了必要的服务)。
自下而上开发方法的主要弱点是,在软件设计过程中,它把软件作为一种后添加的事物,尽管有越来越多的系统功能依赖于软件,而不是硬件。整合在这个过程中发生的非常晚,从而难以发现由硬件、设计或者架构引入的错误。在许多情况下,开发商不得不重新考虑他们的设计以降低时间成本和预算。

随着软件的复杂度达到了新的高度,并且固定程序被证明是付运的主要障碍,以硬件为中心方法的低效和不实用正在变得越来越明显。开发商如何才能战略性重新思考自己的发展方法以至于使得他们不再受到硬件的摆布?软件开发商在系统阶段如何能够较早的进入系统设计?这就是虚拟化出现的原因。
虚拟化的先驱
虚拟化技术用于嵌入式设备开发已经好几年,既作为实际硬件的替代,也作为复杂系统的设计和调试平台。在硬件设计产业,仿真已经用于插口和PCB 阶段。无论是设计处理器,PCB或者SOC,硬件开发商可以使用仿真工具,像Mentor、Cadence和Synposys,以建立模型和预测他们系统的行为,而无需等候真实物理系统开发出来。
嵌入式设备之外,我们看到了许多产业在使用传统方法碰壁后运用虚拟化方法取得成功。在过去两年里,服务器虚拟化已经通过提高数据中心效率和降低总体成本方面取得了很大的进展。虚拟化已经解决了这种持续的挑战,包括服务器扩散、CPU利用不充分和应用分离。
仿真同时被引入了许多产业,如航空航天和国防,应用在他们自己的软件开发中。通常,这些行业需要如此复杂的设计,以至于等待了一年或者更多年后才知道硬件是行不通的。随着点解决方案、设计复杂度基本上授权给这些公司投入资源在国内开发虚拟化软件解决方案,仿真已经在国内发展起来了。
嵌入式软件开发行业正处在一个既不是传统的、以硬件为中心的开发方法,也不是内部的点上,一次过的虚拟软件开发解决方案在这个竞争激烈的市场,必须能够提供快速的产品上市时间、节约成本和质量保证。嵌入式设备中软件内容的角色没有任何下降的趋势,多核器件的增长将前所未有的复杂性加入到了硬件和软件中。必然走向多核设计,只需强调对软件开发解决方案需求,从而能够充分利用多核设备的潜在性能。
当前的嵌入式软件开发已经使公司战略地重新审视和反思自己的过程是必要的,不仅仅在设备阶段,还要在过程设计阶段 。我们可以从中知道硬件产业确实需要仿真,但是我们也需要虚拟化,更进一步说,作为一个基础的、根本的设施引入到我们自己的产业中。
虚拟化软件开发是一个产品发展战略,它可以将软件开发从依赖于物理硬件(在其上,应用将被部署)解放出来。相反,虚拟化软件开发使得软件开发商可以直接在桌面上进行开发,制造出一个真实的共同发展战略,这样,硬件和软件开发可以同时进行。软件/硬件集成是前端的优先,而不是后端的急于求成。
虚拟化软件的开发使得开发者制造了高性能,功能准确的硬件模型,可以使得他们在系统开发过程中尽早地开始调试、测试和优化系统。虚拟技术可以用于不同程度的细节,从处理器到板级到设备,在这样的精度水平,二进制代码可以不变运行且不会伴随任何行为上的分歧。
物理硬件测试过程中,高性能虚拟平台不同程度的控制是不可能的。必然的,当同样的条件应用,软件往往以相同的方式执行的固有性质成为了虚拟测试的一个实际。随着处理器和硬件在复杂度上的提高,必然也就意味着在操作的过程中没有其他的改变不是由于软件的追踪缺陷造成的,而是由硬件引起的往往难以察觉的变化,这个变化也就产生了所谓的“海森堡虫子”(Heisenbug),依赖于细小的时钟干扰的状态有的时候是不可能复制的,甚至是在整个系统反复重新运行过程中。仿真基础设施背后的虚拟平台使得开发者可以单步骤或者停止系统来检查他们的内部转台。开发者可以在仿真多核处理器内核和每个内核的多个过程中不断的复制一个错误,从而使得多核处理器调试就像调试一个单一处理器的单一程序一样简单。
返回列表