ChinaUnix.net
相关文章推荐:

mmap进程

比如a文件在一个进程里从0x10932039开始映射到0x10932879,那么内核怎样知道这段地址空间是文件的映射?在读文件的时候,不也要进行将虚地址转换为物理地址,然后在读数据,这样也不是要进行io操作?怎样会加快读取速度呢?

by chenzhanyiczy - C/C++ - 2008-06-25 17:42:01 阅读(1512) 回复(3)

相关讨论

看到版里有几个帖子是关于mmap,我也有几个问题: 1. 父进程fork之后,mmap一个文件;子进程exec之后是否也能mmap同一文件做共享? 2. 在不同进程(非父子)mmap的同一内存中,是否能放posix semaphore,我只知道可以放mutex,不知道信号量可不可以?

by sweetass - Linux环境编程 - 2008-06-03 10:11:15 阅读(1543) 回复(0)

本帖最后由 registcn 于 2014-04-20 10:37 编辑 我知道fork源码中,mm_struct以及其下的vm_area_struct再以及vm_area_struct下的可写页表是执行写时复制的(先设置共享指针,写的时候再复制)。 如果要保证父子进程通过mmap顺畅通信,这里mmap的vm_area肯定不能各自复制一份的。我的问题:那mmap的区间是特殊处理了?对这个vma设置的共享指针是永久的,不会单独复制一份? 求源码或者详细解释,多谢大家

by registcn - 内核源码 - 2014-04-20 10:45:12 阅读(874) 回复(3)

本帖最后由 kouu 于 2010-04-17 13:30 编辑 最近注意到这样一个现象: 使用mmap映射一个文件以后, 如果文件大小被其他进程减小, 则访问map以内 文件大小以外的内存时, 进程将收到SIGBUS信号而退出. 设有进程A和B. 进程A 通过 mmap 映射一个普通文件, 设映射的到内存的起始地址为p, 大小为a(单位为page大小, 以下都使用相同的单位). 进程B 将该文件的size减小为b(b进程A 读p+n(b

by kouu - 内核源码 - 2010-04-24 21:17:55 阅读(11320) 回复(22)

手头上有一个网络服务, 用mmap来快速读取数据并返回, 并且在有更改请求的时候, 更新mmap文件的数据. 现在性能上有压力, 每分钟请求数到15000, 想用多进程来缓解, 大概思路是这样的: |<---shm channel---> 进程1 <-----mmap----->| netio |<---shm channel---> 进程2 <-----mmap----->| data files |<---shm channel---> 进程3 <-----mmap----->| 从netio上过来的请求分两种, 一是update数据请求, 二是r...

by KOMOZ - C/C++ - 2006-10-19 11:18:26 阅读(3024) 回复(2)

系统跑一个java进程,发现整个系统内存在张, svmon -P下,看到大量内存被mmap类型的段占了, 请问mmap source是如何产生的?读文件产生的吗? ------------------------------------------------------------------------------- Pid Command Inuse Pin Pgsp Virtual 64-bit Mthrd 16MB 414012 java 54476878...

by zwlx1982 - AIX - 2009-08-10 15:27:19 阅读(1552) 回复(0)

系统跑一个java进程,发现整个系统内存在张,\r\nsvmon -P下,看到大量内存被mmap类型的段占了,\r\n\r\n请问mmap source是如何产生的?读文件产生的吗?\r\n\r\n------------------------------------------------------------------------------- \r\n Pid Command Inuse Pin Pgsp Virtual 64-bit Mthrd 16MB \r\n 414012 j...

by zwlx1982 - AIX - 2009-08-10 15:27:19 阅读(2928) 回复(0)

fd_map=open(path, O_CREAT|O_RDWR|O_TRUNC, 00777); write(fd_map," ", sizeof(CPipegData)); pmap = (CPipeData*) mmap( NULL,sizeof(CPipeMsgData), PROT_READ | PROT_WRITE, MAP_SHARED, fd, 0 ); pMsg->dwPduLenth = pmap->Msgdata.msgLenth; if(pmap->Msgdata.pMsgData && pMsg->dwPduLenth != 0) { pMsg->pMsgBuf = new unsigned char[pMsg->dwPduLenth + 1]; memcpy(pMsg->pMsgBuf, pmap->Msgdata.pMsgData, pMs...

by datastreamcn - C/C++ - 2008-12-31 00:26:14 阅读(3229) 回复(6)

本帖最后由 faku 于 2011-09-24 20:33 编辑 我曾经做过实验, 即便是同一个进程映射同一个文件, mmap的返回值也是不同的, vptr1!=vptr2, 也就是说:文件映射到内存后, 不是同一块内存 但是, 使用MAP_SHARE方式后, 对vptr1操作, 这个更改对vptr2立刻就可见了, 就好像操作的是同一块内存一样 我的疑问是; 1: vptr1!=vptr2, 是否说明不是同一块物理内存? 2:如果不是同一块内存,那么就是内核保证一个进程修改对另外...

by faku - Linux环境编程 - 2013-04-30 12:12:48 阅读(6221) 回复(15)

请教大家: 两个进程mmap同一块共享内存后的读写内存操作需不需要加锁?

by redac - C/C++ - 2009-12-24 18:32:29 阅读(4587) 回复(3)

mmap   功能描述: mmap函数是unix/linux下的系统调用   mmap将一个文件或者其它对象映射进内存。文件被映射到多个页上,如果文件的大小不是所有页的大小之和,最后一个页不被使用的空间将会清零。munmap执行相反的操作,删除特定地址区域的对象映射。   基于文件的映射,在mmap和munmap执行过程的任何时刻,被映射文件的st_atime可能被更新。如果st_atime字段在前述的情况下没有得到更新,首次对映射区的第一个页索引...

by coolcoolrain - Linux文档专区 - 2010-01-15 23:45:59 阅读(629) 回复(0)