diff --git a/notes/pics/compile-pipeline.png b/notes/pics/compile-pipeline.png
new file mode 100644
index 00000000..2af854c6
Binary files /dev/null and b/notes/pics/compile-pipeline.png differ
diff --git a/notes/pics/dynamic-link.png b/notes/pics/dynamic-link.png
new file mode 100644
index 00000000..f0cf19c8
Binary files /dev/null and b/notes/pics/dynamic-link.png differ
diff --git a/notes/pics/static-link.png b/notes/pics/static-link.png
new file mode 100644
index 00000000..e264f3b7
Binary files /dev/null and b/notes/pics/static-link.png differ
diff --git a/notes/计算机操作系统 - 链接.md b/notes/计算机操作系统 - 链接.md
index a06caa1b..4a86458d 100644
--- a/notes/计算机操作系统 - 链接.md
+++ b/notes/计算机操作系统 - 链接.md
@@ -31,7 +31,7 @@ gcc -o hello hello.c
这个过程大致如下:
-
+
- 预处理阶段:处理以 # 开头的预处理命令;
- 编译阶段:翻译成汇编文件;
@@ -45,7 +45,7 @@ gcc -o hello hello.c
- 符号解析:每个符号对应于一个函数、一个全局变量或一个静态变量,符号解析的目的是将每个符号引用与一个符号定义关联起来。
- 重定位:链接器通过把每个符号定义与一个内存位置关联起来,然后修改所有对这些符号的引用,使得它们指向这个内存位置。
-
+
## 目标文件
@@ -65,4 +65,4 @@ gcc -o hello hello.c
- 在给定的文件系统中一个库只有一个文件,所有引用该库的可执行目标文件都共享这个文件,它不会被复制到引用它的可执行文件中;
- 在内存中,一个共享库的 .text 节(已编译程序的机器代码)的一个副本可以被不同的正在运行的进程共享。
-
+
diff --git a/tools/diagram/src/compile-pipeline.svg b/tools/diagram/src/compile-pipeline.svg
new file mode 100644
index 00000000..81cc14c1
--- /dev/null
+++ b/tools/diagram/src/compile-pipeline.svg
@@ -0,0 +1,89 @@
+
diff --git a/tools/diagram/src/dynamic-link.svg b/tools/diagram/src/dynamic-link.svg
new file mode 100644
index 00000000..f30c7836
--- /dev/null
+++ b/tools/diagram/src/dynamic-link.svg
@@ -0,0 +1,74 @@
+
diff --git a/tools/diagram/src/static-link.svg b/tools/diagram/src/static-link.svg
new file mode 100644
index 00000000..4bdb8ea4
--- /dev/null
+++ b/tools/diagram/src/static-link.svg
@@ -0,0 +1,85 @@
+