本文由我司收集整编,推荐下载,如有疑问,请与我司联系
Linux设备驱动开发详解
2010/05/09 0 typedef void (*lpFunction) ();//定义一个无参数,无返回类型的函数指针类型
//定义一个函数指针,指向cpu启动后所执行的第一条指令的位置
lpFunction lpReset = (lpFunction)0xF000FFF0;
lpReset();//调用函数
MMU停供虚拟地址和物理地址的映射、内存访问权限保护和Cache缓存控制等硬件支持。
操作系统内核借助MMU,可以让用户感觉到好像程序可以使用非常大的内存空间,从而使得编程人员在写程序时不用考虑计算机的物理内存的实际容量 如图,当ARM要访问存储器时,MMU先查找TLB中的虚拟地址表。
如果ARM 的结构支持分开的数据TLB(DTLB)和指令TLB(ITLB),则除去指令使用的ITLB外,其他的都是用DTLB
若TLB中没有虚拟地址的入口,则转换表遍历硬件从存放于主存储器中的转换表中获取地址转换信息和访问权限(即执行TTW),同时将这些信息放入TLB,它或者被放在一个没有使用的入口或者替换一个已经存在的入口。
之后,在TLB条目中控制信息的控制下,当访问权限允许时,对真实物理地址的访问将在Cache或者在内存中发生
用户空间0-3GB,内核空间3-4GB,用户进程通常情况下只能访问用户空间的虚拟地址,不能访问内核空间虚拟地址。
用户进程只能通过系统调用等方式才能访问到内核空间
每个进程的用户空间都是完全独立、互不相干的,用户进程各自有不同的页表。
而内核空间是由内核负责映射,它并不会跟着进程改变,是固定的。
内核空间地址有自己对应的叶表,内核的虚拟空间独立于其他程序
Linux中的1GB内核地址空间又被划分为内存映射区,虚拟内存分配区、高端页面映射区、专用页面映射区和系统保留映射区。