⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 highmem.c.txt

📁 linux内核学习笔记 希望想看的人可以很快下载到
💻 TXT
字号:
any problems,send mails to lysindybear@sina.com.cn


相关文件
	/include/asm-i386/highmem.h


这是最主要的一个映射结构,如果一个物理页要进行映射,首先要得到一个pkmap_count结构,也就是获得
一个映射许可权,说明当前的这个虚地址没有被映射走。你可以使用。
static int pkmap_count[LAST_PKMAP];


这个函数对高于high_memory的内存页进行映射
void *kmap_high(struct page *page)
	vaddr = map_new_virtual(page);		//映射一个新的内核地址
	pkmap_count[PKMAP_NR(vaddr)]++;		//映射计数加一
	return (void*) vaddr;			//返回映射过后的虚地址


static inline unsigned long map_new_virtual(struct page *page)
	for (;;) {	//无限循环,直到映射成功
		if (!pkmap_count[last_pkmap_nr])
			break;	//如果找到一个空位的话,循环结束
		……	//否则休眠,被调度出去(所以没有办法再中断中使用)
	}
	vaddr = PKMAP_ADDR(last_pkmap_nr);	//找到这个空位的相应的内核虚地址
	set_pte(&(pkmap_page_table[last_pkmap_nr]), mk_pte(page, kmap_prot));
	pkmap_count[last_pkmap_nr] = 1;
	page->virtual = (void *) vaddr;		//将内核虚地址赋给这个页


这个函数对高于high_memory的内存页进行解映射
void kunmap_high(struct page *page)
	--pkmap_count[nr]	//对空位建一
	if (need_wakeup)	
		wake_up(&pkmap_map_wait);	//唤醒那写等待的进程,有空位子了!!!


这个函数对高于high_memory的内存页进行映射(用于中断中)
static inline void *kmap_atomic(struct page *page, enum km_type type)

这个函数对高于high_memory的内存页进行解映射(用于中断中)
static inline void kunmap_atomic(void *kvaddr, enum km_type type)





⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -