# 2.4 代码（XV6架构篇）

XV6的源代码位于***kernel/***子目录中，源代码按照模块化的概念划分为多个文件，图2.2列出了这些文件，模块间的接口都被定义在了***def.h***（***kernel/defs.h***）。

| **文件**            | **描述**                                    |
| ------------------- | ------------------------------------------- |
| ***bio.c***         | 文件系统的磁盘块缓存                        |
| ***console.c***     | 连接到用户的键盘和屏幕                      |
| ***entry.S***       | 首次启动指令                                |
| ***exec.c***        | `exec()`系统调用                            |
| ***file.c***        | 文件描述符支持                              |
| ***fs.c***          | 文件系统                                    |
| ***kalloc.c***      | 物理页面分配器                              |
| ***kernelvec.S***   | 处理来自内核的陷入指令以及计时器中断        |
| ***log.c***         | 文件系统日志记录以及崩溃修复                |
| ***main.c***        | 在启动过程中控制其他模块初始化              |
| ***pipe.c***        | 管道                                        |
| ***plic.c***        | RISC-V中断控制器                            |
| ***printf.c***      | 格式化输出到控制台                          |
| ***proc.c***        | 进程和调度                                  |
| ***sleeplock.c***   | Locks that yield the CPU                    |
| ***spinlock.c***    | Locks that don’t yield the CPU.             |
| ***start.c***       | 早期机器模式启动代码                        |
| ***string.c***      | 字符串和字节数组库                          |
| ***swtch.c***       | 线程切换                                    |
| ***syscall.c***     | Dispatch system calls to handling function. |
| ***sysfile.c***     | 文件相关的系统调用                          |
| ***sysproc.c***     | 进程相关的系统调用                          |
| ***trampoline.S***  | 用于在用户和内核之间切换的汇编代码          |
| ***trap.c***        | 对陷入指令和中断进行处理并返回的C代码       |
| ***uart.c***        | 串口控制台设备驱动程序                      |
| ***virtio_disk.c*** | 磁盘设备驱动程序                            |
| ***vm.c***          | 管理页表和地址空间                          |

​                                   **图2.2：XV6内核源文件**

