首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Linux 内核 内存管理】内存映射相关数据结构 ⑥ ( 文件映射 虚拟内存区域 | vm_area_struct | vm_operations_struct | 匿名映射 虚拟内存区域 )

文章目录 一、文件映射 虚拟内存区域 1、文件映射 虚拟内存区域 的 vm_ops 成员 2、文件映射 虚拟内存区域 的 vm_file 成员 3、文件映射 虚拟内存区域 图示 二、匿名映射 虚拟内存区域...一、文件映射 虚拟内存区域 ---- " 文件映射 " 的 " 虚拟内存区域 " vm_area_struct 结构体 的 数据结构表示形式如下 ; 1、文件映射 虚拟内存区域 的 vm_ops 成员...deal with this struct. */ const struct vm_operations_struct *vm_ops; 参考 【Linux 内核 内存管理】内存映射相关数据结构 ④...; 成员 指向 文件索引节点 inode 实例 ; vm_area_struct 结构体 中的 vm_file 成员 是 " 内存映射 “ 中的 ” 文件映射 " 类型中 被映射的 文件 , 如果是 "...匿名映射 " 类型的 " 内存映射 " , 该成员为 NULL ; struct file * vm_file; /* File we map to (can be NULL). */ 参考 【Linux

99030
您找到你想要的搜索结果了吗?
是的
没有找到

Linux下内存空间分配、物理地址与虚拟地址映射

返回值:解除成功返回0,否则返回-1 2.2 Linux内核的mmap接口 2.2.1 内核描述虚拟内存的结构体 Linux内核中使用结构体vm_area_struct来描述虚拟内存的区域,其中几个主要成员如下...: unsigned long vm_start 虚拟内存区域起始地址 unsigned long vm_end 虚拟内存区域结束地址 unsigned long vm_flags 该区域的标志 该结构体定义在...|= VM_IO;//表示对设备IO空间的映射 vma->vm_flags |= VM_RESERVED;//标志该内存区不能被换出,在设备驱动中虚拟页和物理页的关系应该是长期的,应该保留起来,不能随便被别的虚拟页换出...,//与物理内存对应的页帧号,物理地址右移12位 //说明: 向后面移动12位相当于除4096 ,为了得到页编号 vma->vm_end - vma->vm_start,//映射区域大小,一般是页大小的整数倍...IO地址; size:要映射的空间的大小; flags:要映射的IO空间的和权限有关的标志; phys_addr:是要映射的物理地址 size:是要映射的长度,单位是字节 头文件:#include <linux

2.9K31

Linux 内核 内存管理】虚拟地址空间布局架构 ⑦ ( vm_area_struct 结构体成员分析 | vm_start | vm_end | vm_next | vm_prev |vm_rb)

文章目录 一、vm_area_struct 结构体成员分析 二、vm_area_struct 结构体完整源码 一、vm_area_struct 结构体成员分析 ---- vm_area_struct 结构体中相关成员解析...: unsigned long vm_start 成员 : 虚拟内存空间 起始地址 ; unsigned long vm_start; /* Our start address within vm_mm.... */ unsigned long vm_end 成员 : 虚拟内存空间 终止地址 后的 第一个字节 ; unsigned long vm_end; /* The first byte after...our end address within vm_mm. */ struct vm_area_struct *vm_next 成员 : 是 vm_area_struct 链表中 ,...of VM areas per task, sorted by address */ struct vm_area_struct *vm_next, *vm_prev; struct rb_node

1.4K20

Linux 内核 内存管理】内存映射相关数据结构 ② ( vm_area_struct 结构体成员分析 | vm_mm 成员 | vm_page_prot 成员 | vm_flags 成员 )

文章目录 一、vm_area_struct 结构体成员分析 1、vm_mm 成员 2、vm_page_prot 成员 3、vm_flags 成员 二、vm_area_struct 结构体完整源码 在之前的博客...【Linux 内核 内存管理】虚拟地址空间布局架构 ⑦ ( vm_area_struct 结构体成员分析 | vm_start | vm_end | vm_next | vm_prev |vm_rb)...中 , 分析了 vm_start vm_end vm_next vm_prev vm_rb 这 5 个结构体成员的含义 , 下面继续分析剩余结构体成员的含义 ; 一、vm_area_struct...所属的 " 进程的用户虚拟地址空间 " mm_struct 内存描述符结构体 ; vm_area_struct 结构体 是 " 虚拟内存区域 " ; mm_struct 结构体 是 " 进程的用户虚拟地址空间.... */ 虚拟内存 相关的标志位定义在 linux-4.12\include\linux\mm.h#159 位置 上述 unsigned long vm_flags 可设置的标志位有 VM_READ VM_WRITE

