linux 一个使用整页的 scull: scullp
为了真实地测试页分配,我们已随其他例子代码发布了 scullp 模块. 它是一个简化的 scull,就像前面介绍过的 scullc. ? scullp 分配的内存量子是整页或者页集合: scullp_order 变量缺省是 0,但是可以在编 译或加载时改变. ? 下列代码行显示了它如何分配内存: ? /* Here‘s the allocation of a single quantum */ if (!dptr->data[s_pos]) { dptr->data[s_pos] = ? 尽管 alloc_pages (稍后描述)应当真正地用作分配高端内存页,由于某些理由我们直到 15 章才真正涉及. ? (void *) get_free_pages(GFP_KERNEL,dptr->order); if (!dptr->data[s_pos]) goto nomem; memset(dptr->data[s_pos],PAGE_SIZE << dptr->order); } ? scullp 中释放内存的代码看来如此: ? /* This code frees a whole quantum-set */ for (i = 0; i < qset; i++) if (dptr->data[i]) free_pages((unsigned long)(dptr->data[i]),dptr->order); ? 在用户级别,被感觉到的区别主要是一个速度提高和更好的内存使用,因为没有内部的内 存碎片. 我们运行一些测试从 scull0 拷贝 4 MB 到 scull1,并且接着从 scullp0 到 scullp1; 结果显示了在内核空间处理器使用率有轻微上升. ? 性能的提高不是激动人心的,因为 kmalloc 被设计为快的. 页级别分配的主要优势实际 上不是速度,而是更有效的内存使用. 按页分配不浪费内存,而使用 kmalloc 由于分配 的粒度会浪费无法预测数量的内存. ? 但是 get_free_page 函数的最大优势是获得的页完全是你的,并且你可以,理论上,可以通过适当的设置页表来组合这些页为一个线性的区域. 例如,你可以允许一个用户进 程 mmap 作为单个不联系的页而获得的内存区. 我们在 15 章讨论这种操作,那里我们展 示 scullp 如何提供内存映射,一些 scull 无法提供的东西. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- 韩顺平Linux 实操篇 用户管理
- linux-kernel – / proc // task // stat中的utime和stime字
- linux – “永远不要进行内核更新” ??- 这有什么道理吗?
- linux – send()什么时候会返回小于length的参数?
- linux diff(differential) 命令
- 检查库版本netcdf linux
- kubernetes – minikube – 如何使用curl通过pod ip访问pod
- Nginx-Tomcat 等运维常用服务的日志分割-logrotate
- linux – 惠普智能阵列;如何安全地从阵列中删除带有SMART预
- linux – 从shell脚本运行awk文件,而不指定awk的确切位置