vm_area_struct

【Linux 内核源码分析】内存映射(mmap)机制原理 内存映射(mmap)是 Linux 内核的一个重要机制,它为程序提供了一种将文件内容直接映射到进程虚拟地址空间的方式。同时内存映射也是虚拟内存管理和文件 IO 的重要组成部分。在 Linux 中,虚拟内存管理是基于内存映射来实现的。在调用 mmap 函数时,会创建一个结构体,该结构体代表了一段连续的虚拟地址空间,它们会相应地映射到一个后备文件或者一个匿名文件的虚拟页。一个结构体映射到一组连续的页表项,这些页表项指向物理内存中的一页。这样就把一个文件和物理内存页相映射起来。当进程试图访问映射到。 阅读详情

原文:http://blog.youkuaiyun.com/ywf861029/article/details/6114794


Linux内核中,关于虚存管理的最基本的管理单元应该是struct vm_area_struct了,它描述的是一段连续的、具有相同访问属性的虚存空间,该虚存空间的大小为物理内存页面的整数倍。

  下面是struct vm_area_struct结构体的定义:

[cpp]  view plain copy
  1. <span style="font-family:Microsoft YaHei;">/* 
  2. * This struct defines a memory VMM memory area. There is color: black; background-color: #a0ffff;">vm_area_struct { 
  3. struct mm_struct * vm_mm; /* VM area parameters */  
  4. unsigned long vm_start;  
  5. unsigned long vm_end;  
  6.   
  7. /* linked list of VM areas per task, sorted by address */  
  8. struct vm_area_struct *vm_next;  
  9.   
  10. pgprot_t vm_page_prot;  
  11. unsigned long vm_flags;  
  12.   
  13. /* AVL tree of VM areas per task, sorted by address */  
  14. short vm_avl_height;  
  15. struct vm_area_struct * vm_avl_left;  
  16. struct vm_area_struct * vm_avl_right;  
  17.   
  18. /* For areas with an address space and backing store, 
  19. * font-size: 10px;">vm_area_struct *vm_next_share; 
  20. struct vm_area_struct **vm_pprev_share; 
  21.  
  22. struct vm_operations_struct * vm_ops; 
  23. unsigned long vm_pgoff; /* offset in PAGE_SIZE units, *not* PAGE_CACHE_SIZE */  
  24. struct file * vm_file;  
  25. unsigned long vm_raend;  
  26. void * vm_private_data; /* was vm_pte (shared mem) */  
  27. }; </span>  


vm_area_struct结构所描述的虚存空间以vm_start、vm_end成员表示,它们分别保存了该虚存空间的首地址和末地址后第一个字节的地址,以字节为单位,所以虚存空间范围可以用[vm_start, vm_end)表示。

  通常,进程所使用到的虚存空间不连续,且各部分虚存空间的访问属性也可能不同。所以一个进程的虚存空间需要多个vm_area_struct结构来描述。在vm_area_struct结构的数目较少的时候,各个vm_area_struct按照升序排序,以单链表的形式组织数据(通过vm_next指针指向下一个vm_area_struct结构)。但是当vm_area_struct结构的数据较多的时候,仍然采用链表组织的化,势必会影响到它的搜索速度。针对这个问题,vm_area_struct还添加了vm_avl_hight(树高)、vm_avl_left(左子节点)、vm_avl_right(右子节点)三个成员来实现AVL树,以提高vm_area_struct的搜索速度。

  假如该vm_area_struct描述的是一个文件映射的虚存空间,成员vm_file便指向被映射的文件的file结构,vm_pgoff是该虚存空间起始地址在vm_file文件里面的文件偏移,单位为物理页面。

  一个程序可以选择MAP_SHARED或MAP_PRIVATE共享模式将一个文件的某部分数据映射到自己的虚存空间里面。这两种映射方式的区别在于:MAP_SHARED映射后在内存中对该虚存空间的数据进行修改会影响到其他以同样方式映射该部分数据的进程,并且该修改还会被写回文件里面去,也就是这些进程实际上是在共用这些数据。而MAP_PRIVATE映射后对该虚存空间的数据进行修改不会影响到其他进程,也不会被写入文件中。

  来自不同进程,所有映射同一个文件的vm_area_struct结构都会根据其共享模式分别组织成两个链表。链表的链头分别是:vm_file->f_dentry->d_inode->i_mapping->i_mmap_shared,vm_file->f_dentry->d_inode->i_mapping->i_mmap。而vm_area_struct结构中的vm_next_share指向链表中的下一个节点;vm_pprev_share是一个指针的指针,它的值是链表中上一个节点(头节点)结构的vm_next_share(i_mmap_shared或i_mmap)的地址。

  进程建立vm_area_struct结构后,只是说明进程可以访问这个虚存空间,但有可能还没有分配相应的物理页面并建立好页面映射。在这种情况下,若是进程执行中有指令需要访问该虚存空间中的内存,便会产生一次缺页异常。这时候,就需要通过vm_area_struct结构里面的vm_ops->nopage所指向的函数来将产生缺页异常的地址对应的文件数据读取出来。

  vm_flags主要保存了进程对该虚存空间的访问权限,然后还有一些其他的属性。vm_page_prot是新映射的物理页面的页表项pgprot的默认值。


