不想错过重要资讯?
马上订阅新闻邮件!
 
a 您现在的位置: 中计在线 >> 存储 >> 存储技术 >> 文章正文
基于虚拟存储的嵌入式存储系统的设计方法
作者:佚名    文章来源:在线存储    更新时间:2007-3-23 21:13:56
【字体:
 中计在线信息化频道全心上线!全力推动中国信息化进程!信息决策,易如反掌,尽在CIW信息化!
Vista消费者满意度调查
·微软并购雅虎暂搁浅 合作仍有可能
·阿里巴巴B2B拟上市融资78亿
·苹果承认部分笔记本电池有充电故障
·东芝拟在越南设研发中心 开发嵌入式软件
·索尼PS3游戏机制造成本预计将下降100美元

    1、引言

   嵌入式系统由嵌入式硬盘和固化在硬件平台中的嵌入式软件组成。传统的小规模嵌入式系统,软件多采用前后台的方法,通常应用于实时性要求不高的简单场合;对于复杂的应用场合,较为普遍的做法是给系统配上嵌入式实时操作系统(RTOS),这样不仅能够使系统具有良好的实时性能,降低软件编制的工作量,还可以提高整个系统的稳定性。此外,为了简化用户程序,系统通常要提供一些必要的库函数供用户调用。同前后台系统相比,这种实时嵌入式系统增加了系统存储空间的开销。Intel 8051系列及各种兼容的单片机因其极高的性价比、丰富的库函数和长期的技术积累等背景而被广泛应用于各种嵌入式领域中。受传统单片机寻址空间的限制,嵌入式应用中经常需要进行存储空间扩展。本文借鉴传统计算机系统设计中的虚拟存储技术,以8051单片机为例提出一种采用页面分组和虚拟接口技术扩展存储空间的方法。本方法与Keil C编译器具有良好的兼容性。

   2、存储系统的组织

   2.1.虚拟存储系统

   计算机系统中常采用虚拟存储技术来扩展存储系统容量,页式虚拟存储器是常用的一种组织方法。在这种方法下,整个虚拟地址空间和主存空间均被分成容量相等的若干页,地址变换机构(通常是一个快速地址变换表)建立了虚拟空间到主存空间虚页到实页的映射。页式存储器组织关系如图1。
  
   虚拟存储系统利用计算机CPU中的一组寄存器堆作为页表基址寄存器,如图1(b)所示,它与页表一起给出用户程序地址。实际计算机系统的页式虚拟存储要比这复杂得多,还需考虑

  

  2.2.单片机嵌入式系统程序存储区扩展

   受虚拟存储系统启发,我们把上述方法作了一些修改以应用于嵌入式系统中。由于系统设计选用的外部程序存储器容量为256k,而一般单片机(如 8051系列)的寻址空间为64k,为简单起见,以64k为一页,将256k虚拟地址分为4页映射到单片机的64k空间。嵌入式系统中地址变换机构可被简化:单片机没有专用的页表基址寄存器,可以通过额外的端口线(如P1.0,P1.1,P1.2等)作为基址指定不同的页面,页表查询可用一个跳转表实现。然而页面切换前后必须保证能够正确访问到跳转表,因此所有64k页面都需要有一个完全相同的代码段用来存放跳转表和中断矢量等公共资源。 
    
    为提高存储器利用率可采用图2所示的结构,其中公共段中存放了高32k段之间相互调用所需要的跳转表。各段相互调用之前应先跳转到公共段,执行页面切换后再跳转到被调用程序的入口,这就实现了18位虚拟地址到16位主存地址的变换。不妨以P1.0,P1.1,P1.2作为页面基址来指定不同的页,相应的跳转表程序结构如下:

   ADDR:CLR EA ;关中断

   SETB/CLR P1.0 ;切换页面

   SETB/CLR P1.1

   SETB/CLR P1.2

   SETB EA ;开中断

   JMP REAL_ADDR ;跳转

   在公共段(256k存储芯片的低32k)中存放操作系统和提供给用户的其他库函数,其他各段用来存放嵌入式系统的用户程序。采用图2结构的单片机与存储器接口原理图如图3所示。其中A0~A15地址线接法与普通存储器扩展方法相同。


   以上考虑了复位时页面应切换到公共代码区。

   Keil C51编译器是单片机开发应用中非常流行的一种高效编译器,它支持上述页面分组技术。

   2.3.单片机嵌入式系统数据存储区扩展

   嵌入式系统中引入操作系统需要增加一定的数据存储器开销,必要时仍可以采用分页技术扩展数据存储区容量。

   引入操作系统以后,数据区有两种组织方法,比较简单的一种方法是操作系统与用户程序共用一个数据区,编译器将整个程序一起编译,不必区分是系统程序还是用户程序。但这样对用户来说操作系统变得不透明了,而且不良的用户程序可能会破坏系统的数据区,导致整个系统崩溃。

   相对应的另一种方法是给操作系统与用户程序分别分配独立的数据区,譬如将128k 数据存储器给操作系统和用户程序各分配64k。不幸地是,当操作系统与用户程序一起编译时,编译器会自动给它们分配不同的地址,这样即使存储器物理上是分开的,操作系统与用户程序的数据区还是无法地址复用,这极大地浪费了地址空间;而且对传统的单片机, Keil C 编译器最大只支持64k数据区,幸运地是,这个矛盾可以通过采用虚拟接口的方法加以解决。

   为此,将公共代码段中的程序单独编译,并且在链接、定位目标代码时,给操作系统和公共库函数的每个函数在0x0000~0x7FFFH内分别指定一个固定的首地址。鉴于用户程序可能调用这些函数,需要为这些函数分别编写一个相同类型的同名伪函数,每个伪函数仅包含一条到真实函数(入口地址已知)的转移指令,所有这些函数都存放在一个被称为虚拟接口的头文件中。虚拟接口文件与用户程序一起编译,完成用户程序与操作系统两次编译的接口。显然这种方法仅占用了用户区的极少量代码空间,而丝毫没有浪费用户数据区,同时又实现了地址复用。
责任编辑:layeh12
  • 上一篇文章:
  • 下一篇文章:
  • 发表评论】【加入收藏】【告诉好友】【打印此文】【关闭窗口
     相关文章
    惠普“DAS to SAN”技术 存储的简繁之道
    iSCSI网络存储的加速器 特点与应用
    HighPoint Rocket RAID 2224 评测
    从系统架构分析光纤磁盘阵列技术
    简化存储管理,我们做到了吗?
    分析:如何保护移动存储设备的安全
    警惕:存储过程中的潜在危机
    论存储加密之与磁带存储技术的未来
    图文并茂:NAS存储应用分析与部署
    HP发布SMB存储设备 基于微软存储系统
     相关评论
    网友评论:(只显示最新10条。评论内容只代表网友观点,与本站立场无关!)
    用户名:
    · 您将承担一切因您的行为、言论而直接或间接导致的民事或刑事法律责任
    · 留言板管理人员有权保留或删除其管辖留言中的任意内容
    · 本站提醒:不要进行人身攻击与无聊谩骂。谢谢配合。
    热门文章
    最新推荐