linux mmap 文件_Linux内存映射文件_Linux内存映射文件机制

Linux内存映射文件机制Linux显存映射文件显存映射文件,是由一个文件到一块显存的映射。Win32提供了容许应用程序把文件映射到一个进程的函数(CreateFileMapping)。显存映射文件与虚拟显存有些类似linux系统编程linux cp,通过显存映射文件可以保留一个地址空间的区域,同时将化学储存器递交给此区域,显存文件映射的化学储存器来自一个早已存在于c盘上的文件,但是在对该文件进行操作之前必须首先对文件进行映射。使用显存映射文件处理储存于c盘上的文件时,将毋须再对文件执行I/O操作,致使显存映射文件在处理大数据量的文件时能起到相当重要的作用。有两种类型的显存映射文件:1.共享型linux mmap 文件,在线性区页上的任何写操作就会更改c盘上的文件;并且假如进程对共享映射中的一个页进行写,这么这些更改对于其他映射了这同一文件的所有进程来说都是可见的。所以显存映射文件也可以作为进程通讯的一种形式。2.私有型,当进程创建的映射只是为读文件,而不是写文件时才能使用这些映射。出于这些目的linux mmap 文件,私有映射的效率要比共享映射的效率更高。并且对私有映射页的任何写操作就会使内核停止映射该文件中的页。为此写操作既不会改变c盘上的文件,对访问相同文件的其他进程也是不可见的。并且私有显存映射中的页会由于其他进程对文件的更改而更新。显存映射文件通过mmap和munmap系统调用来实现.mmap调用实际上就是一个显存对象vma的创建过程,mmap的调用格式是:void*mmap(void*start,size_tlength,intprot,intflags,intfd,off_toffset);它的任何更改对其它进程都不可见.而MAP_SHARED则无论更改与否都使用同一副本,任何进程对页面的更改对其它进程都是可见的.mmap系统调用的实现过程是:1.先通过文件系统定位要映射的文件;2.权限检测,映射的权限不会超过文件打开的方法,也就是说假如文件是以只读方法打开,这么则不容许构建一个可写映射;3.创建一个vma对象,并对之进行初始化;4.调用映射文件的mmap函数,其主要工作是给vm_ops向量表形参;5.把该vma链入该进程的vma数组中,假如可以和前后的vma合并则合并;6.假如是要求VM_LOCKED(映射区不被换出)形式映射,则发出缺页恳求,把映射页面读入显存中.

Tagged:
Author

这篇优质的内容由TA贡献而来

刘遄

《Linux就该这么学》书籍作者,RHCA认证架构师,教育学(计算机专业硕士)。

发表回复