3.9K10

Linux 内核 内存管理】内存映射相关数据结构 ⑤ ( vm_area_struct 结构体成员分析 | vm_pgoff 成员 | vm_file 成员 | vm_private_data )

在博客 【Linux 内核 内存管理】虚拟地址空间布局架构 ⑦ ( vm_area_struct 结构体成员分析 | vm_start | vm_end | vm_next | vm_prev |vm_rb...) 中 , 分析了 vm_start vm_end vm_next vm_prev vm_rb 这 5 个结构体成员作用 ; 在博客 【Linux 内核 内存管理】内存映射相关数据结构 ② ( vm_area_struct...vm_flags 成员作用 ; 在博客 【Linux 内核 内存管理】内存映射相关数据结构 ③ ( vm_area_struct 结构体成员分析 | shared 成员 | anon_vma_chain...*/ 2、vm_file 成员 vm_area_struct 结构体 中的 vm_file 成员 是 " 内存映射 “ 中的 ” 文件映射 " 类型中 被映射的 文件 , 如果是 " 匿名映射 " 类型的...成员 vm_area_struct 结构体 中的 vm_private_data 成员 用于指向 " 进程 “ 的 ” 用户虚拟地址空间 " 中的 " 私有数据 " ; void * vm_private_data

2.9K20

LinuxVMLinux的安装

Win7系统  Win10系统 2)新建虚拟机 3)新建虚拟机向导  4)创建虚拟空白光盘  5)安装Linux系统对应的CentOS版  6)虚拟机命名和定位磁盘位置  7)处理器配置,...16)VM设置 17)加载ISO   18)加电并安装配置CentOS  19)加电后进入倒计时页面 点击进入虚拟机屏幕,回车。...此外,在Ctrl+Alt可以实现Windows主机和VM之间窗口的切换 20)CentOS7欢迎页面  21)选择简体中文进行安装 22)选择语言键盘,日期和时间  23)软件选择  如果选择最小安装是纯命令行的界面...,ifconfig查询ip地址的命令没有,vim编辑器也没用, 需要执行以下命令安装: yum install -y net-tools yum install -y vim 24)选择自动分区、不启用

5.2K20

内存管理概述、内存分配与释放、地址映射机制(mm_struct, vm_area_struct)、mallocfree 的实现

