【IT专家】使用mmap实现文件映射 您所在的位置:网站首页 3050能玩巫师3吗 【IT专家】使用mmap实现文件映射

【IT专家】使用mmap实现文件映射

2023-03-24 15:41| 来源: 网络整理| 查看: 265

本文由我司收集整编,推荐下载,如有疑问,请与我司联系

 

使用

 

mmap 

实现文件映射

 

2011/12/09 2233 

文件映射

 

 

 

传统文件访问方式是

首先用

 

open 

系统调用打开文件

然后使用

 

read, write 

以及

 

lseek 

等调用进行顺序或者随即的

 

I/O. 

这种方式是非常低效的

每一次

 

I/O 

操作都需

 

要一次系统调用

另外

如果若干个进程访问同一个文件

每个进程都要在自己的地

 

址空间维护一个副本

浪费了内存空间

.

系统调用

 

mmap()

可以将某文件映射至内存

 

(

进程空间

)

,如此可以把对文件的操作转为对内存的操作,以此避免更多的

 

lseek() 

 

read()

write()

操作,这点对于大文件或者频繁访问的文件而言尤其受益。

 

 

 

文件映射一方面给用户提供了一组措施

好似用户将文件映射到自己地址空间的

 

某个部分

使用简单的内存访问指令读写文件;另一方面

它也可以用于内核的基本

 

组织模式

在这种模式种

内核将整个地址空间视为诸如文件之类的一组不同对象的

 

映射

 

 

2Linux 

 

VM 

的实现

 

 

 

一个进程应该包括一个

 

mm_struct(memory manage struct), 

该结构是进程虚拟地

 

址空间的抽象描述

里面包括了进程虚拟空间的一些管理信息

start_code, 

end_code, 

start_data, 

end_data, 

start_brk, 

end_brk 

等等信息

另外

也有一个指向进程虚存区表

 

(vm_area_struct: virtual memory area)

的指针

该链是按照虚拟地址的增长顺序排列的

 

Linux 

进程的地址空间被分作许多区

(vma), 

每个区

(vma)

都对应虚拟地址空间上一

 

段连续的区域

, vma 

是可以被共享和保护的独立实体

这里的

 

vma 

就是前面提到的内

 

存对象

下面是

 

vm_area_struct 

的结构

其中

前半部分是公共的

与类型无关的一

 

些数据成员

指向

 

mm_struct 

的指针

地址范围等等

后半部分则是与类型相关

 

的成员

其中最重要的是一个指向

 

vm_operation_struct 

向量表的指针

 

vm_ops, 

vm_pos 

向量表是一组虚函数

定义了与

 

vma 

类型无关的接口

每一个特定的子类

即每种

 

vma 

类型都必须在向量表中实现这些操作

这里包括了

open, 

close, 

unmap, 

protect, sync, nopage, wppage, swapout 

这些操作

 

 

struct 

vm_area_struct 

/*

公共的

 

vma 

类型无关的

 

*/ 

struct 

mm_struct 

*



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有