加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > Linux > 正文

linux 一个使用整页的 scull: scullp

发布时间:2020-12-13 23:12:20 所属栏目:Linux 来源:网络整理
导读:为了真实地测试页分配,我们已随其他例子代码发布了 scullp 模块. 它是一个简化的 scull,就像前面介绍过的 scullc. ? scullp 分配的内存量子是整页或者页集合: scullp_order 变量缺省是 0,但是可以在编 译或加载时改变. ? 下列代码行显示了它如何分配内存: ?

为了真实地测试页分配,我们已随其他例子代码发布了 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 无法提供的东西.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读