(1)内存映射模块(mmap):负责把磁盘文件的逻辑地址映射到虚拟地址,以及把虚拟地址映射到物理地址。...(二)、内核空间和用户空间 Linux 简化了分段机制,使得虚拟地址与线性地址总是一致,因此,Linux 的虚拟地址空间也为0~4G 字节。Linux 内核将这4G 字节的空间分为两部分。...首先内存管理程序通过映射机制把用户程序的逻辑地址映射到物理地址,在用户程序运行时如果发现程序中要用的虚地址没有对应的物理内存时,就发出了请页要求①;如果有空闲的内存可供分配,就请求分配内存②(于是用到了内存的分配和回收...另外在地址映射中要通过TLB(翻译后援存储器)来寻找物理页⑧;交换机制中也要用到交换缓存⑥,并且把物理页内容交换到交换文件中后也要修改页表来映射文件地址⑦。...二、内存分配与释放 在Linux 中,CPU 不能按物理地址来访问存储空间,而必须使用虚拟地址;因此,对于内存页面的管理,通常是先在虚存空间中分配一个虚存区间,然后才根据需要为此区间分配相应的物理页面并建立起映射

2.4K100

Linux 内核 内存管理】内存映射相关数据结构 ④ ( vm_area_struct 结构体成员分析 | vm_ops 成员 | vm_operations_struct 结构体成员分析 )

四、vm_operations_struct 结构体完整源码 在博客 【Linux 内核 内存管理】虚拟地址空间布局架构 ⑦ ( vm_area_struct 结构体成员分析 | vm_start |...【Linux 内核 内存管理】内存映射相关数据结构 ② ( vm_area_struct 结构体成员分析 | vm_mm 成员 | vm_page_prot 成员 | vm_flags 成员 ) 中..., 分析了 vm_area_struct 结构体中的 vm_mm vm_page_prot vm_flags 成员作用 ; 在博客 【Linux 内核 内存管理】内存映射相关数据结构 ③ ( vm_area_struct...函数 移动 " 虚拟内存区域 " 时调用 ; int (*mremap)(struct vm_area_struct * area); 4、fault 函数指针 在 【Linux 内核 内存管理】内存映射原理...)(struct vm_fault *vmf, enum page_entry_size pe_size); 6、map_pages 函数指针 在 【Linux 内核 内存管理】内存映射原理 ② ( 内存映射概念

1.7K30

文件地址映射之yaffs_GetTnode

yaffs文件系统在更新文件数据的时候,会分配一块新的chunk,也就是说,同样的文件偏移地址,在该地址上的数据更新前和更新后,其对应的flash上的存储地址是不一样的。...那么,如何根据文件内偏移地址确定flash存储地址呢?最容易想到的办法,就是在内存中维护一张映射表。...但是这个方法有几个问题,首先就是在做seek操作的时候,要从表项0开始按序搜索,对于大文件会消耗很多时间;其次是在建立映射表的时候,无法预计文件大小的变化,于是就可能在后来的操作中频繁释放分配内存以改变表长...yaffs的解决方法是将这张大的映射表拆分成若干个等长的小表,并将这些小表组织成树的结构,方便管理。...先看映射树的节点的分配。

74260

DPDK巨页地址管理Linux内核内存管理内存映射pagemaprdma内存注册

DPDK巨页地址管理/Linux内核内存管理/内存映射/pagemap/rdma内存/注册术语PFN: 物理地址对应的页帧号:pfn = pte_pfn(*pte)INFINIBAND_USER_MEM...保留默认大小的大页的最简单方法是使用 procfs 接口: echo 20 > /proc/sys/vm/nr_hugepagesHugetlbfs  本文的例子摘自 Linux 内核源码中提供的有关说明文档...,寻找一段空闲的满足要求的连续虚拟地址3、为此虚拟区分配一个vm_area_struct结构,接着对这个结构的各个域进行了初始化4、将新建的虚拟区结构(vm_area_struct)插入进程的虚拟地址区域链表或树中...(二)调用内核空间的系统调用函数mmap(不同于用户空间函数),实现文件物理地址和进程虚拟地址的一一映射关系5、为映射分配了新的虚拟地址区域后,通过待映射的文件指针,在文件描述符表中找到对应的文件描述符...9、进程的读或写操作访问虚拟地址空间这一段映射地址,通过查询页表,发现这一段地址并不在物理页面上。因为目前只建立了地址映射,真正的硬盘数据还没有拷贝到内存中,因此引发缺页异常。

23210

Linux 内核 内存管理】内存映射原理 ① ( 物理地址空间 | 外围设备寄存器 | 外围设备寄存器的物理地址 映射到 虚拟地址空间 )

文章目录 一、物理地址空间 二、外围设备寄存器 三、外围设备寄存器物理地址 映射到 虚拟地址空间 一、物理地址空间 ---- " 物理地址空间 “ 是 CPU 处理器 在 ” 总线 " 上 访问内存的地址..., 参考 【Linux 内核 内存管理】Linux 内核内存布局 ④ ( ARM64 架构体系内存分布 | 内核启动源码 start_kernel | 内存初始化 mm_init | mem_init...寄存器 分为 3 大类 : 控制寄存器 状态寄存器 数据寄存器 外围设备寄存器 有 2 种 编址方式 : ① I/O 映射方式 , I/O-Mapped ② 内存映射方式 , Memory-Mapped...外围设备寄存器 一般是 连续编址 的 , 三、外围设备寄存器物理地址 映射到 虚拟地址空间 用户空间 的 应用进程 , 访问 " 外围设备寄存器 " 只能通过 " 虚拟地址 " 实现 , Linux...内核 提供了 相关 API 函数 , 将 " 外围设备寄存器 “ 对应的 ” 物理地址映射到了 ” 虚拟地址空间 " 中 ;

3.1K20

Linux内存映射——mmap

Linux提供了mmap()函数,用来映射物理内存。...假如该vm_area_struct描述的是一个文件映射的虚存空间,成员vm_file便指向被映射的文件的file结构,vm_pgoff是该虚存空间起始地址vm_file文件里面的文件偏移,单位为物理页面...图3.2 进程虚拟地址示意图 因此,mmap系统调用所完成的工作就是准备这样一段虚存空间,并建立vm_area_struct结构体,将其传给具体的设备驱动程序 2 建立虚拟地址空间和文件或设备的物理地址之间的映射...struct file *,struct vm_area_struct *); linux有2个方法建立页表: (1) 使用remap_pfn_range一次建立所有页表....第三个是进程虚拟地址,这个地址处于用户空间。而对于mmap函数映射的是物理地址到进程虚拟地址,而不是把物理地址映射到内核虚拟地址。而ioremap函数是将物理地址映射为内核虚拟地址

5.5K10
领券