=======================================

原文:http://oss.org.cn/kernel-book/ch06/6.4.2.htm

6.4.2 进程的虚拟空间

如前所述,每个进程拥有3G字节的用户虚存空间。但是,这并不意味着用户进程在这3G的范围内可以任意使用,因为虚存空间最终得映射到某个物理存储空间(内存或磁盘空间),才真正可以使用。

那么,内核怎样管理每个进程3G的虚存空间呢?概括地说,用户进程经过编译、链接后形成的映象文件有一个代码段和数据段(包括data段和bss段),其中代码段在下,数据段在上。数据段中包括了所有静态分配的数据空间,即全局变量和所有申明为static的局部变量,这些空间是进程所必需的基本要求,这些空间是在建立一个进程的运行映像时就分配好的。除此之外,堆栈使用的空间也属于基本要求,所以也是在建立进程时就分配好的,如图6.16所示:

 









 

 

 

 


                                   

进程虚拟空间(3G)

 

 

 

       

 图6.16  进程虚拟空间的划分

由图可以看出,堆栈空间安排在虚存空间的顶部,运行时由顶向下延伸;代码段和数据段则在低部,运行时并不向上延伸。从数据段的顶部到堆栈段地址的下沿这个区间是一个巨大的空洞,这就是进程在运行时可以动态分配的空间(也叫动态内存)。

进程在运行过程中,可能会通过系统调用mmap动态申请虚拟内存或释放已分配的内存,新分配的虚拟内存必须和进程已有的虚拟地址链接起来才能使用;Linux 进程可以使用共享的程序库代码或数据,这样,共享库的代码和数据也需要链接到进程已有的虚拟地址中。在后面我们还会看到,系统利用了请页机制来避免对物理内存的过分使用。因为进程可能会访问当前不在物理内存中的虚拟内存,这时,操作系统通过请页机制把数据从磁盘装入到物理内存。为此,系统需要修改进程的页表,以便标志虚拟页已经装入到物理内存中,同时,Linux 还需要知道进程虚拟空间中任何一个虚拟地址区间的来源和当前所在位置,以便能够装入物理内存。

由于上面这些原因,Linux 采用了比较复杂的数据结构跟踪进程的虚拟地址。在进程的 task_struct结构中包含一个指向 mm_struct 结构的指针。进程的mm_struct 则包含装入的可执行映象信息以及进程的页目录指针pgd。该结构还包含有指向 vm_area_struct 结构的几个指针,每个 vm_area_struct 代表进程的一个虚拟地址区间。

图6.17  进程虚拟地址示意图

图 6.17是某个进程的虚拟内存简化布局以及相应的几个数据结构之间的关系。从图中可以看出,系统以虚拟内存地址的降序排列 vm_area_struct。在进程的运行过程中,Linux 要经常为进程分配虚拟地址区间,或者因为从交换文件中装入内存而修改虚拟地址信息,因此,vm_area_struct结构的访问时间就成了性能的关键因素。为此,除链表结构外,Linux 还利用 红黑(Red_black)树来组织 vm_area_struct。通过这种树结构,Linux 可以快速定位某个虚拟内存地址。

当进程利用系统调用动态分配内存时,Linux 首先分配一个 vm_area_struct 结构,并链接到进程的虚拟内存链表中,当后续的指令访问这一内存区间时,因为 Linux 尚未分配相应的物理内存,因此处理器在进行虚拟地址到物理地址的映射时会产生缺页异常(请看请页机制),当 Linux 处理这一缺页异常时,就可以为新的虚拟内存区分配实际的物理内存。

