临时内核映射区属于高端内存中的固定内核映射区中的一部分。当必须创建一个映射而当前的上下文又不能睡眠时,内核提供了临时映射(也就是所谓的原子映射)。有一组保留的映射,他们可以存放新创建的临时映射。内核可以原子地把高端内存中的一个页映射到某个保留的映射中。因此,临时映射可以用在不能睡眠的地方,比如中断处理程序中,因为获取映射时绝不会阻塞。相关阅读:http://www.linuxidc.com/Linux/2012-02/53457.htm每个CPU都有他自己的窗口集合,他们用enum km_type数据结构表示。该数据结构中定义的每个符号,如KM_BOUNCE_READ、KM_USER0等标示了窗口的线性地址。
[cpp] - enum km_type {
- KMAP_D(0) KM_BOUNCE_READ,
- KMAP_D(1) KM_SKB_SUNRPC_DATA,
- KMAP_D(2) KM_SKB_DATA_SOFTIRQ,
- KMAP_D(3) KM_USER0,
- KMAP_D(4) KM_USER1,
- KMAP_D(5) KM_BIO_SRC_IRQ,
- KMAP_D(6) KM_BIO_DST_IRQ,
- KMAP_D(7) KM_PTE0,
- KMAP_D(8) KM_PTE1,
- KMAP_D(9) KM_IRQ0,
- KMAP_D(10) KM_IRQ1,
- KMAP_D(11) KM_SOFTIRQ0,
- KMAP_D(12) KM_SOFTIRQ1,
- KMAP_D(13) KM_SYNC_ICACHE,
- KMAP_D(14) KM_SYNC_DCACHE,
- /* UML specific, for copy_*_user - used in do_op_one_page */
- KMAP_D(15) KM_UML_USERCOPY,
- KMAP_D(16) KM_IRQ_PTE,
- KMAP_D(17) KM_NMI,
- KMAP_D(18) KM_NMI_PTE,
- KMAP_D(19) KM_TYPE_NR
- };
在km_type中的每个符号(除了最后一个)都是固定映射的线性地址的一个下标。enum fixed_addressed数据结构包含符号FIX_KMAP_BEGIN和FIX_KMAP_END;把后者的值赋成下标FIX_KMAP_BEGIN+(KM_TYPE_NR*NR_CPUS)-1。在这种方式下,系统中的每个CPU都有KM_TYPE_NR个固定映射的线性地址。
[cpp] - enum fixed_addresses {
- ……
- FIX_KMAP_BEGIN, /* reserved pte"s for temporary kernel mappings */
- FIX_KMAP_END = FIX_KMAP_BEGIN+(KM_TYPE_NR*NR_CPUS)-1,
- ……
- }
Linux高端内存管理之永久内核映射Linux内核高端内存管理之固定内存区与映射相关资讯 Linux基础知识
- Linux基础知识之文件权限详解 (08月09日)
- Linux基础知识之ls与文件名通配详 (08月01日)
- Linux基础知识之history的详细说明 (07月31日)
| - Linux基础知识之文件管理命令(cp、 (08月09日)
- Linux基础知识之man手册的使用 (07月31日)
- Linux基础知识之文件的时间戳及 (07月31日)
|
本文评论 查看全部评论 (0)