当谈论一个函数时,我们这样写
"function_name [ file location . extension ]"
例如
"schedule [kernel/sched.c]"
告诉我们我们谈论的是
"schedule"
可以从文件中检索的函数
[ kernel/sched.c ]
注意:我们还假设 /usr/src/linux 为起始目录。
源代码中的缩进是 3 个空格字符。
我们使用“相互调用分析”(ICA)来查看(以缩进的方式)内核函数如何相互调用。
例如,sleep_on 命令在下面的 ICA 中描述
|sleep_on |init_waitqueue_entry -- |__add_wait_queue | enqueuing request |list_add | |__list_add -- |schedule --- waiting for request to be executed |__remove_wait_queue -- |list_del | dequeuing request |__list_del -- sleep_on ICA
缩进的 ICA 之后是函数的位置
注意:如果之前已指定文件位置,我们不再指定。
在 ICA 中,一行看起来像这样
function1 -> function2
表示 < function1 > 是指向另一个函数的通用指针。在这种情况下,< function1 > 指向 < function2 >。
当我们写
function:
这意味着 < function > 不是一个真正的函数。它是一个标签(通常是汇编器标签)。
在许多章节中,我们可能会报告 “C” 代码或“伪代码”。在真实的源文件中,您可以使用“汇编器”或“非结构化”代码。这种差异是为了学习目的。
使用 ICA(相互调用分析)的优点有很多
与所有理论模型一样,我们简化了现实,避免了许多细节,例如真实源代码和特殊条件。