澄清一个get_user_pages的事实
2010-02-09 20:30
411 查看
get_user_pages的作用是得到用户的页面,作为参数返回,注意,得到的是一个page结构数组而不是别的,这些page最起码 在当前记录着用户进程的数据,一般情况下,内核在调用此函数得到用户页面以后,会再将它们映射到内核空间的一个虚拟地址,然后操作这些页面的数据。这样的话在调用完get_user_pages之后然后映射到内核的的页面就最少在两个地方有映射,一个是用户空间,一个是内核空间。这时问题出来了,这些页面可能会被换出,get_user_pages并没有做任何事情比如锁住页面以保证页面不被换出,在页面换出的时候,用户映射的页表项的存在位会被清除,但是这可能不会通知该页面的内核映射的页表项,如果内核继续读写该页面,那么结果将是错误的,因此,内核不应该长时间的保持get_user_pages的映射,请看下面的例子,在2.6内核的aio中:
...
info->nr_pages = get_user_pages(current, ctx->mm, info->mmap_base, nr_pages, 1, 0, info->ring_pages, NULL);
本文出自 “我来,我看,我征服” 博客,请务必保留此出处http://dog250.blog.51cto.com/2466061/1274028
...
info->nr_pages = get_user_pages(current, ctx->mm, info->mmap_base, nr_pages, 1, 0, info->ring_pages, NULL);
本文出自 “我来,我看,我征服” 博客,请务必保留此出处http://dog250.blog.51cto.com/2466061/1274028
相关文章推荐
- 澄清一个get_user_pages的事实
- Linux2.6.29内核的get_user_pages的改进
- Linux2.6.29内核的get_user_pages的改进
- 页面的引用计数和get_user_pages
- get_user_pages
- get_user_pages — 获取用户区进程使用内存的某个页
- 页面的引用计数和get_user_pages
- 内存管理API之get_user_pages
- 内存管理API之get_user_pages_fast
- copy_to_user的实现以及get_user_pages/kmap_atomic/kmalloc
- get_user_pages的意义
- Delphi - GetUserNameEx(学一下导出Windows API,以及Array Char充当缓冲区的用法,下标必须从零开始)
- JavaSE8基础 Class 通过class.getClassLoader.getSystemResourceAsStream 返回一个InputStream
- 记一个微信支付-1错误JSAPI缺少参数app|get_brand_request:Fail
- cocos2d-x 简单类型的存储--UserDefault的get/setxxxForKey()方法
- sharepoint 2010 GetUserProfileByName 5566
- Android开发-02-自己常用的一个get和post方式提交类的封装
- System.getProperty("user.dir") 获取jar包所在目录
- Android 判断一个 View 是否可见 getLocalVisibleRect(rect) 与 getGlobalVisibleRect(rect)
- 一例应用Microsoft.AspNet.Identity初始化角色权限导致的UserManager.GetRoles(user.Id)始终获取不到账号角色问题的解决