ChinaUnix.net
相关文章推荐:

shm与mmap的区别

看书中讲ioremap是将物理地址转换为虚拟地址??这里的虚拟地址是相对应内核的?? mmap是将设备内存线性地址映射到用户地址空间?? 而且在ldd3中用户虚拟地址,物理地址,内核逻辑地址,内核虚拟地址?? 按照ldd3 来讲就是内存页应该放在高端内存 是否就是内核的虚拟地址?? 很是疑惑,求高人指点迷津!!

by liqing498667512 - 驱动开发 - 2015-06-04 23:15:13 阅读(7084) 回复(4)

相关讨论

mmapshmat区别是什么?有什么不一样

by lib_net - C/C++ - 2006-09-25 12:01:40 阅读(3520) 回复(3)

本帖最后由 consatan 于 2011-12-03 21:33 编辑 RT kernel 2.6.32 amd64 比如系统物理内存为4GB,swap设置为1.5倍 6GB /etc/fstab如下设置[code]tmpfs /tmp tmpfs defaults,size=6G,mode=1777 0 0[/code]这样的话 /dev/shm 和/tmp 有何区别??? 或者是不是说这样设置后,2者只要存在一个就行???

by consatan - Linux新手园地 - 2011-12-03 21:30:07 阅读(6737) 回复(2)
by yakczh - Linux系统管理 - 2011-02-17 10:32:51 阅读(1702) 回复(2)

Linux的2.2.x 内核支持多种共享内存方式,如mmap()系统调用,Posix共享内存,以及系统V共享内存。linux发行版本如Redhat 8.0支持mmap()系统调用及系统V共享内存,但还没实现Posix共享内存,本文将主要介绍mmap()系统调用及系统V共享内存API的原理及应用。 一、内核怎样保证各个进程寻址到同一个共享内存区域的内存页面 1、 page cache及swap cache中页面的区分:一个被访问文件的物理页面都驻留在page cache或swap cache中,一个...

by hndeng06 - Linux文档专区 - 2008-10-09 20:37:44 阅读(1391) 回复(0)

shm_open对应的销毁函数是什么?应该不是shm_close Linux版本:openSUSE 10.30 我使用POSIX的进程共享内存 我使用shm_open得到fd,使用mmap映射内存 我使用munmap卸载mmap得到的指针 可是我不知道该如何删除shm_open得到的fd 我查到某些网站上说有shm_close函数,但是下面这个页面里似乎查不到shm_close这个函数,在我的Linux中也没有这个函数的定义,我的理解是这个函数不是标准POSIX定义的接口函数。 http://www.opengrou...

by keyser - Linux环境编程 - 2008-09-19 17:27:38 阅读(3094) 回复(4)

shm_open对应的销毁函数是什么?应该不是shm_close Linux版本:openSUSE 10.30 我使用POSIX的进程共享内存 我使用shm_open得到fd,使用mmap映射内存 我使用munmap卸载mmap得到的指针 可是我不知道该如何删除shm_open得到的fd 我查到某些网站上说有shm_close函数,但是下面这个页面里似乎查不到shm_close这个函数,在我的Linux中也没有这个函数的定义,我的理解是这个函数不是标准POSIX定义的接口函数。 http://www.opengrou...

by keyser - C/C++ - 2008-09-19 10:36:07 阅读(2855) 回复(3)

为一个设备写一个驱动。 设备支持多个APP同时打开并且执行mmap,驱动中负责把设备上不同的内存区域mmap给APP,这个在mmap中可以实现,但是当APP执行mumap的时候,驱动中没有对应的munmap(fops中有mmap,但是没有munmap),这样一来驱动就不知道该在什么时候根据什么回收之前mmap给APP的设备上的那片内存区域。 在close的时候做吗? 那又根据什么回收哪些设备上对应的内存区域呢?

by blworld - 嵌入式开发 - 2008-07-16 14:15:30 阅读(4807) 回复(7)

找了一个简单的,但有问题。 内核模块: static unsigned long p = 0; static int __init init(void) { p = __get_free_pages(GFP_KERNEL, 0); // SetPageReserved(virt_to_page(p)); printk("<1> p = 0x%08x\n", p); strcpy(p, "Hello world!\n"); return 0; } static void __exit fini(void) { ClearPageReserved(virt_to_page(p)); free_pages(p, 0); return; } module_init(...

by cablink - 内核源码 - 2010-07-30 17:01:11 阅读(2720) 回复(5)

copy_to_user在每次拷贝时需要检测指针的合法性,也就是用户空间的指针所指向的地址的确是一段该进程本身的地址,而不是指向了不属于它的地方,而且每次都会拷贝一次数据,频繁访问内存,由于虚拟地址连续,物理地址不一定会连续,从而造成CPU的CACHE频繁失效,从而使速度降低 mmap仅在第一次使用时为进程建立页表,也就是将一段物理地址映射到一段虚拟地址上,以后操作时不再检测其地址的合法性(合法性交由CPU页保护异常来...

by highnjupt - Linux文档专区 - 2010-01-19 11:38:15 阅读(1190) 回复(0)

你要是明白copy_to_usermmap的工作原理就知道区别了 copy_to_user在每次拷贝时需要检测指针的合法性,也就是用户空间的指针所指向的地址的确是一段该进程本身的地址,而不是指向了不属于它的地方,而且每次都会拷贝一次数据,频繁访问内存,由于虚拟地址连续,物理地址不一定会连续,从而造成CPU的CACHE频繁失效,从而使速度降低 mmap仅在第一次使用时为进程建立页表,也就是将一段物理地址映射到一段虚拟地址上,以后...

by config2010 - Linux文档专区 - 2009-12-22 08:39:30 阅读(1273) 回复(0)