在内核中,经常会用到这样的操作:给定一个属于某个进程的虚拟地址,要求找到其所属的区间以及vma_area_struct结构,这是由find_vma()来实现的,其实现代码在mm/mmap.c中:

 

   * Look up the first VMA which satisfies  addr< vm_end,  NULL if none. */

struct vm_area_struct * find_vma(struct mm_struct *mm, unsigned long addr)

{

        struct vm_area_struct *vma = NULL;

 

        if (mm) {

                /* Check the cache first. */

                /* (Cache hit rate is typically around 35%.) */

               vma = mm->mmap_cache;

                if (!(vma && vma->vm_end > addr&& vma->vm_start <= addr)) {

                       rb_node_t* rb_node;

 

                        rb_node = mm->mm_rb.rb_node;

                        vma = NULL;

 

                       while (rb_node) {

                              struct vm_area_struct * vma_tmp;

 

                             vma_tmp = rb_entry(rb_node, structvm_area_struct, vm_rb);

 

                              if (vma_tmp->vm_end > addr) {

                                        vma = vma_tmp;

                                       if (vma_tmp->vm_start <= addr)

                                               break;

                                      rb_node = rb_node->rb_left;

                                } else

                                        rb_node= rb_node->rb_right;

                       }

                        if (vma)

                                mm->mmap_cache = vma;

               }

        }

        return vma;

}

   这个函数比较简单,我们对其主要点给予解释:

·      参数的含义:函数有两个参数,一个是指向mm_struct结构的指针,这表示一个进程的虚拟地址空间;一个是地址,表示该进程虚拟地址空间中的一个地址。

·      条件检查:首先检查这个地址是否恰好落在上一次(最近一次)所访问的区间中。根据代码作者的注释,命中率一般达到35%,这也是mm_struct结构中设置mmap_cache指针的原因。如果没有命中,那就要在红黑树中进行搜索,红黑树与AVL树类似。

·      查找节点:如果已经建立了红黑树结构(rb_rode不为空),就在红黑树中搜索。

·      如果找到指定地址所在的区间,就把mmap_cache指针设置成指向所找到的vm_area_struct结构。

·      如果没有找到,说明该地址所在的区间还没有建立,此时,就得建立一个新的虚拟区间,再调用insert_vm_struct()函数将新建立的区间插入到vm_struct中的线性队列或红黑树中。

 

=====================================================

原文:http://bbs.chinaunix.net/archiver/?tid-2058683.html

Linux sys_exec中可执行文件映射的建立及读取

 

   1. 创建一个vm_area_struct;
   2. 圈定一个虚用户空间,将其起始结束地址(elf段中已设置好)保存到vm_start和vm_end中;
   3. 将磁盘file句柄保存在vm_file中;
   4. 将对应段在磁盘file中的偏移值(elf段中已设置好)保存在vm_pgoff中;
   5. 将操作该磁盘file的磁盘操作函数保存在vm_ops中;
   6. 注意这里没有为对应的页目录表项创建页表,更不存在设置页表项了;

                          §                               § 
                          §                        +------§->+--------------+
                          §                        |      §  |  Disk file   |
                          §                        |      §  |              |
                          §    +----------------+  |  +---§->|--------------|
                          §    | vm_area_struct |  |  |   §  | Seg Content  |
                          §    |----------------|  |  |   §  |--------------|
      +----------------+<-§-------- vm_start    |  |  |   §  |              |
      | 圈定了一个未映  | §  +----- vm_end      |  |  |   §  |              |
      | 射到物理内存的  | §  | |    vm_file--------+  |   §  +--------------+
      | vm_area_struct  | §  | |    vm_pgoff ---------+   § 
      +----------------+<-§--+ |    vm_ops --------+      § 
                          §    |                |  |      § 
                          §    +----------------+  |      § 
                          §                        |      §
                          § +----------------------+      §
                          § |                             §
                          § +->+-----------------------+  §
                          §    |   file_private_map    |  §
                          §    |-----------------------|  §
                          §    | nopage:filemap_nopage |  §
                          §    |        .....          |  §
                          §    +-----------------------+  §
            user space    §           kernel              §     disk 
