进程和文件是操作系统的两个核心抽象，操作系统是怎么把代码组织在一起以支持这两个抽象的呢？[系统调用](#)在顶层，[进程](#)和[文件](#)是具体的实现，[启动过程](#)和[支持工具](#)是用来支持这两个抽象的。

#### 启动过程和系统调用

entry.S, 最先执行的一段汇编代码，为进入C代码做准备

start.c, 初始化计时器中断，并为进入内核态做准备

main.c, 初始化内核里的各个模块，并启动第一个用户进程

syscall.c, sysfile.c, sysproc.c，系统调用的函数

#### 进程

exec.c, exec系统调用的底层实现

proc.c, 关于进程的系统调用的底层实现，调度器的实现

 swtch.S，线程切换的上下文

##### 内存

kalloc.c, 物理页分配

vm.c, 虚拟页管理

##### 中断

kernelvec.S, 管理来自内核的中断

trampoline.S, 管理来自用户的中断

trap.c, 中断管理的C代码部分

plic.c, 中断控制器

#### 文件

bio.c, 缓冲区缓存层

log.c, 日志层

fs.c, 索引结点层，目录层，路径层

file.c，文件描述符层

##### 管道

pipe.c，管道的实现代码

##### 设备

console.c, uart.c, 输入输出

virtio_disk.c，磁盘驱动

#### 支持工具

sleeplock.c, 睡眠锁

spinlock.c, 自旋锁

string.c, printf.c, 内核用到的库


