導覽
近期變更
隨機頁面
新手上路
新頁面
優質條目評選
繁體
不转换
简体
繁體
18.218.43.201
登入
工具
閱讀
檢視原始碼
特殊頁面
頁面資訊
求真百科歡迎當事人提供第一手真實資料,洗刷冤屈,終結網路霸凌。
檢視 地址映射 的原始碼
←
地址映射
前往:
導覽
、
搜尋
由於下列原因,您沒有權限進行 編輯此頁面 的動作:
您請求的操作只有這個群組的使用者能使用:
用戶
您可以檢視並複製此頁面的原始碼。
{| class="wikitable" style="float:right; margin: -10px 0px 10px 20px; text-align:left" |<center>'''地址映射'''<br><img src="https://img0.baidu.com/it/u=2213188283,1127923717&fm=253&fmt=auto&app=138&f=JPEG?w=500&h=301" width="280"></center><small>[https://www.pianshen.com/article/23271516158/#google_vignette 圖片來自程序员大本营]</small> |}'''地址映射'''是计算机科学术语。为了保证CPU执行指令时可正确访问[[存储单元]],需将[[用户程序]]中的逻辑[[地址转换]]为运行时由机器[[直接寻址]]的物理地址,这一过程称为地址映射。<ref>[https://zige.eol.cn/wangluoanquangongchengshi/zh/202206011512456289.html 计算机等级考试信息安全(1)]网络安全工程师考试</ref><ref>[https://blog.csdn.net/weixin_44495678/article/details/100800586 计算机四级网络工程师(操作系统多选)- 知识点_计算机四级...]CSDN博客</ref> ==地址映射结构== 在Tornado\target\h\vmLib.h文件中 typedef struct phys_mem_desc { void *virtualAddr; void *physicalAddr; UINT len; UINT initialStateMask; /* mask parameter to vmStateSet */ UINT initialState; /* state parameter to vmStateSet */ } PHYS_MEM_DESC; virtualAddr:你要映射的[[虚拟地址]] physicalAddr:硬件设计时定义的实际物理地址 len;要进行映射的地址长度 initialStateMask:可以初始化的地址状态: ===有如下状态:=== #define VM_STATE_MASK_VALID 0x03 #define VM_STATE_MASK_WRITABLE 0x0c #define VM_STATE_MASK_CACHEABLE 0x30 #define VM_STATE_MASK_MEM_COHERENCY 0x40 #define VM_STATE_MASK_GUARDED 0x80 不同的CPU芯片类型还有其特殊状态 initialState:实际初始化的地址状态: ===有如下状态:=== #define VM_STATE_VALID 0x01 #define VM_STATE_VALID_NOT 0x00 #define VM_STATE_WRITABLE 0x04 #define VM_STATE_WRITABLE_NOT 0x00 #define VM_STATE_CACHEABLE 0x10 #define VM_STATE_CACHEABLE_NOT 0x00 同样不同的CPU芯片类型还有其特殊状态 ==初始化结构== 在 Tornado\target\config\ads860\sysLib.c 文件中: PHYS_MEM_DESC sysPhysMemDesc [] = { { (void *) LOCAL_MEM_LOCAL_ADRS, (void *) LOCAL_MEM_LOCAL_ADRS, LOCAL_MEM_SIZE , VM_STATE_MASK_VALID | VM_STATE_MASK_WRITABLE | VM_STATE_MASK_CACHEABLE, VM_STATE_VALID | VM_STATE_WRITABLE | VM_STATE_CACHEABLE }, { (void *) BCSR0, (void *) BCSR0, 0x00001000, /* 4 k - Board Control and Status */ VM_STATE_MASK_VALID | VM_STATE_MASK_WRITABLE | VM_STATE_MASK_CACHEABLE | VM_STATE_MASK_GUARDED, VM_STATE_VALID | VM_STATE_WRITABLE | VM_STATE_CACHEABLE_NOT | VM_STATE_GUARDED }, …… { (void *) INTERNAL_MEM_MAP_ADDR, (void *) INTERNAL_MEM_MAP_ADDR, INTERNAL_MEM_MAP_SIZE, /* 64 k - Internal Memory Map */ VM_STATE_MASK_VALID | VM_STATE_MASK_WRITABLE | VM_STATE_MASK_CACHEABLE | VM_STATE_MASK_GUARDED, VM_STATE_VALID | VM_STATE_WRITABLE | VM_STATE_CACHEABLE_NOT | VM_STATE_GUARDED }, { (void *) ROM_BASE_ADRS, (void *) ROM_BASE_ADRS, ROM_SIZE, /* Flach memory */ VM_STATE_MASK_VALID | VM_STATE_MASK_WRITABLE | VM_STATE_MASK_CACHEABLE , VM_STATE_VALID | VM_STATE_WRITABLE | VM_STATE_CACHEABLE_NOT } }; 上面结构中是缺省地址映射。 ===地址初始化=== 在Tornado\target\src\config\ usrMmuInit.c 文件中 通过函数usrMmuInit使地址映射生效 ===实现映射=== 如你定义flash地址为0x04000000开始的8Mbyte地址,则可以如下进行地址映射 { (void *) 0x04000000, (void *) 0x04000000, 0x00800000, /* 8 m - Flash window 1 */ VM_STATE_MASK_VALID | VM_STATE_MASK_WRITABLE, VM_STATE_VALID | VM_STATE_WRITABLE }, ===注意=== 地址映射最小单位为1页,4K大小,所以len值最小为:0x00001000。 ===地址映射分类=== 地址映射也可以成为地址重定位或地址变换,可以分为以下两类: 1.静态重定位当用户程序被装入内存时,一次性实现逻辑地址到物理地址的转换,以后不再转换(一般在装入内存时由软件完成)。 2.动态重定位在程序运行过程中要访问数据时再进行地址变换(即在逐条指令执行时完成地址映射。一般为了提高效率,此工作由硬件地址映射机制来完成。由硬件支持,软件硬件结合完成。硬件上一般需要一对寄存器的支持)。 ==参考文献== [[Category:470 製造總論]]
返回「
地址映射
」頁面