Linux设备驱动:mmap设备操作 总结:mmap设备方法实现将用户空间的一段内存关联到设备内存上,对用户空间的读写就相当于对字符设备的读写;不是所有的设备都能进行mmap抽象,比如像串口和其他面向流的设备就不能做mmap抽象。一个进程的内存映象由下面几个部分组成:程序代码、数据、BSS和栈区域,以及内存映射的区域。功能:负责把文件内容映射到进程的虚拟地址空间,通过对这段内存的读取和修改来实现对文件的读取和修改,而不需要再调用read和write;mmap设备方法所需要做的就是建立虚拟地址到物理地址的页表(虚拟地址和设备的物理地址的。 阅读详情

相关推荐

Linux系统 mmap 存储映射

括号中表示预期行为,括号外部的表示在LINUX系统中的实际行为,比如组合SHARED/EXEC的读行为,对于一个可执行的共享地址来说,没有给与PROT_READ属性,预期当然不可读,但是由于CPU执行上面的代码,必须要进行读操作,而实际的硬件架构和及并没有区分执行读和其它方式的读,所以,实际上对于这样的内存,仍然是可读的。从上图中可以看到,这段匿名区域(可能是MMAP区域,现在的MALLOC都用MMAP实现)地址是向下增长的,像栈一样,就像前面提到的第二种情况,这是在哪里控制的呢?

tugouxp的专栏 2470

linux内核编程之二:vm_area_struct结构体

结构体struct vm_area_struct 它表示的是一块连续的虚拟地址空间区域,给进程使用的,地址空间范围是0~3G,对应的物理页面都可以是不连续的 结构体struct vm_struct 表示一块连续的虚拟地址空间区域。给内核使用,地址空间范围是(3G + 896M + 8M) ~ 4G,对应的物理页面都可以是不连续的 两者的区别是什么呢? 在Linux中,struct vm_area_struct表示的虚拟地址是给进程使用的,而struct vm_struct表示的虚拟地址是给内...

随意的风的专栏 6806

linux内核学习笔记-struct vm_area_struct

vm_area_struct linux 内核使用 vm_area_struct 结构来表示一个独立的虚拟内存区域,由于每个不同地址的虚拟内存区域功能和内部机制都不同,因此 一个进程使用多个vm_area_struct结构来分别表示不同类型的虚拟内存区域,包括虚拟内存的起始和结束地址,以及内存的访问权限等 。各个vm_area_struct结构使用链表或者树形结构链接,方便进程快速访问,如下图所示: Linux内核中,关于虚存管理的 最基本的管理单元 应该是 struct vm_area_struct 了

的博客 1392

内核解读之内存管理(12)进程虚拟内存管理 vm_area_struct

在32位的系统上,线性地址空间可达到4GB,这4GB一般按照3:1的比例进行分配,也就是说用户进程享有前3GB线性地址空间,而内核独享最后1GB线性地址空间。由于虚拟内存的引入,每个进程都可拥有3GB的虚拟内存,并且用户进程之间的地址空间是互不可见、互不影响的,也就是说即使两个进程对同一个地址进行操作,也不会产生问题。

二进制君 2429

【低空经济】低空无人机公共测试场与验证基地设计方案

公共测试场与验证基地是为低空无人机相关技术的研发、测试与应用提供一个系统性的平台。在无人机产业蓬勃发展的背景下,建设一个配备完善、功能齐全的公共测试场与验证基地显得尤为重要。该基地不仅可以作为无人机的测试和验证场地,还可以为相关企业、科研机构以及政府部门提供技术支持和服务。因此,为此基地的设计方案必须综合考虑功能性、安全性、灵活性与可持续性等多方面的因素。首先,公共测试场需划分为多个专用区域,以便满足不同类型无人机的测试需求。这包括低空飞行区域、紧急着陆区、操控模拟区和监测与数据采集区等。

2502_92579126的博客 1596

AI提示词实战:用EARS语法5步搞定产品需求拆解(附完整案例)

本文详细介绍了如何运用EARS语法将模糊的产品需求进行原子化拆解,转化为清晰、可执行的结构化指令。通过一个完整的自由职业者项目管理工具案例,演示了从原始需求分析到构建增强AI提示词的五步实战流程,帮助产品经理和技术人员实现高效、精准的需求传达与协作。

nokia的博客 1029

Linux 内核 vm_area_struct与vm_struct

Linux 内核 vm_area_struct与vm_struct,缺页异常,Swap

tangzhangyin的专栏 1133

Dify-前端本地运行-单点登录

本文介绍了如何在已部署Dify的系统中实现AI应用跳转及页面定制化改造。通过iframe跳转无法满足甲方需求后,作者对Dify前端源码进行了本地化二次开发,主要步骤包括:1) 按照官方文档搭建本地开发环境;2) 修改.env配置文件连接部署好的后端服务;3) 隐藏侧边栏和头部导航栏;4) 实现单点登录功能,通过URL参数获取用户邮箱自动登录。过程中解决了请求拦截导致的登录校验问题,最终达成仅保留对话框界面并同步用户信息的需求。该方案涉及Next.js框架和React技术的应用,为类似定制化需求提供了参

