下一页 上一页 目录

2. 使用的语法

2.1 函数语法

当谈论一个函数时,我们这样写

"function_name  [ file location . extension ]"

例如

"schedule [kernel/sched.c]" 

告诉我们我们谈论的是

"schedule"

可以从文件中检索的函数

[ kernel/sched.c ]

注意:我们还假设 /usr/src/linux 为起始目录。

2.2 缩进

源代码中的缩进是 3 个空格字符。

2.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 的优点

使用 ICA(相互调用分析)的优点有很多

使用 ICA 的缺点

与所有理论模型一样,我们简化了现实,避免了许多细节,例如真实源代码和特殊条件。


下一页 上一页 目录