持久映射和临时映射都可以是物理连续的,之所以存在三种机制,是因为linux设计的缺陷或者32位的限制,比如64bit就没有高端内存这个乱七八糟的东西。
持久映射和临时映射的地址空间很小的,所以只能映射很小一部分高端内存,这两种都不是高端内存的常用使用方式
最常用的高端内存使用方式是非连续分配方式,但是可同时使用的数量仍然受vmalloc区大小的限制。
非连续内存区是使用vmalloc内核线性区,映射不连续的空间。
其实还可以把连续高端内存映射到vmalloc区,比如ioremap实现。
那么除了这几种方式,是不是高端内存就不能使用了呢?不是,高端内存虽然很难被kernel直接使用,但是仍然可以很方便的映射到应用空间,参见do_page_fault.
所以也别想的太多,什么中断可用,中断不可用的,这几个东西就是维护者一拍脑袋临时设计出来的,结果是又难用,又复杂,搞得开发者晕头转向,到64bit机这些垃圾就不会烦大家了。
比如kmap这个垃圾,谁会用它?
阅读(914) | 评论(0) | 转发(0) |