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

📄 vmalloc.c.txt

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

相关文件
	/include/asm-i386/pgtable.h
	/include/asm-i386/fixmap.h
	

******************************vmalloc基本函数********************************
这个函数是内核态的程序进行虚存分配时所使用的函数,和用户态所使用的malloc没有什么联系。
其基本原理就是使用3G+phyical_mm+8m-------------4G-8m这一段虚存地址进行映射

(1)void * __vmalloc (unsigned long size, int gfp_mask, pgprot_t prot)
        size = PAGE_ALIGN(size);	//页对齐
	
        if (!size || (size >> PAGE_SHIFT) > num_physpages) {	//进行地址检测
                BUG();
                return NULL;
        }
        area = get_vm_area(size, VM_ALLOC);	//得到一段虚存地址


(1)struct vm_struct * get_vm_area(unsigned long size, unsigned long flags)
	//这个函数分配一个大小为size的虚拟内存空间

        area = (struct vm_struct *) kmalloc(sizeof(*area), GFP_KERNEL);	//分配一个vm结构

	size += PAGE_SIZE;	//每一段的虚拟空间段的最后都加上一个4k大小的hole来进行内存泄露检测
        addr = VMALLOC_START;	//这个页一样,内存虚地址的分配从phyical_mm + 8M开始
	
	for (p = &vmlist; (tmp = *p) ; p = &tmp->next) {
                if ((size + addr) < addr)
                        goto out;
                if (size + addr <= (unsigned long) tmp->addr)
                        break;
                addr = tmp->size + (unsigned long) tmp->addr;
                if (addr > VMALLOC_END-size)	//VMALLOC_END也不是就是4G的顶,也留有一定的空隙
                        goto out;
        }	//再vm列表中找到一个空闲的地方来进行我们的地址存放
	……	//对分配的地址进行初始化

	
**********************************************************************

⌨️ 快捷键说明

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