标签:
一:kmap()和kunmap()函数
永久内核映射允许内核建立高端页框到内核地址空间的长期映射。他使用主内核页表中一个专门的页表,其页表地址存放在pkmap_page_table中,页表包含512项或1024项,
因此,内核一次最多访问2M或4M的高端内存(地址范围是 4G-8M 到 4G-4M 之间,这个地址空间起叫“内核永久映射空间”或者“永久内核映射空间”)。
kmap()和kunmap()函数不能用于中断处理程序,因为其可能会睡眠。
pkmap_count是一个容量为LAST_PKMAP的整数数组,其中每个元素都对应一个持久映射页。
宏定义与关键变量定义:
pkmap_page_table:高端内存主内核页表中,一个用于永久内核映射的专用页表锁在的地址
LAST_PKMAP: 上述页表所含有的表项(512或者1024)
PKMAP_BASE:该页表所映射线性地址的start地址
pkmap_count:对页表项提供计数器的数组
page_address_htable:散列表,用于记录高端页框与永久内核映射的线性地址之间的关系
page_address_map:一个数据结构,包含指向页描述符的指针和分配给页框的线性地址;用于为高端内存的每
个页框提供当前映射,它被包含在page_address_htable这个hansh表中
内核主要通过以下数据结构来建立物理页page与其在虚拟内存区位置的关联
二:kmap_atomic()临时内存函数
kmap_atomic()函数主要用于建立临时内存映射,它不能用于可能建立睡眠的代码。
标签:
原文地址:http://www.cnblogs.com/zhiliao112/p/4251221.html