设为首页 加入收藏

TOP

ARM Linux内存管理
2014-11-24 12:56:00 来源: 作者: 【 】 浏览:0
Tags:ARM Linux 内存 管理


1、ARM地址是32位,所以虚拟地址总容量也是4GB。同样分为系统空间和用户空间。


对于SA-1100,也是3GB为界。


#define TASK_SIZE 0xc0000000(定义每个进程用户空间大小)


#define PAGE_OFFSET 0xc0000000


#define PHYS_OFFSET 0xc0000000(内存的物理地址起点)


所以在系统空间,即在内核中,虚拟地址与物理地址在数值上是相同的,这反映在


#define _ _pa(x) _ _virt_to_phys((unsigned long)(x))


#define _ _va(x) ((void*)_ _phys_to_virt((unsigned long)(x)))


#define _ _virt_to_phys(x) (x)


#define _ _phys_to_virt (x)


至于用户空间的地址映射,动态的,根据需要分配物理内存,并且建立起具体进程的虚拟地址与所分配的物理内存间的映射。


系统空间的一部分不是映射到物理内存,而是映射到一些I/O设备,包括寄存器和一些小块的存储器。


2、在ARM系统结构,地址映射可以是单层的按段映射,也可以是二层的按页面映射。段的大小是1MB,而页的大小可以是64KB的大页面,或者是4KB的小页面,还可以是1KB的细小页面。其中64KB和4KB的页面映射称为粗页面映射,1KB的页面映射称为细页面映射。


3、采用单层映射,内存中的段映射表共有4096个表项,每个描述项为4个字节,所以整个映射表,大小为16KB,而且,位置必须与16KB边界对齐。当CPU访问内存时,其32为虚拟地址的高12位被用作访问段映射表的下标,从表中找到相应的表项。每个表项提供了12位的物理地址,以及对这个段的访问许可标志。将这12位物理段地址与虚拟地址的低20位拼接在一起,就得到了32伟位的物理地址。整个过程由MMU硬件完成,无需CPU介入。


4、如果采用页面映射,段映射表就成了首层映射表,其表项提供的不再是物理段地址,而是相应二层映射表所在的地址。凡是首层映射表的表项都对应一个二层映射表。二层映射表的大小因页面映射的“粗”“细”而异。如果是4KB的页面,则二层映射表中有256个表项。


CPU访问内存时,映射过程如下:


(1)以32位虚拟地址的高12位作为访问首层映射表的下标,从表中找到相应的表项,每个表项指向一个二层映射表。


(2)以虚拟地址的次8位(12-19bit)作为访问所得二层映射表的下标,进一步从相应表项中取得20位的物理页面地址。


(3)最后,将此20位的物理页面地址与虚拟地址中的最低12位拼接在一起,就得到了32位的物理地址。


同样,整个过程由MMU硬件完成,CPU并不介入。


5、由于首层映射表项用途上的多样性,表项中有两位的位段,表示其用途。00表示无映射,01表示“粗”页面表,即页面大小为64KB或4KB的二层映射表,10表示段映射,11则表示指向“细”页面表,即页面大小为1KB的二层映射表。


6、同样二层映射表中还提供了对页面的访问许可,以及页面大小等信息。因为二层表项所给出的只是20位的物理页面地址,表项中还有12位可以另作它用。二层映射表项的大小也是4个字节,所以当页面大小为4KB是,二层映射表大小为1KB,并且须与1KB边界对齐。页面为1KB时,有1K个表项,所以表的大小为4KB。页面为64KB时,按理说二层映射表只要16个就够了,但实际是ARM系统结构中的二层映射表只有粗细之分,页面大小为64KB时的二层映射表仍有256个表项,而每个大页面在表中占16个连续的表项,即把相同的表项重复16次,


7、ARM系统结构还把大页面和小页面划分成4个子页面。子页面不是确定地址映射的最小单位,而是确定访问权限的最小单位。


8、ARM的系统结构还有个“域Domain”的概念。一个域是若干段,从而是若干页面的集合,而每一个页面都属于某一个特定的域,在首层映射表项中都有4位的Domain位段,说明本段属于那一个域。另一方面,MMU中有个域访问控制寄存器,通过这个寄存器可以将16个域分别设置成不可访问、访问时检查访问权限(Client类型)、或不检查访问权限(Manager类型)。


9、协处理器中与MMU有关的处理器主要有三个:




】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇Ubuntu 使用KindleFire调试Androi.. 下一篇Linux内核-可安装模块的实现

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容:

·哈希表 - 菜鸟教程 (2025-12-24 20:18:55)
·MySQL存储引擎InnoDB (2025-12-24 20:18:53)
·索引堆及其优化 - 菜 (2025-12-24 20:18:50)
·Shell 中各种括号的 (2025-12-24 19:50:39)
·Shell 变量 - 菜鸟教 (2025-12-24 19:50:37)