移动 - 黄烨明 - 基于VxWorks的内存管理和一个内存泄漏查找实例(2)

2019-03-22 12:57

存;

STATUS vmBaseStateSet(context,pVirtual,len,stateMask state) Context:映射的上下文,变量类型:VM_CONTEXT_ID; Pvirtual:被修改状态的虚拟地址,变量类型:void*; Len: 映射的长度,变量类型:int; StateMask:Unsigned int; State: Unsigned int

? 该函数改变了一块虚拟内存的状态:用于改变由sysPhysMemDesc[]定义的初始内存映射; ? 函数的第一个参数为NULL时表示指示的是当前的context;

? 虚拟映射对基本级的MMU是全局的,对于构造和管理私有context的信息请参照VxVMI; 四、速缓存Cache机制

? 在VxWorks中,如果MMU使能,Cache就在MMU的控制下;

? 系统库(cacheLib)中提供基本的cache管理支持,其中BSP的主要功能:

选择合适的cache库和模式执行多个cache的操作; 如果MMU使能,内存映射将被标识是否被cacheable;

遵循设备驱动器的cache策略,对BSP控制的系统设备进行操作;

STATUS cacheLibInit(intMode,dataMode)

IntMode 定义指令cache的模式,类型:CACHE_MODE DataMode 定义数据cache的模式,类型:CACHE_MODE

? 初始化cacheLib机制:

调用结构定义的初始化函数; 置cache为静态;

在sysHwInit()运行之前由usrInit()调用。

? 参数用来定义指令/数据caches的模式 ? CACHE_MODE 在../h/cacheLib.h中声明

? Cache的模式配置宏:USR_I_CACHE_MODE ,USR_D_CACHE_MODE

6

? 对cache模式配置的宏的确省值在configAll.h中定义。如果需要则在config.h中重新定

义:

? 对指令和数据的缺省模式是writethrough

? cache模式由具体的cache库用来配置合适的cache硬件

? 如果目标板支持多cache的操作,BSP负责选择恰当的库package:

MACRO_ARCH_MULTIPLE_CACHELIB 必须在../h/arch//arch.h中定义为TRUE或FALSE;

如果为TRUE则通过声明和初始化sysLib.c和config.h中的sysCacheLibInit提供正确的cache初始化;

FUNCPTR sysCacheLibInit=(FUNCPTR) cacheXLibInit; ? 对于L2 cache,BSP需要提供单独的cache管理库:

? 系统支撑决定_ARCH_MULTIPLE_CACHELIB是否定义为TRUE,BSP并不控制;

STATUS cacheEnable(cache) cache:CACHE_TYPE

? 使能特定的cache类型:指令、数据或者分支要使用特定系统的函数; ? 必须undefine config.h中的宏来禁止:

INCLUDE_CACHE_SUPPORT为任何cache的类型; USER_I_CACHE_ENABLE为指令Cache; USER_D_CACHE_ENABLE为数据Cache; USER_B_CACHE_ENABLE为分支Cache

? 在usrInit()中被调用,在KernelInit()调用之前; ? 缺省的所有Cache类型在configAll.h中定义; ? CACHE_TYPE结构在../h/cacheLib.h中声明;

7

? Cache类型定义在../h/cacheLib.h中

? 对管理有效访问设备的代码不论设备是否独立于BSP

要保持cache与DMA设备和硬件寄存器的一致性 管理设备内存访问方法

防止RISC处理器的指令的无序操作

? 使用cacheLib实行期望的cache管理

为cache分配安全的缓冲区

为一个驱动器(系统设备或BSP独立的设备驱动器)分配属性并且申请执行方法

? 一些系统具有特殊的cache库,具体可参见VxWorks Reference Manual

? 对设备cache的管理机制与被分配的可由设备访问的内存大小有关

? 可由设备访问的被分配的内存使用:cacheDmaMalloc(), malloc和memalign,数据段和堆

栈段内存,系统区外的特殊内存区,未知的分配方法 ? 设备寄存器内存:

如果内存被映射,将使用上述方法中的一种被分配; 如果内存没有映射,将不被高速缓存;

void * cacheDmaMalloc(bytes)

bytes: 分配的字节数,变量类型:size_t

? 函数为DMA设备分配了cache-aligned,cache-safe 的缓冲区,返回内存的首地址

8

? cache对通过cacheDmaMalloc()分配的内存的一致性管理是依赖于MMU是否使能

如果MMU使能,被分配的内存被标为non-cacheable 如果MMU不被使能,刷新和禁止的宏代码调用必须插入代码

? cacheLib通过CACHE_FUNCS和CACHE_LIB结构(见。。/h/cacheLib.h)来管理刷新、禁止

和其他的宏程序,例如:

? 宏代码使用CACHE_FUNCS和CACHE_LIB结构中的程序指针,例:

? 通常情况下,如果一个特定的宏程序是一个no-op,它的CACHE_FUNCS和CACHE_LIB结构

中的程序指针为NULL:所有的探查、刷新和禁止函数被设置为NULL; ? 宏程序被分为两组:

CACHE_DMA_XXXX 这些程序刷新、禁止和执行其他的通过cacheDmaMalloc()分配的内存区域的操作

CACHE_USER_XXXX 这些程序刷新、禁止和执行其他的不是通过cacheDmaMalloc()分配的内存区域的用户操作

? CACHE_DMA_XXXX和CACHE_USER_XXXX宏定义使用低一级的宏程序CACHE_DRV_XXXX ? CACHE_DRV_XXXX 宏允许在提供cache与独立的内存分配方法一致的灵活性:程序具有一个

附加的指向CACHE_FUNCS结构的指针参数;

? 开发者能够使用CACHE_DRV_XXXX宏来控制cache与驱动器控制的内存、可定制的cache管

理的一致性

STATUS drvDmaExample (void * pBuf)

9

? Cache对设备的策略将由使用的哪一个cacheLib机制来决定 ? BSP开发者应基于设备的属性来开发cache,属性有:

WRITE_PIPING,

SNOOPED,

MMU_TAGGING,

USER_DATA_UNKNOW,

10


移动 - 黄烨明 - 基于VxWorks的内存管理和一个内存泄漏查找实例(2).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:《遗传学》教学大纲 - 图文

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: