Chinaunix首页 | 论坛 | 博客
  • 博客访问: 158472
  • 博文数量: 28
  • 博客积分: 2010
  • 博客等级: 大尉
  • 技术积分: 239
  • 用 户 组: 普通用户
  • 注册时间: 2009-11-07 01:15
文章存档

2010年(24)

2009年(4)

我的朋友

分类: LINUX

2009-12-22 08:39:30

你要是明白copy_to_user与mmap的工作原理就知道区别了  
  copy_to_user在每次拷贝时需要检测指针的合法性,也就是用户空间的指针所指向的地址的确是一段该进程本身的地址,而不是指向了不属于它的地方,而且每次都会拷贝一次数据,频繁访问内存,由于虚拟地址连续,物理地址不一定会连续,从而造成CPU的CACHE频繁失效,从而使速度降低  
  mmap仅在第一次使用时为进程建立页表,也就是将一段物理地址映射到一段虚拟地址上,以后操作时不再检测其地址的合法性(合法性交由CPU页保护异常来做),另一方面是内核下直接操作mmap地址,可以不用频繁拷贝,也就是说在内核下直接可用指针向该地址操作,而不再在内核中专门开一个缓冲区,然后将缓冲区中的数据拷贝一次进来,mmap一般是将一段连续的物理地址映射成一段虚拟地址,当然,也可以将每段连续,但各段不连续的物理地址映射成一段连续的虚拟地址,无论如何,其物理地址在每段之中是连续的,这样一来,就不会造成CPU的CACHE频繁失效,从而大大节约时间
阅读(2524) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~