当前位置: 技术问答>linux和unix
关于linux应用程序中文件映射的问题
来源: 互联网 发布时间:2016-12-30
本文导语: 在linux2.6内核下阅读一段应用程序时有一段程序让我很费解: fd = open("/dev/bw", O_RDWR); base = mmap(NULL, HiPHY_MMIO_LEN, PROT_READ | PROT_WRITE,MAP_SHARED, fd, 0); 本段程序让我疑惑的地方是在用户空间中进行的文件映射得到...
在linux2.6内核下阅读一段应用程序时有一段程序让我很费解:
fd = open("/dev/bw", O_RDWR);
base = mmap(NULL, HiPHY_MMIO_LEN, PROT_READ | PROT_WRITE,MAP_SHARED, fd, 0);
本段程序让我疑惑的地方是在用户空间中进行的文件映射得到的结果是什么,是设备的dev结构体中resource[0]的首地址么?可以进行这样的映射那dev/bw文件的本质又是什么。
注:本例子中,设备为PCI设备,拥有自己的寄存器。
fd = open("/dev/bw", O_RDWR);
base = mmap(NULL, HiPHY_MMIO_LEN, PROT_READ | PROT_WRITE,MAP_SHARED, fd, 0);
本段程序让我疑惑的地方是在用户空间中进行的文件映射得到的结果是什么,是设备的dev结构体中resource[0]的首地址么?可以进行这样的映射那dev/bw文件的本质又是什么。
注:本例子中,设备为PCI设备,拥有自己的寄存器。
|
mmap内存映射实际上是在你的进程中增加了一段缓冲区。映射之后,将这段线性地址和物理地址之间建立链接。
在mmap之前你肯定先要打开这个文件,当打开这个文件之后kernel会相应的产生一个inode。这个inode数据结构中有一个指针式指向address_space。读入的文件一般都在swap cache 或者page cache中。而在swap cache或者 page cache中,一个页面的信息有struct page来描述,同时,一个struct page也内部的指针也指向一个address_space结构。这样就可以通过address_space和偏移量来找到实际的文件。
在mmap之前你肯定先要打开这个文件,当打开这个文件之后kernel会相应的产生一个inode。这个inode数据结构中有一个指针式指向address_space。读入的文件一般都在swap cache 或者page cache中。而在swap cache或者 page cache中,一个页面的信息有struct page来描述,同时,一个struct page也内部的指针也指向一个address_space结构。这样就可以通过address_space和偏移量来找到实际的文件。