weixin_43163457的博客 3224

【mm_struct 与 vm_area_struct 关系详解】

结构体角色管理范围关键信息mm_struct总经理整个进程的虚拟地址空间页表根 (pgd)、VMA链表/红黑树头、整体布局部门经理一段连续的虚拟内存区域区域起止地址、访问权限、映射的文件简单来说,mm_struct是总纲,而是细则。内核通过这种两级管理机制,既能够宏观掌控整个地址空间,又能够高效、精细地管理每一片具有不同属性的内存区域。

Beaman的博客 1049

精确时钟同步协议ptp/IEEE-1588v2协议-------(1)简介

ptp, 1588V2, IEEE-1588, 精确时钟同步协议

meihualing的专栏 5352

SAP_PP模块跑完 MRP,MD04 里却看不到“计划订单”?排查这 3 个最容易被忽略的主数据参数

MRP 是 SAP 逻辑最严密的模块之一,它绝不会随机罢工。当 MD04 里看不到计划订单时,请不要怀疑系统的计算能力。99% 的情况,都是因为我们给系统下达了矛盾的指令:一边告诉它“我有需求”,一边却通过主数据告诉它“不要计划”、“不要触发”或者“我是冻结的”。掌握这 3 个排查点,你就能在 5 分钟内解决大部分“MRP 失灵”的悬案,成为用户眼中的“系统神医”。

我小时候很黑的博客 588

task_struct 结构,mm_struct 结构, vm_area_struct 结构

