房山营销型网站建设,WordPress文章搜索cpu飙升,wordpress 评论验证码,给我免费的观看虚拟内存管理
对于带MMU的目标板#xff0c;VxWorks提供虚拟内存的支持#xff0c;VxWorks提供了两种虚拟内存管理单元(MMU)的支持: 基本MMU和VxVMI
基本MMU邦定于VxWorks中#xff0c;可以通过config.h中宏定义INCLUDE MMU BASIC或Tornado工程配置中包含基本MMU组件
VxV…虚拟内存管理
对于带MMU的目标板VxWorks提供虚拟内存的支持VxWorks提供了两种虚拟内存管理单元(MMU)的支持: 基本MMU和VxVMI
基本MMU邦定于VxWorks中可以通过config.h中宏定义INCLUDE MMU BASIC或Tornado工程配置中包含基本MMU组件
VxVMI是wind River公司推出的一个可选软件模块实现了MMU的全部功能 VxWorks中有关MMU的配置包括以下内容INCLUDE MMU BASIC: 基本MMU的支持。 INCLUDE MMU FULL: 完整MMU的支持(需要VxVMD INCLUDE PROTECT TEXT: 代码段写保护支持(需要VVMD INCLUDE PROTECT VEC TABLE: 中断向量表写保护支持需要VxVMI 虚拟内存几个名词:
虚拟地址空间由程序计数器的寻址能力来决定其大小如32位的i86虚拟地址空间4GB物理地址用于内存芯片级的单元寻址与处理器连接的地址总线相对应(与地址总线相对应 )虚拟地址虚拟地址空间中的地址程序中使用的都是虚拟地址
内存映射建立虚拟地址与物理地址之间的对应关系一-处理器中MMU可以完成此功能基本MMU与VxWorks捆绑在一起可以指定基于页的内存区域为不可缓存该特性能够使直接内存访问(DMA)和处理其内部通信更为有效、迅速。如当其它处理器或DMA设备访问同一段地址空间时可以保证这些数据不被缓存。
如果系统不具备这样的不可缓存特性那么在访问这些地址空间时必须从全局上关闭高速缓存Cache或者手工清洗缓冲区(flush)或使缓冲区无效(invalidate)。 基本MMU使用物理内存描述来建立一种地址映射关系这种方式是平面型的实地址和虚地址一一对应BSP负责提供物理内存描述的支持:
1sysLib.c中定义PHYS MEM DESC 结构体类型的数组sysPhysMemDesc[]。
2sysPhysMemdesc[]描述了虚拟地址和实地址之间的对应关系及内存页的初始状态
3定义的内存区必须是页对齐的并且必须跨越完整的页
4页面大小VM PAGE SIZE在config.h中定义一般为4KB或8KB ·PHYS MEM DESC 数据结构定义如下( vmLib.h) :
typedef struct phys_mem_desc{void *virtualAddr;void *physicalAddr;UNIT len;UNIT initialStateMask;UNIT initialState;} PHYS MEM DESC; virtualAddr和physicalAddr通常是相等的.
sysPhysMemDesc [] 中可能包含的映射空间有内存、flash、rom、I/O设备和外部总线地址空间等· 下面是多cpu嵌入式系统中使用共享内存网络时各目标板的MMU配置示例:
{(void *) 0x4000000,/* virtual address */(void *) 0x4000000,/* physical address */0x20000,/* length *//* initial state mask */VM_STATE_MASK_VALID | VM_STATE_MASK_WRITABLE | VM_STATE_CACHEABLE,/* initial state */VM_STATE_VALID | VM_STATE_WRITABLE | VM_STATE_CACHEABLE_NOT,……} 虚拟内存状态标志:
VM_STATE_VALIDVM_STATE_VALID_NOTVM_STATE_WRITABLEVM_STATE_WRITABLE_NOTVM_STATE_CACHEABLEVM_STATE_CACHEABLE_NOT 有效性: 有效状态指示虚到实转换是正确的。当转换表被初始化时全局虚内存被标记为有效的所有其他虚内存被初始化为无效的.
可写性:通过设置状态为不可写也可以被设置为只读。这被VxWorks用于写保护所有text段.
可cache: 内存页的cache可以通过设置状态标志为cache被禁止。这对处理器间共享的内存及DMA设备是有用的. 屏蔽标志描述哪一标志可以被改变
VM_STATE_MASK_VALIDVM_STATE_MASK WRITABLEVM_STATE_MASK_CACHEABLE 有两种方法可以修改虚地址和实地址之间的映射关系; 静态方式:通过修改结构体sysPhyMemDesc的内容 动态方式:通过调用vmBaseStateSet函数来修改一块虚拟内存空间的状态 所有可能会在应用程序中被访问的物理内存(包括内存映射设备比如以太网设备、PCI设备、SCSI设备等) 都应该被映射到不同的虚拟内存空间.
在MMU使能的情况下如果某一段物理地址没有被映射而试图对这样的地址进行些操作时将会引起总线错误. 一个较完整的内存映射实例, 此实例是一款基于mpc860开发板的内存映射表。这款开发板上的器件有mpc860, mpc860内嵌64K存储器, 外挂内存(SDRAM) 、Boot flash、版本fIash.
PHYS MEM_DESC sysPhysMemDesc []
{{(void*)LOCAL_MEM_LOCAL_ADRS,(void*)LOCAL_MEM_LOCAL ADRS,LOCAL_MEM_SIZE, /*SDRAM*/VM_STATE_MASK_VALID | VM_STATE_MASK_ WRITABLE |VM_STATE_MASK_CACHEABLE |VW_STATE_VALID | VM_STATE_WRITABLE | VM_STATE_CACHEABLE},……}