# tg-rcore-tutorial Crates 依赖关系图 (ASCII)
## 概述
本文档以 ASCII 图形展示 `tmp1/tg-rcore-tutorial` 目录下各个 crates 之间的依赖关系。
## 分层架构图
```
┌─────────────────────────────────────────────────────────────────────────────────────┐
│ Layer 3: 内核章节 (Kernel Chapters) │
│ ┌─────────┐ ┌─────────┐ ┌─────────┐ ┌─────────┐ ┌─────────┐ ┌─────────┐ ┌─────────┐ ┌─────────┐ │
│ │ ch1 │ │ ch2 │ │ ch3 │ │ ch4 │ │ ch5 │ │ ch6 │ │ ch7 │ │ ch8 │ │
│ │Bare Metal│ │ Batch │ │Multi- │ │Virtual │ │Process │ │File │ │IPC & │ │Concur- │ │
│ │ │ │ System │ │program- │ │Memory │ │Manage- │ │System │ │Signal │ │rency │ │
│ │ │ │ │ │ming │ │ │ │ment │ │ │ │ │ │ │ │
│ └────┬────┘ └────┬────┘ └────┬────┘ └────┬────┘ └────┬────┘ └────┬────┘ └────┬────┘ └────┬────┘ │
└───────┼──────────┼──────────┼──────────┼──────────┼──────────┼──────────┼──────────┼─────────────┘
│ │ │ │ │ │ │ │
▼ ▼ ▼ ▼ ▼ ▼ ▼ ▼
┌─────────────────────────────────────────────────────────────────────────────────────┐
│ Layer 2: 上层组件 │
│ ┌──────────────────────┐ ┌──────────────────────┐ │
│ │ signal-impl │ │ user │ │
│ │ (Signal 实现) │ │ (用户态应用库) │ │
│ └──────────┬───────────┘ └──────────┬───────────┘ │
└─────────────┼────────────────────────────────────────────┼───────────────────────────┘
│ │
▼ ▼
┌─────────────────────────────────────────────────────────────────────────────────────┐
│ Layer 1: 中间组件 │
│ ┌──────────────────────┐ ┌──────────────────────┐ ┌──────────────────────┐ │
│ │ syscall │ │ signal │ │ sync │ │
│ │ (系统调用定义) │ │ (信号处理) │ │ (同步原语) │ │
│ └──────────┬───────────┘ └──────────┬───────────┘ └──────────┬───────────┘ │
└─────────────┼──────────────────────────┼──────────────────────────┼─────────────────┘
│ │ │
▼ ▼ ▼
┌─────────────────────────────────────────────────────────────────────────────────────┐
│ Layer 0: 基础组件 │
│ ┌─────────┐ ┌─────────┐ ┌─────────┐ ┌─────────┐ ┌─────────┐ ┌─────────┐ │
│ │ sbi │ │ linker │ │ console │ │ kernel- │ │ kernel- │ │ kernel- │ │
│ │ (SBI调用)│ │(链接脚本)│ │ (控制台) │ │ context │ │ alloc │ │ vm │ │
│ │ │ │ │ │ │ │(上下文) │ │(内存分配)│ │(虚拟内存)│ │
│ └─────────┘ └─────────┘ └─────────┘ └─────────┘ └─────────┘ └─────────┘ │
│ ┌─────────┐ ┌─────────┐ ┌─────────┐ ┌─────────┐ │
│ │ easy-fs │ │ signal- │ │ task- │ │ checker │ │
│ │(文件系统)│ │ defs │ │ manage │ │ (测试) │ │
│ │ │ │(信号定义)│ │(任务管理)│ │ │ │
│ └─────────┘ └─────────┘ └─────────┘ └─────────┘ │
└─────────────────────────────────────────────────────────────────────────────────────┘
```
## 详细依赖关系图
```
┌──────────────────────────────────────────────────────────────────┐
│ 内核章节依赖关系 │
└──────────────────────────────────────────────────────────────────┘
┌─────────────────────────────────────────────────────────────────────────────────────────────────────┐
│ │
│ ch1 ─────────────────────────────────────────────────────────────────────────────────────────► sbi│
│ │
│ ch2 ────────────────────────────────────────────────────────────────────────────────────────► sbi │
│ ├────────────────────────────────────────────────────────────────────────────────────► linker │
│ ├───────────────────────────────────────────────────────────────────────────────────► console │
│ ├─────────────────────────────────────────────────────────────────────────────► kernel-context │
│ └──────────────────────────────────────────────────────────────────────────────────► syscall │
│ │
│ ch3 ────────────────────────────────────────────────────────────────────────────────────────► sbi │
│ ├────────────────────────────────────────────────────────────────────────────────────► linker │
│ ├──────────────────────────────────────────────────────────────────────────────────► console │
│ ├─────────────────────────────────────────────────────────────────────────────► kernel-context │
│ └──────────────────────────────────────────────────────────────────────────────────► syscall │
│ │
│ ch4 ────────────────────────────────────────────────────────────────────────────────────────► sbi │
│ ├────────────────────────────────────────────────────────────────────────────────────► linker │
│ ├──────────────────────────────────────────────────────────────────────────────────► console │
│ ├─────────────────────────────────────────────────────────────────────────────► kernel-context │
│ ├──────────────────────────────────────────────────────────────────────────────► kernel-alloc │
│ ├────────────────────────────────────────────────────────────────────────────────► kernel-vm │
│ └──────────────────────────────────────────────────────────────────────────────────► syscall │
│ │
│ ch5 ────────────────────────────────────────────────────────────────────────────────────────► sbi │
│ ├────────────────────────────────────────────────────────────────────────────────────► linker │
│ ├──────────────────────────────────────────────────────────────────────────────────► console │
│ ├─────────────────────────────────────────────────────────────────────────────► kernel-context │
│ ├──────────────────────────────────────────────────────────────────────────────► kernel-alloc │
│ ├────────────────────────────────────────────────────────────────────────────────► kernel-vm │
│ ├──────────────────────────────────────────────────────────────────────────────────► syscall │
│ └──────────────────────────────────────────────────────────────────────────────► task-manage │
│ │
│ ch6 ────────────────────────────────────────────────────────────────────────────────────────► sbi │
│ ├────────────────────────────────────────────────────────────────────────────────────► linker │
│ ├──────────────────────────────────────────────────────────────────────────────────► console │
│ ├─────────────────────────────────────────────────────────────────────────────► kernel-context │
│ ├──────────────────────────────────────────────────────────────────────────────► kernel-alloc │
│ ├────────────────────────────────────────────────────────────────────────────────► kernel-vm │
│ ├──────────────────────────────────────────────────────────────────────────────────► syscall │
│ ├──────────────────────────────────────────────────────────────────────────────────► easy-fs │
│ └──────────────────────────────────────────────────────────────────────────────► task-manage │
│ │
│ ch7 ────────────────────────────────────────────────────────────────────────────────────────► sbi │
│ ├────────────────────────────────────────────────────────────────────────────────────► linker │
│ ├──────────────────────────────────────────────────────────────────────────────────► console │
│ ├─────────────────────────────────────────────────────────────────────────────► kernel-context │
│ ├──────────────────────────────────────────────────────────────────────────────► kernel-alloc │
│ ├────────────────────────────────────────────────────────────────────────────────► kernel-vm │
│ ├──────────────────────────────────────────────────────────────────────────────────► syscall │
│ ├──────────────────────────────────────────────────────────────────────────────────► easy-fs │
│ ├──────────────────────────────────────────────────────────────────────────────► task-manage │
│ ├────────────────────────────────────────────────────────────────────────────────────► signal │
│ └──────────────────────────────────────────────────────────────────────────────► signal-impl │
│ │
│ ch8 ────────────────────────────────────────────────────────────────────────────────────────► sbi │
│ ├────────────────────────────────────────────────────────────────────────────────────► linker │
│ ├──────────────────────────────────────────────────────────────────────────────────► console │
│ ├─────────────────────────────────────────────────────────────────────────────► kernel-context │
│ ├──────────────────────────────────────────────────────────────────────────────► kernel-alloc │
│ ├────────────────────────────────────────────────────────────────────────────────► kernel-vm │
│ ├──────────────────────────────────────────────────────────────────────────────────► syscall │
│ ├──────────────────────────────────────────────────────────────────────────────────► easy-fs │
│ ├──────────────────────────────────────────────────────────────────────────────► task-manage │
│ ├────────────────────────────────────────────────────────────────────────────────────► signal │
│ ├──────────────────────────────────────────────────────────────────────────────► signal-impl │
│ └──────────────────────────────────────────────────────────────────────────────────────► sync │
│ │
└─────────────────────────────────────────────────────────────────────────────────────────────────────┘
```
## 组件内部依赖关系图
```
┌─────────────────────────────────────────────────────────────────────────────────────────────────────┐
│ 组件内部依赖关系 │
└─────────────────────────────────────────────────────────────────────────────────────────────────────┘
┌─────────────────┐
│ signal-defs │ ◄──────────────────────────────────────────────────────────┐
└────────┬────────┘ │
│ │
▼ │
┌─────────────────┐ ┌─────────────────┐ │
│ syscall │ ◄───────│ user │ │
└─────────────────┘ └────────┬────────┘ │
│ │
▼ │
┌─────────────────┐ │
│ console │ │
└─────────────────┘ │
┌─────────────────┐
│ kernel-context │ ◄───────────────────────────────────────────────┐
└────────┬────────┘ │
│ │
▼ │
┌─────────────────┐ ┌─────────────────┐ │
│ signal │ ───────►│ signal-defs │ │
└────────┬────────┘ └─────────────────┘ │
│ │
▼ │
┌─────────────────┐ │
│ signal-impl │ ───────────────────────────────────────────────┘
└─────────────────┘
┌─────────────────┐
│ task-manage │ ◄───────────────────────────────────────────────┐
└─────────────────┘ │
▲ │
│ │
│ │
┌────────┴────────┐ │
│ sync │ ─────────────────────────────────────────────────┘
└─────────────────┘
```
## 章节演进依赖图
```
┌─────────────────────────────────────────────────────────────────────────────────────────────────────┐
│ 章节功能演进与依赖增加 │
└─────────────────────────────────────────────────────────────────────────────────────────────────────┘
ch1: Bare Metal
└── sbi
ch2: Batch System
└── ch1 + linker + console + kernel-context + syscall
ch3: Multiprogramming
└── ch2 (相同依赖)
ch4: Virtual Memory
└── ch3 + kernel-alloc + kernel-vm
ch5: Process Management
└── ch4 + task-manage
ch6: File System
└── ch5 + easy-fs + virtio-drivers
ch7: IPC & Signal
└── ch6 + signal + signal-impl
ch8: Concurrency
└── ch7 + sync
┌─────────────────────────────────────────────────────────────────────────────────────────────────────┐
│ 依赖累积图 │
└─────────────────────────────────────────────────────────────────────────────────────────────────────┘
ch1 ████████
sbi
ch2 ████████████████████████████████████████
sbi, linker, console, kernel-context, syscall
ch3 ████████████████████████████████████████
(与 ch2 相同)
ch4 ████████████████████████████████████████████████████████████████████████
sbi, linker, console, kernel-context, syscall, kernel-alloc, kernel-vm
ch5 ████████████████████████████████████████████████████████████████████████████████████████████████
sbi, linker, console, kernel-context, syscall, kernel-alloc, kernel-vm, task-manage
ch6 ████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████
sbi, linker, console, kernel-context, syscall, kernel-alloc, kernel-vm, task-manage, easy-fs
ch7 ████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████
sbi, linker, console, kernel-context, syscall, kernel-alloc, kernel-vm, task-manage, easy-fs, signal, signal-impl
ch8 ████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████
sbi, linker, console, kernel-context, syscall, kernel-alloc, kernel-vm, task-manage, easy-fs, signal, signal-impl, sync
```
## 依赖统计表
```
┌─────────────────────────────────────────────────────────────────────────────────────────────────────┐
│ Crate 名称 │ 内部依赖数量 │ 内部依赖列表 │
├─────────────────────────────────────────────────────────────────────────────────────────────────────┤
│ tg-rcore-tutorial-sbi │ 0 │ (无) │
│ tg-rcore-tutorial-linker │ 0 │ (无) │
│ tg-rcore-tutorial-console │ 0 │ (无) │
│ tg-rcore-tutorial-kernel-ctx │ 0 │ (无) │
│ tg-rcore-tutorial-kernel-alloc│ 0 │ (无) │
│ tg-rcore-tutorial-kernel-vm │ 0 │ (无) │
│ tg-rcore-tutorial-easy-fs │ 0 │ (无) │
│ tg-rcore-tutorial-signal-defs │ 0 │ (无) │
│ tg-rcore-tutorial-task-manage │ 0 │ (无) │
│ tg-rcore-tutorial-checker │ 0 │ (无) │
├─────────────────────────────────────────────────────────────────────────────────────────────────────┤
│ tg-rcore-tutorial-syscall │ 1 │ signal-defs │
│ tg-rcore-tutorial-signal │ 2 │ kernel-context, signal-defs │
│ tg-rcore-tutorial-sync │ 1 │ task-manage │
├─────────────────────────────────────────────────────────────────────────────────────────────────────┤
│ tg-rcore-tutorial-signal-impl │ 2 │ kernel-context, signal │
│ tg-rcore-tutorial-user │ 2 │ console, syscall │
├─────────────────────────────────────────────────────────────────────────────────────────────────────┤
│ tg-rcore-tutorial-ch1 │ 1 │ sbi │
│ tg-rcore-tutorial-ch2 │ 5 │ sbi, linker, console, kernel-context, syscall │
│ tg-rcore-tutorial-ch3 │ 5 │ sbi, linker, console, kernel-context, syscall │
│ tg-rcore-tutorial-ch4 │ 7 │ sbi, linker, console, kernel-context, syscall, │
│ │ │ kernel-alloc, kernel-vm │
│ tg-rcore-tutorial-ch5 │ 8 │ sbi, linker, console, kernel-context, syscall, │
│ │ │ kernel-alloc, kernel-vm, task-manage │
│ tg-rcore-tutorial-ch6 │ 9 │ sbi, linker, console, kernel-context, syscall, │
│ │ │ kernel-alloc, kernel-vm, task-manage, easy-fs │
│ tg-rcore-tutorial-ch7 │ 11 │ sbi, linker, console, kernel-context, syscall, │
│ │ │ kernel-alloc, kernel-vm, task-manage, easy-fs, │
│ │ │ signal, signal-impl │
│ tg-rcore-tutorial-ch8 │ 12 │ sbi, linker, console, kernel-context, syscall, │
│ │ │ kernel-alloc, kernel-vm, task-manage, easy-fs, │
│ │ │ signal, signal-impl, sync │
└─────────────────────────────────────────────────────────────────────────────────────────────────────┘
```