Linux中的内存分配和释放之__free_pages()函数分析
记得我们在上篇文章mem_init()分析中提到__free_page()函数吗?我们现在来完善它。它的调用过程是这样的:mem_init()->free_all_bootmem_node():我们知道这个函数是统计一共释放了多少空闲页。->free_all_bootmem_core()就是在这个函数里面先后多次调用__free_pages()函数。目的就是为了释放每个内存node里面无用的内存孔洞页。我们现在就来好好探讨这个函数。
fastcall void __free_pages(struct page *page, unsigned int order)
{
if (!PageReserved(page) && put_page_testzero(page)) {
if (order == 0)
free_hot_page(page);//我们先来看看这个函数。
else
__free_pages_ok(page, order);//我们最后才来讨论这个函数。
}
}
void fastcall free_hot_page(struct page *page)
{
free_hot_cold_page(page, 0);
}
static void fastcall free_hot_cold_page(struct page *page, int cold)//如果cold是0的话,表示要把page所指向内存页释放到
//其所在内存页区中当前处理器的“热区”内存中,如果为1的话,就释放到这页所在页区
//中当前处理器的“冷区”高速缓存内存中。在这里肯定有不少人不太了解linux在启动后是
&nbs
相关文档:
信号本质
信号是在软件层次上对中断机制的一种模拟,在原理上,一个进程收到一个信号与处理器收到一个中断请求可以说是一样的。信号是异步的,一个进程不必通过任何操作来等待信号的到达,事实上,进程也不知道信号到底什么时候到达。
信号是进程间通信机制中唯一的异步通信机制,可以看作是异步通知,通知接收信号的进程 ......
图 1. Linux 文件系统组件的体系结构
用户空间包含一些应用程序(例如,文件系统的使用者)和 GNU C 库(glibc),它们为文件系统调用(打开、读取、写和关闭)提供用户接口。系统调用接口的作用就像是交换器,它将系统调用从用户空间发送到内核空间中的适当端点。
VFS 是底层文件系统的主要接口。这个组件导出一 ......
3. 指针与数组的比较
不同点:
数组:要么在惊天存储区域被创建(如全局数组),要么在栈上被创建。数组名对应着(而不是指向)一块内存,其地址与容量在生命周期内保持不变,只有数组的内容可以改变。
指针:可以随时指向任意类型的内存块,它的特征是“可变”,所以我们常用 ......
我在Vmware虚拟机上安装Linux时,第一张和第二张光盘都顺利挂载,但是在第三张光盘时却出现无法挂载的提示窗口。此时我的解决办法是:Red Hat Linux/setting/Hardware/cd/dvd(Ide)中配置好Image file后勾上Device status中的Connected即可 ......