虚拟内存,就是用磁盘作为介质,暂时性存储数据,和主存进行换入换出,使程序能够使用更多的内存。虚拟内存是单位是页,固定大小的数据方便数据的交换。如果一个应用程序要访问某段内存,通过MMU得到相应的页号,然后就去主存中去寻找相应的页,如果该页被换到了磁盘上,就会发生一个缺页,然后内核就会从磁盘上将需要的页换入主存,然后进行访问。还有一个问题就是内核空间和用户空间的数据交换,由于用户空间的数据是可以换入到磁盘上的,而内核数据永远是放在主存上的,所以如果内核访问用户数据时可能该地址的数据并不在主存中,所以要使用copytousr和copyfromusr这种机制来完成处理。

虚拟地址空间,空间个人理解就是一组地址的集合。LINUX的应用程序在编译后就拥有4G大小的地址空间,这4G大小的内存通过页机制映射到4G大小的物理地址,页是该机制的最小单位。至于虚拟地址映射到哪一块物理内存,这是由硬件决定的,采用一套不同的页目录,页表就能够做到虚拟地址相同但对应的物理地址不同。这就是操作系统能够做到多个应用程序同时运行但是数据之间不会相互干扰的原因,每个进程的页表信息都存放在PCB结构里,当要运行该进程时,将页表信息交给cpu就能够做到转换。

用户空间就是4G虚拟地址空间中的低3G的虚拟地址空间,是cpu用户态享有的,用户空间对应的页是可以在主存和磁盘之间进行交换的。

内核空间就是4G虚拟地址空间中的高1G的虚拟地址空间,是cpu内核态享有的,该空间对应的物理地址永远是位于主存当中的,不会被换到磁盘上。

个人觉得还有一个很重要的问题就是用户空间和内核空间的到物理内存的映射是不同的。

首先用户空间是通过页表进行映射到物理地址,而内核空间是通过线性一一映射到物理地址,即用虚拟地址减去一个偏移量0xc0000000。

用户态最多只能访问3G的内存,而内核态能访问所有的物理内存,这里若内核空间的映射是按照这种线性映射的话,显然内核态是不能够访问大于1G的内存的,所以这里就引入了高端内存的概念,简单的介绍一下就是将内核虚拟地址空间中开辟一段地址,然后将物理地址高于1G的地址中的某一段映射到我们开辟的虚拟地址上,然后就能够实现访问大于1G的内存了。

内核态下分配内存的函数kmalloc,传递给函数不同的标志来通知函数分配哪一部分的内存,kmallocGFP__KERNEL就是分配和物理内存一一映射的部分的内存

转载于:https://www.cnblogs.com/ideawu1001/p/3204820.html

