MMU

         高性能处理器通常会提供一个内存管理单元(MMU),该单元辅助操做系统进行内存管理,提供虚拟地址和物理地址的映射、内存访问权限保护和Cache缓存控制等硬件支持缓存

        TLB:Translation Lookaside Buffer,即转换旁路缓存,TLB是MMU的核型部件,它缓存少许的虚拟地址与物理地址的转换关系,是转换表的Cache,所以也常常被称为“快表”。ide

        TTW:Translation Table walk,即转换表漫游,当TLB中没有缓冲对应的地址转换关系时,须要经过对内存中转换表(大多数处理器的转换表为多级页表)的访问来得到虚拟地址和物理地址的对应关系。TTW成功后。结果应写入TLB。函数

       MMU具备虚拟地址和物理地址转换、内存访问权限保护等功能,这将使得Linux操做系统能单独为系统的每一个用户进程分配独立的内存空间并保证用户空间不能访问内核空间的地址,为操做系统的虚拟内存管理模块提供硬件基础。性能

       对于包含MMU的处理器而言,Linux系统提供了复杂的存储管理系统,使得进程所能访问的内存达到4GB。操作系统

       在Linux系统中,进程的4GB内存空间被分为两个部分--用户空间与内核空间。用户空间地址通常分布为0~3GB(即PAGE OFFSET,在0x86中他等于0xC0000000),这样,剩下的3~4GB为内核空间,以下图所示。用户进程一般状况下只能访问用户空间的虚拟地 址,不能访问内核空间的虚拟地址。用户进程只有经过系统调用(表明用户进程在内核态执行)等方式才能够访问到内核空间。设计

      每一个进程的用户空间都是彻底独立的、互不相干的,用户进程各自有不一样的页表。而内核空间是由内核负责映射,它并不会跟着进程该表,是固定的。内核空间地址有本身对应的页表,内核的虚拟空间独立于其余程序。Linux中1GB的内核空间又被划分为物理内存映射区、虚拟内存分配区、高端页面映射区、专用页面映射区和系统保留映射区这几个区域进程

      在用户空间动态申请内存的函数为malloc(),这个函数在各类操做系统上的使用时一致的,malloc()申请的内存的释放函数为free()。内存

malloc()的内存必定要被free(),不然会形成内存泄漏。理想状况下,malloc()和free()应成对出现,即谁申请,就由谁释放。get

      在Linux内核空间申请内存设计的函数主要包括kmalloc()、__get_free_pages()和vmalloc等。kmalloc()和 __get_free_pages()(及其相似函数)申请的内存位于物理内存映射区域,并且在物理上也是连续的,它们与真实的物理地址只有一个固定的偏 移,所以存在较简单的转换关系。而vmalloc()在虚拟内存空间给出一块连续的内存区,实质上,这片连续的虚拟内存在物理内存中并不必定连续,而 vmalloc()申请的虚拟内存和物理内存之间也没有简单的换算关系。内存管理

      void *kamlloc(size_t size, int flags);

      给kmalloc()的第一个参数是要分配的块的大小,第二个参数为分配标志,用于控制kmallockmalloc()的行为。最经常使用的分配标志是GFP_KERNEL,其含义是在内核空间的进程中申请内存。kmalloc()的底层依赖__get_free_pages()实 现,分配标志的前缀GFP正好是这个底层函数的缩写。使用GFP_KERNEL标志申请内存时,若暂时不能知足,则进程会睡眠等待页,即会引发阻塞,所以 不能在中断上下文或持有自旋锁的时候使用GPF_KENNEL申请内存。

     使用vmalloc()不能用在原子上下文中

     I/O端口和I/O内存:

     设备一般会提供一组寄存器来用于控制设备、读写设备和获取设备状态,即控制寄存器、数据寄存器和状态寄存器。这些寄存器可能位于I/O空间,也可能位于内存空间。当位于I/O空间时,一般被称为I/O端口,位于内存空间时,对应的内存空间被称为I/O内存。

      mmap():

      般状况下,用户空间是不可能也不该该直接访问设备的,可是,设备驱动程序中可实现mmap()函数,这个函数可以使得用户空间直接访问设备的物理地 址。实际上,mmap()实现了这样的一个映射过程:它将用户空间的一段内存与设备内存管理,当用户访问用户空间的这段地址范围时,实际上会转化为对设备 的访问。

      这种能力对于显示适配器一类的设备很是有意义,若是用户空间可直接经过内存映射访问显存的话,屏幕帧的各点的像素将再也不须要一个从用户空间到内核空间的复制的过程。

相关文章
相关标签/搜索