linux内核代码——页框的回收(2.4.18)
写这篇blog参照了O'Reilly 的《Understanding the Linux Kernel》,或者说是大部分参照,实际上这本书关于这章写得确实很经典。尽管如此,在看代码的过程中我仍然遇到了很多困惑,以至于看过两遍之后脑子里还是一团浆糊。所以还得感谢村爷帮我理清楚了思路,不敢怠慢,赶紧写下来防止忘记。(以下代码及解释均以2.4.18版本为准)
管理页框回收的主要函数是try_to_free_pages,函数原型是int try_to_free_pages(zone_t *classzone, unsigned int gfp_mask, unsigned int order)。这个函数的参数:classzone--要回收的页框所在的管理区;gfp_mask--标志,这个不好解释,建议大家看代码;order--释放一个页框所以是0。看这个函数之前需要了解一下LRU链表,活动链表与非活动链表是页框回收的核心数据结构,请先补全这部分的知识!下面以代码分析:
int try_to_free_pages(zone_t *classzone, unsigned int gfp_mask, unsigned int order)
{
int priority = DEF_PRIORITY; //默认优先级
int nr_pages = SWAP_CLUSTER_MAX; //释放的页框数
gfp_mask = pf_gfp_mask(gfp_mask); //检查标志位
do {
nr_pages = shrink_caches(classzone, priority, gfp_mask, nr_pages); //循环调用shrink_caches释放页框。每次循环优先级数值递减(优先级更高
if (nr_pages <= 0)
&n
相关文档:
强制通过堆栈传递参数,不要用寄存器传递
仔细看一下有asmlinkage的地方通常是系统调用的函数,因为在系统调用中,寄存器从用户空间传过来后SAVE_ALL压入堆栈,接着调用相应的系统调用函数,这样系统调用函数一定要保证是通过堆栈传递参数的
转贴一段:
The asmlinkage tag is one other thing that we should observe a ......
今天将该书misc-modules部分的jiq.c代码做了些修改,以保证这份代码在UBUNTU 9.10 & Linux 2.6.31的环境下运行。
记录一下主要的修改位置:
1.config.h
新内核中使用了autoconf.h代替config.h
2.工作队列
在新的内核中为了避免非延迟的工作队列中timer的成本,将工作队列中的timer剥离出来。同时又构造了延迟工作队列 ......
本文介绍如何在Linux下配置Java环境变量。配置共分十个步骤,从下载JDK开始,到Linux上JDK的安装,Eclipse的相应配置,最终在桌面上创建一个启动器,路径设置到Eclipse,就此完成Java环境变量的配置。
1.去http://java.sun.com/j2se/1.4.2/download.html
下载一个Linux Platform的JDK,
建议下载RPM自解压格式的(RP ......
du -sh * 查看当前目录下的文件夹大小
du 命令
用途
概述磁盘使用。
语法
du [ -a | -s ] [ -k ] [ -m ] [ -g ][ -l ] [ -r ] [ -x ] [ -H | -L ][ File ... ]
描述
du命令显示用于文件的块的数量。
如果指定的File参数实际上是一个目录,就要报告该目录内的所有文件。如果没有提供 File参数,du命令使用当前目录 ......
Windows 和 Linux 的IPC API对应表
Table 1. Process mapping
Windows
Linux
Classification
CreateProcess()
CreateProcessAsUser()
fork()
setuid()
exec()
Mappable
TerminateProcess()
kill()
Mappable
SetThreadpriority()
GetThreadPriority()
Setpriority()
getPriority()
Mappa ......