zoukankan      html  css  js  c++  java
  • [国嵌攻略][106][Linux内存管理子系统]

    内存管理子系统

    1.虚拟地址与物理地址的映射

    2.物理内存的分配

    Linux虚拟地址空间分布

    设备最后访问的一定是物理地址,但Linux系统中使用的都是虚拟地址。虚拟地址简单的来说就是程序中使用的地址。所以存在虚拟地址到物理地址之间的映射关系。

    Linux系统支持的虚拟地址空间由硬件来决定。例如处理器是32位,那么访问到的虚拟地址空间就是4G。0-3G是用户空间,也就是应用程序空间。3-4G是内核空间,内核空间又被划分为4个部分,第一个部分是直接映射区(3-3.896G),第二个部分是vmalloc区,第三个部分是永久映射区,第四个部分是固定映射区线性区。

    虚拟地址转换为物理地址

    基地址加地址起始部分得到页目录地址,页目录地址加上地址中间部分得到物理页基地址,物理页基地址加上地址最后部分得到物理页中的存储单元。

    直接映射区的虚拟地址就是3G加上物理地址(<896M)。

    vmalloc区的虚拟地址与物理地址没有简单的映射关系,既可以访问低端内存(<896M),也可以访问高端内存(>896M)。

    永久映射区是用来固定访问高端内存(>896M)的。

    固定映射区线性区与特殊的寄存器建立起关系,用来访问固定的寄存器。

    物理内存的分配

    得到虚拟地址时,不一定分配到了物理内存,只有到访问虚拟地址时,才会分配物理内存。

    当程序使用虚拟地址时会产生缺页异常,然后从空闲页框中得到物理内存,例如使用malloc,fork,excute,mmap,vmallc函数。使用kmalloc函数分配虚拟地址时会同时分配物理内存。

  • 相关阅读:
    安装docker
    docker安装完成后测试feisky/nginx:latest 出现问题(Unable to find image 'feisky/nginx:latest' locally)
    负载均衡详细介绍
    docker(一)
    AppCrawer使用(2)
    AppCrawer使用入门(转自https://www.cnblogs.com/alwayswyy/p/7576964.html,感谢原作者)
    获取包名和活动名
    (十八)Collection集合
    (十七)面向对象之内部类
    (十五)final关键字
  • 原文地址:https://www.cnblogs.com/d442130165/p/5245514.html
Copyright © 2011-2022 走看看