内存驱动_MMU

一.内存空间和I/O空间,MMU

1. 内存空间与I/O空间

       X86处理器中,存在I/O空间的概念;I/O空间是相对于内存空间而言的。

   大多数嵌入式微处理器中,ARMPowerPC等,并不提供I/O空间,只有内存空间。

 

2. 内存管理单元MMU

       MMU辅助操作系统,进行内存管理,提供虚拟地址和物理地址的映射,内存访问权限和cache缓存控制等支持。

       使得linux操作系统能为每个用户进程分配独立的内存空间,并保证用户空间不能访问内核空间。

       MMU的两个内容:

       ---TLBTranslation Lookaside Buffer,即转换旁路缓存,TLBMMU的核心,它缓存少量的虚拟地址和物理地址的转换关系,是转换表的cache

       ---TTWTranslation Table walk,即转换漫游表,但TLB中没有需要的地址转换关系时,需要访问内存中的转换表,并将它写入TLB中。

 

二.内存管理

       对具有MMU的处理器而言,Linux系统提供了复杂的存储管理系统,使得进程能访问的内存达4GB。这个4GB是虚拟地址。

       Linux系统中,进程的4GB内存空间被分为:用户空间和内核空间。

-------------3GB  用户空间

3GB-----------4GB    内核空间

1. 用户进程只能访问用户空间的虚拟地址,只有通过系统调用等方式才可以访问到内核空间。各用户进程相互独立,具有各自不同的页表。

 

2.        内核空间具有自己对应的页表,内核的虚拟空间独立于其它程序。

Linux1GB的内核地址空间,又分为:

              ----物理内存映射区

              ----虚拟内存分配区

              ----高端页面映射区

              ----专用页面映射区

              ----系统保留区

 

3. 当系统物理内存大于4GB时,必须使用CPU的扩展分页(PAE)模式提供的64位页目录项,才能取到4GB以上的物理内存。

 

三.内存存取。

 

1.       用户空间内存动态申请

申请内存:malloc()

释放内存:free()

2.       内核空间内存动态申请

kmalloc()

__get_free_pages()

vmalloc()

 

3.       slab与内存池

slab技术: 对象重复生成,使用和释放,可以给他分配在同一内存或同一类内存空间,并且保留基本的数据结构。这样可以大大提高效率。

*kmem_cache_create()

*kmem_cache_alloc()

  kmem_cache_free()

  kmem_cache_destroy()

 

内存池:用于分配大量小对象的后背缓存技术。

 

Mempool_create()

Mempool_alloc()

Mempool_free:()

Mempool_destroy()

 

4.       虚拟地址与物理地址的关系

Vir_to_phys() --------将内核虚拟地址转化为物理地址。

Phys_to_vir() --------将物理地址转化为内核虚拟地址。


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值