虚拟内存,虚拟地址空间,用户空间,内核空间相关推荐

  1. 【Linux 内核 内存管理】内存管理架构 ① ( 内存管理架构组成 | 用户空间 | 内核空间 | MMU 硬件 | Linux 内核架构层次 | Linux 系统调用接口 )

    文章目录 一.内存管理架构组成 ( 用户空间 | 内核空间 | MMU 硬件 ) 二.Linux 内核架构层次 三.Linux 系统调用接口 一.内存管理架构组成 ( 用户空间 | 内核空间 | MM ...

  2. Linux预备知识(二):进程空间地划分-用户空间/内核空间

    查看机器上栈大小命令 ulimit -a 或者 ulimit -s 大小不固定,可以用 ulimit -s 进行调整,默认一般为 8M ** 栈区(stack sagment)**:由操作系统自动分配 ...

  3. Linux用户与内核空间交互—sysfs

    目录 简介 一.sysfs 1./sys 目录 2.API 3.platform  API 4.创建platform总线设备文件 二.程序源码 简介 用户空间与内核的交互方式,使用copy_from_ ...

  4. 跟踪 linux 内核调用_Linux用户和内核空间中的动态跟踪

    跟踪 linux 内核调用 您是否曾经遇到过这样的情况,即您意识到没有在代码中的某些点插入调试打印 ,所以现在您将不知道您的CPU是否命中了特定的代码行来执行,直到您重新编译该代码为止.调试语句? 不 ...

  5. Linux用户与内核空间交互—netlink

    目录 简介 一.netlink soket 优点 二.用户空间 1.API 2.编程流程 3.源码 三.内核编程 1.API 2.内核空间编程流程 3.内核源码 简介 用户空间与内核的交互方式,使用c ...

  6. 虚拟内存/虚拟地址空间

    虚拟内存: 也被称作"页面文件",是一种逻辑上扩充物理内存的技术.简单的说就是将硬盘的一部分作为内存来使用.基本思想是用软.硬件技术把内存与外存这两级存储器当做一级存储器来用.虚拟 ...

  7. static在内存层面的作用_虚拟地址空间--用户进程看到的自己所占用的内存

    我们知道内核管理物理内存,其实除了管理本身内存外,还必须管理用户空间中进程的内存,我们称这个内存为进程地址空间,也就是系统中每个用户空间进程所看到的内存. 传统的C语言编译出来的进程地址空间包含哪些对 ...

  8. 【Binder 机制】进程通信 | 用户空间与内核空间 | MMU 与虚拟内存地址

    文章目录 一.进程通信 二.用户空间与内核空间 三.MMU 与虚拟内存地址 一.进程通信 进程隔离概念 : 系统中的进程存在 " 进程隔离 " , 出于对进程运行的保护 , 两个进 ...

  9. linux内核dma内存分配,Linux 4.x 内核空间 DMA 虚拟内存地址

    Architecture: i386 32bit Machine Ubuntu 16.04 Linux version: 4.15.0-39-generic 目录 DMA 虚拟内存区 在 IA32 体 ...

  10. 用户空间和内核空间通讯之【proc文件系统】

    今天我们介绍另一种用户内核空间通信的方法:proc文件系统. proc文件系统作为linux提供的一种虚拟文件系统并不占用实际外围存储空间,它仅存在于内存中,系统断电即消失.proc文件系统最开始的设 ...

最新文章

  1. Quartz2.2.1开发问题
  2. asp.net panel 加html,ASP.NET 页面中动态增加的控件、添加事件
  3. RDMA技术详解(三):理解RDMA Scatter Gather List
  4. Ubuntu首次开启root用户
  5. am5728 是否支持aarch64_am5728开启uart0接口通讯
  6. 如何计算给定一个unigram语言模型_n-gram语言模型原理到实践
  7. json 微信小程序 筛选_微信小程序学习记录
  8. gateway动态路由_微服务与网关技术(SIA-GateWay)
  9. java目录删除_java删除文件及目录
  10. OneHotEncoder简单用法
  11. MongoDB分片式高可用集群搭建
  12. java 验证手机号
  13. 软件测试自学入门书籍
  14. 学生宿舍管理系统(前端部分)
  15. 没有人能够一味地淡定,没有人能够一味地忍受
  16. 惯性动作捕捉系统在虚拟主播中的应用
  17. Scacanner类
  18. 怎么把画好的流程图插入到Word中?
  19. [转帖]GT4 奖励车一览
  20. USACO2013 island travels

热门文章

  1. [ 浙江大学 程序设计专题 ] 四个专题代码 报告 PPT共享
  2. 迭代器、代码块、闭包
  3. 解决任务计划程序未启动任务,因为相同任务的实例正在运行的问题
  4. 基于FastJson的通用泛型解决方案
  5. http-server swagger-editor启动成功后,访问404的解决方法
  6. Mockito测试void方法会引发异常
  7. 我如何查看要使用git推送的内容?
  8. 如何使Git“忘记”已跟踪但现在位于.gitignore中的文件?
  9. 数据结构 栈的应用
  10. 《Adobe Photoshop CS5中文版经典教程(全彩版)》—第1课1.2节使用工具