task_struct 结构,mm_struct 结构, vm_area_struct 结构 1、task_struct 每个进程在内核中都有一个进程控制块(PCB)来维护进程相关的信息,Linux内核的进程控制块是task_struct结构体。 位置:<include\linux\sched.h> - 593行 部分代码如下: struct task_struct { /*...*/ struct mm_struct *mm; struct mm_struct *activ

FF_programming的博客 4238

Sigrity SPEED2000 General SI Simulation模式如何进行信号仿真分析操作指导-DDR

本例是几个简单的板载DDR颗粒的结构,本例中使用General SI Simulation模式仿真DDR信号,结构拓扑如下,Addcmd,clk,cke都是T拓扑。Sigrity SPEED2000 General SI Simulation模式可以对信号进行仿真分析,仿真将电源视为理想电源,以下图为例进行说明。DQS的接收端模型设置为DQS_34_ODT60_1333。模式如何进行信号仿真分析操作指导-DDR。附带驱动和接收端的IBIS模型。

weixin_54787054的博客 510

【Linux】【进程】进程管理task_struct,mm_struct,vm_area_struct

每个 vm_area_struct 结构对应于虚拟内存空间中的唯一虚拟内存区域 VMA,vm_start 指向了这块虚拟内存区域的起始地址(最低地址),vm_start 本身包含在这块虚拟内存区域内。保存了上一次找到的vma,根据局部性原理,下一次要用到的vma正好是上次使用的vma的可能性是比较大的,因此使用find_vma()函数查找vma时,会首先从mmap_cache中找,找到了就直接返回。stack_vm是栈中所映射的内存页数目,这些变量均是表示进程虚拟内存空间中的虚拟内存使用情况。

m0_64014551的博客 1494

VMware ESXi 直通GPU

虚拟机需要独享GPU资源,那么就需要用到DirectPath I/O (直通),ESXi hypervisor 把 GPU 设备直接映射成虚机中的 GPU 设备,供应用使用。注意,内存注意一定要勾选预留,否则开机后报错如下:无法打开虚拟机 win10 的电源。1.ESXi主机,管理,硬件,PCI设备,勾选GPU卡,切换直通,会提示要求重启主机,重启主机之后,该GPU设备直通一栏显示为“活动”。先确认虚拟机是否EFI引导:编辑虚拟机 - 虚拟机选项 - 引导选项 - 固件 - EFI。

liwension的博客 6293

【RH850/U2A】:HSM与APP通信(中断方式)

HSM与APP通信(中断方式)

1992

struct vm_area_struct 简介

每个进程都有一个或多个虚拟内存区域,这些区域用于管理进程的内存分配,包括代码段、数据段、堆、栈和映射的文件等。在内核中,struct vm_area_struct 的使用通常与内存管理相关的函数一起进行。内存映射: 当使用 mmap() 系统调用映射文件或设备内存到进程的虚拟地址空间时,内核会创建相应的 vm_area_struct 实例。遍历虚拟内存区域: 内核可以通过 vm_area_struct 的链表结构,遍历进程的所有虚拟内存区域,以执行各种内存管理操作。

ruofengdeyu的博客 571

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

struct vmap_area和struct vm_area_struct

在Linux中,struct vm_area_struct表示的虚拟地址是给进程使用的,而struct vmap_area表示的虚拟地址是给内核使用的,它们对应的物理页面都可以是不连续的。在32位系统中,struct vm_area_struct表示的地址空间范围是0~3G,而struct vmap_area表示的地址空间范围是(3G + 896M + 8M) ~ 4G。struct vm_struct表示的地址空间范围为什么不是3G~4G呢?原来,3G ~ (3G + 896M)范围的地址是用来映射连续的

oqqYuJi12345678的博客 1506

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

linux kernel struct 之 vm_area_struct

linux kernel struct 之 vm_area_struct

xiaozhi 583

task_struct和mm_struct和vm_area_struct和vm_operation_struct

1. MM_STRUCT结构  mm_strcut 用来描述一个进程的虚拟地址空间,在/include/linux/sched.h 中描述如下: struct mm_struct {          struct vm_area_struct * mmap;           /*指向虚拟区间(VMA)链表 */          rb_root_t mm_rb;        /

wxie的Linux人生 1万+

源码之linux进程:vm_area_struct与虚拟内存的关系

前言 在虚拟内存中,我提到了linux虚拟内存区域的结构,但具体其是如何在linux中表示与实现的呢? 我利用了linux2.6的源码进行了浅显的分析。 正文 task_struct 在linux中,进程控制块即PCB的结构为task_struct,我们以linux2.6为例,其源码如下: struct task_struct { //表示进程当前运行状态 //volatile避免...

Hpsyche的博客 2352

struct vm_struct和struct vm_area_struct

内存映射信息放在vma参数中,注意,这里的vma的数据类型是struct vm_area_struct,它表示的是一块连续的虚拟地址空间区域,在函数变量声明的地方,我们还看到有一个类似的结构体struct vm_struct,这个数据结构也是表示一块连续的虚拟地址空间区域,那么,这两者的区别是什么呢?在Linux中,struct vm_area_struct表示的虚拟地址是给进程使用的,而stru

hj5225244的专栏 5452

vm_area_struct结构

每一个用户态进程都有独立的页目录,pgd就是页目录指针。进程的3GB虚拟地址空间不可能是全部映射到物理内存中的,所以mm结构的vm_area_struct记录了虚拟地址空间的使用情况。 注意:page结构记录了物理内存的使用情况 struct vm_area_struct {     struct mm_struct * vm_mm;       unsigned long vm_start;         unsigned long vm_end;            struct vm_a

3193

struct vm_area_struct

原文:http://blog.youkuaiyun.com/ywf861029/article/details/6114794 Linux内核中,关于虚存管理的最基本的管理单元应该是struct vm_area_struct了,它描述的是一段连续的、具有相同访问属性的虚存空间,该虚存空间的大小为物理内存页面的整数倍。   下面是struct vm_area_struct结构体的定义

pursue的专栏 754

vm_area_struc 和 vm_struct

vm_area_struct 用于表示0~3G的空间中一段连续的虚拟地址空间,是给user space的process使用. vm_struct 是kernel space 除low memory中用于表示连续的虚拟地址空间,常用于vmalloc/vfree的操作 struct vm_struct {     struct vm_struct    *next; //表示下一个vm,所有的v

jason的笔记 4701
上一篇: Linux RUID EUID SUID
下一篇: Linux 进程管理
计算机与认知
博客等级 码龄14年 31粉丝 19原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值