-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathRISCV-Linux Kernel Analysis Experiment Manual.aux
174 lines (174 loc) · 20.5 KB
/
RISCV-Linux Kernel Analysis Experiment Manual.aux
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
\relax
\providecommand\hyper@newdestlabel[2]{}
\providecommand\HyperFirstAtBeginDocument{\AtBeginDocument}
\HyperFirstAtBeginDocument{\ifx\hyper@anchor\@undefined
\global\let\oldnewlabel\newlabel
\gdef\newlabel#1#2{\newlabelxx{#1}#2}
\gdef\newlabelxx#1#2#3#4#5#6{\oldnewlabel{#1}{{#2}{#3}}}
\AtEndDocument{\ifx\hyper@anchor\@undefined
\let\newlabel\oldnewlabel
\fi}
\fi}
\global\let\hyper@last\relax
\gdef\HyperFirstAtBeginDocument#1{#1}
\providecommand*\HyPL@Entry[1]{}
\abx@aux@refcontext{nty/global//global/global}
\HyPL@Entry{0<</S/A>>}
\pgfsyspdfmark {pgfid1}{28202053}{16785393}
\HyPL@Entry{1<</S/r>>}
\@writefile{lof}{\contentsline {figure}{\numberline {1}{\ignorespaces 《庖丁解牛Linux操作系统分析》\relax }}{ii}{figure.caption.1}\protected@file@percent }
\HyPL@Entry{5<</S/D>>}
\@writefile{toc}{\contentsline {chapter}{\numberline {1}实验一:反汇编一个简单的 C 程序}{1}{chapter.1}\protected@file@percent }
\@writefile{lof}{\addvspace {10\p@ }}
\@writefile{lot}{\addvspace {10\p@ }}
\@writefile{toc}{\contentsline {section}{\numberline {1.1}反汇编一个简单的 C 程序}{1}{section.1.1}\protected@file@percent }
\@writefile{toc}{\contentsline {subsection}{\numberline {1.1.1}将OS烧录到Micro-SD卡上}{1}{subsection.1.1.1}\protected@file@percent }
\@writefile{lof}{\contentsline {figure}{\numberline {1.1}{\ignorespaces BalenaEtcher界面\relax }}{1}{figure.caption.3}\protected@file@percent }
\@writefile{toc}{\contentsline {subsection}{\numberline {1.1.2}ssh连接visionfive 2}{1}{subsection.1.1.2}\protected@file@percent }
\@writefile{toc}{\contentsline {section}{\numberline {1.2}反编译c语言代码}{2}{section.1.2}\protected@file@percent }
\@writefile{toc}{\contentsline {chapter}{\numberline {2}实验二:完成一个简单的时间片轮转多道程序内核代码}{5}{chapter.2}\protected@file@percent }
\@writefile{lof}{\addvspace {10\p@ }}
\@writefile{lot}{\addvspace {10\p@ }}
\@writefile{toc}{\contentsline {section}{\numberline {2.1}串口连接开发板}{5}{section.2.1}\protected@file@percent }
\@writefile{lof}{\contentsline {figure}{\numberline {2.1}{\ignorespaces 系统配置\relax }}{5}{figure.caption.4}\protected@file@percent }
\@writefile{lof}{\contentsline {figure}{\numberline {2.2}{\ignorespaces 引脚连接实物图\relax }}{5}{figure.caption.5}\protected@file@percent }
\@writefile{toc}{\contentsline {section}{\numberline {2.2}mincom串口工具下载与设置}{6}{section.2.2}\protected@file@percent }
\@writefile{lof}{\contentsline {figure}{\numberline {2.3}{\ignorespaces minicom设置界面1\relax }}{6}{figure.caption.6}\protected@file@percent }
\@writefile{lof}{\contentsline {figure}{\numberline {2.4}{\ignorespaces minicom设置界面2\relax }}{6}{figure.caption.7}\protected@file@percent }
\@writefile{lof}{\contentsline {figure}{\numberline {2.5}{\ignorespaces minicom设置界面3\relax }}{6}{figure.caption.8}\protected@file@percent }
\@writefile{lof}{\contentsline {figure}{\numberline {2.6}{\ignorespaces minicom启动\relax }}{7}{figure.caption.9}\protected@file@percent }
\@writefile{toc}{\contentsline {section}{\numberline {2.3}CH340系列串口驱动占用}{7}{section.2.3}\protected@file@percent }
\@writefile{toc}{\contentsline {section}{\numberline {2.4}为编译Linux内核做准备}{8}{section.2.4}\protected@file@percent }
\@writefile{toc}{\contentsline {section}{\numberline {2.5}RISC-V架构MyKernel内核的构建}{8}{section.2.5}\protected@file@percent }
\@writefile{toc}{\contentsline {subsection}{\numberline {2.5.1}实验目的和实验内容}{8}{subsection.2.5.1}\protected@file@percent }
\@writefile{toc}{\contentsline {subsection}{\numberline {2.5.2}了解riscv}{8}{subsection.2.5.2}\protected@file@percent }
\@writefile{lof}{\contentsline {figure}{\numberline {2.7}{\ignorespaces RISCV 寄存器\relax }}{9}{figure.caption.10}\protected@file@percent }
\@writefile{toc}{\contentsline {subsection}{\numberline {2.5.3}制作我们的简易调度器}{10}{subsection.2.5.3}\protected@file@percent }
\@writefile{toc}{\contentsline {section}{\numberline {2.6}编译RISC-V架构MyKernel内核}{22}{section.2.6}\protected@file@percent }
\@writefile{toc}{\contentsline {section}{\numberline {2.7}MyKernel内核移植VisionFive2开发板}{23}{section.2.7}\protected@file@percent }
\@writefile{toc}{\contentsline {subsection}{\numberline {2.7.1}Ubuntu安装和配置TFTP服务器}{23}{subsection.2.7.1}\protected@file@percent }
\@writefile{lof}{\contentsline {figure}{\numberline {2.8}{\ignorespaces tftpd-hpa配置文件修改\relax }}{23}{figure.caption.11}\protected@file@percent }
\@writefile{toc}{\contentsline {section}{\numberline {2.8}Uboot 加载 MyKernel 内核和根文件系统}{23}{section.2.8}\protected@file@percent }
\@writefile{toc}{\contentsline {subsection}{\numberline {2.8.1}配置TFTP服务}{23}{subsection.2.8.1}\protected@file@percent }
\@writefile{lof}{\contentsline {figure}{\numberline {2.9}{\ignorespaces 一个简单的时间片轮转多道程序\relax }}{24}{figure.caption.12}\protected@file@percent }
\@writefile{toc}{\contentsline {section}{\numberline {2.9}用协程完成实验}{24}{section.2.9}\protected@file@percent }
\@writefile{lof}{\contentsline {figure}{\numberline {2.10}{\ignorespaces 使用协程实现时间片轮转多道程序\relax }}{28}{figure.caption.13}\protected@file@percent }
\@writefile{toc}{\contentsline {chapter}{\numberline {3}实验三:跟踪分析 Linux 内核的启动过程}{29}{chapter.3}\protected@file@percent }
\@writefile{lof}{\addvspace {10\p@ }}
\@writefile{lot}{\addvspace {10\p@ }}
\@writefile{toc}{\contentsline {section}{\numberline {3.1}下载RISC-V工具链}{29}{section.3.1}\protected@file@percent }
\@writefile{lof}{\contentsline {figure}{\numberline {3.1}{\ignorespaces RISC-V工具链\relax }}{29}{figure.caption.14}\protected@file@percent }
\@writefile{toc}{\contentsline {section}{\numberline {3.2}安装QEMU}{30}{section.3.2}\protected@file@percent }
\@writefile{toc}{\contentsline {section}{\numberline {3.3}编译OpenSBI}{30}{section.3.3}\protected@file@percent }
\@writefile{lof}{\contentsline {figure}{\numberline {3.2}{\ignorespaces 产生的OpenSBI固件\relax }}{30}{figure.caption.15}\protected@file@percent }
\@writefile{lof}{\contentsline {figure}{\numberline {3.3}{\ignorespaces OpenSBI引导操作系统\relax }}{31}{figure.caption.16}\protected@file@percent }
\@writefile{toc}{\contentsline {section}{\numberline {3.4}编译Linux Kernel}{31}{section.3.4}\protected@file@percent }
\@writefile{lof}{\contentsline {figure}{\numberline {3.4}{\ignorespaces 修改Makefile\relax }}{32}{figure.caption.17}\protected@file@percent }
\@writefile{lof}{\contentsline {figure}{\numberline {3.5}{\ignorespaces linux内核目录\relax }}{32}{figure.caption.18}\protected@file@percent }
\@writefile{lof}{\contentsline {figure}{\numberline {3.6}{\ignorespaces boot内核目录\relax }}{32}{figure.caption.19}\protected@file@percent }
\@writefile{toc}{\contentsline {section}{\numberline {3.5}制作根文件系统}{32}{section.3.5}\protected@file@percent }
\@writefile{lof}{\contentsline {figure}{\numberline {3.7}{\ignorespaces Target options\relax }}{33}{figure.caption.20}\protected@file@percent }
\@writefile{lof}{\contentsline {figure}{\numberline {3.8}{\ignorespaces 选择 RISCV\relax }}{33}{figure.caption.21}\protected@file@percent }
\@writefile{lof}{\contentsline {figure}{\numberline {3.9}{\ignorespaces 选择 root filesystem\relax }}{33}{figure.caption.22}\protected@file@percent }
\@writefile{toc}{\contentsline {section}{\numberline {3.6}运行简易Linux内核}{33}{section.3.6}\protected@file@percent }
\@writefile{lof}{\contentsline {figure}{\numberline {3.10}{\ignorespaces output files\relax }}{34}{figure.caption.23}\protected@file@percent }
\@writefile{lof}{\contentsline {figure}{\numberline {3.11}{\ignorespaces images output files\relax }}{34}{figure.caption.24}\protected@file@percent }
\@writefile{lof}{\contentsline {figure}{\numberline {3.12}{\ignorespaces 启动界面\relax }}{35}{figure.caption.25}\protected@file@percent }
\@writefile{lof}{\contentsline {figure}{\numberline {3.13}{\ignorespaces 用户登录\relax }}{35}{figure.caption.26}\protected@file@percent }
\@writefile{lof}{\contentsline {figure}{\numberline {3.14}{\ignorespaces 进入shell\relax }}{35}{figure.caption.27}\protected@file@percent }
\@writefile{lof}{\contentsline {figure}{\numberline {3.15}{\ignorespaces 进入gdb\relax }}{36}{figure.caption.28}\protected@file@percent }
\@writefile{lof}{\contentsline {figure}{\numberline {3.16}{\ignorespaces 建立gdb连接\relax }}{36}{figure.caption.29}\protected@file@percent }
\@writefile{lof}{\contentsline {figure}{\numberline {3.17}{\ignorespaces gdb显示start\_kernel函数\relax }}{37}{figure.caption.30}\protected@file@percent }
\@writefile{lof}{\contentsline {figure}{\numberline {3.18}{\ignorespaces 执行到start\_kernel断点处\relax }}{37}{figure.caption.31}\protected@file@percent }
\@writefile{lof}{\contentsline {figure}{\numberline {3.19}{\ignorespaces 显示start\_kernel断点处信息\relax }}{37}{figure.caption.32}\protected@file@percent }
\@writefile{lof}{\contentsline {figure}{\numberline {3.20}{\ignorespaces 进程示意图\relax }}{38}{figure.caption.33}\protected@file@percent }
\@writefile{lof}{\contentsline {figure}{\numberline {3.21}{\ignorespaces arch\_call\_rest\_init\relax }}{38}{figure.caption.34}\protected@file@percent }
\@writefile{lof}{\contentsline {figure}{\numberline {3.22}{\ignorespaces rest\_init\relax }}{39}{figure.caption.35}\protected@file@percent }
\@writefile{lof}{\contentsline {figure}{\numberline {3.23}{\ignorespaces 进入登录界面\relax }}{39}{figure.caption.36}\protected@file@percent }
\@writefile{toc}{\contentsline {chapter}{\numberline {4}实验四:使用库函数API和C代码中嵌入汇编代码两种方式使用同一个系统调用}{40}{chapter.4}\protected@file@percent }
\@writefile{lof}{\addvspace {10\p@ }}
\@writefile{lot}{\addvspace {10\p@ }}
\@writefile{toc}{\contentsline {section}{\numberline {4.1}使用SSH连接starfive visionfive 2}{40}{section.4.1}\protected@file@percent }
\@writefile{lof}{\contentsline {figure}{\numberline {4.1}{\ignorespaces starfive visionfive 2 Shell\relax }}{40}{figure.caption.37}\protected@file@percent }
\@writefile{toc}{\contentsline {section}{\numberline {4.2}使用man查看write函数}{40}{section.4.2}\protected@file@percent }
\@writefile{lof}{\contentsline {figure}{\numberline {4.2}{\ignorespaces man 2 write\relax }}{40}{figure.caption.38}\protected@file@percent }
\@writefile{toc}{\contentsline {section}{\numberline {4.3}C语言调用write函数}{41}{section.4.3}\protected@file@percent }
\@writefile{lof}{\contentsline {figure}{\numberline {4.3}{\ignorespaces local\_wirte运行成功\relax }}{41}{figure.caption.39}\protected@file@percent }
\@writefile{toc}{\contentsline {section}{\numberline {4.4}RISC-V内联汇编调用write函数}{41}{section.4.4}\protected@file@percent }
\@writefile{lof}{\contentsline {figure}{\numberline {4.4}{\ignorespaces asm\_write运行成功\relax }}{42}{figure.caption.40}\protected@file@percent }
\@writefile{toc}{\contentsline {section}{\numberline {4.5}内联汇编解释}{42}{section.4.5}\protected@file@percent }
\@writefile{toc}{\contentsline {chapter}{\numberline {5}实验五:分析 system call 中断处理过程}{44}{chapter.5}\protected@file@percent }
\@writefile{lof}{\addvspace {10\p@ }}
\@writefile{lot}{\addvspace {10\p@ }}
\@writefile{toc}{\contentsline {section}{\numberline {5.1}MenuOS迁移到RISC-V架构}{44}{section.5.1}\protected@file@percent }
\@writefile{lof}{\contentsline {figure}{\numberline {5.1}{\ignorespaces 编译和运行\relax }}{45}{figure.caption.41}\protected@file@percent }
\@writefile{toc}{\contentsline {section}{\numberline {5.2}CWrite和的编写}{45}{section.5.2}\protected@file@percent }
\@writefile{lof}{\contentsline {figure}{\numberline {5.2}{\ignorespaces MenuOS help\relax }}{46}{figure.caption.42}\protected@file@percent }
\@writefile{lof}{\contentsline {figure}{\numberline {5.3}{\ignorespaces MenuOS write\relax }}{46}{figure.caption.43}\protected@file@percent }
\@writefile{lof}{\contentsline {figure}{\numberline {5.4}{\ignorespaces MenuOS write-asm\relax }}{47}{figure.caption.44}\protected@file@percent }
\@writefile{toc}{\contentsline {section}{\numberline {5.3}GDB调试sys\_write函数}{47}{section.5.3}\protected@file@percent }
\@writefile{lof}{\contentsline {figure}{\numberline {5.5}{\ignorespaces start-gdb.sh\relax }}{47}{figure.caption.45}\protected@file@percent }
\@writefile{lof}{\contentsline {figure}{\numberline {5.6}{\ignorespaces target remote:1234\relax }}{47}{figure.caption.46}\protected@file@percent }
\@writefile{lof}{\contentsline {figure}{\numberline {5.7}{\ignorespaces 最终界面\relax }}{48}{figure.caption.47}\protected@file@percent }
\@writefile{lof}{\contentsline {figure}{\numberline {5.8}{\ignorespaces gdb分屏\relax }}{48}{figure.caption.48}\protected@file@percent }
\@writefile{lof}{\contentsline {figure}{\numberline {5.9}{\ignorespaces MenuOS加载shell\relax }}{49}{figure.caption.49}\protected@file@percent }
\@writefile{lof}{\contentsline {figure}{\numberline {5.10}{\ignorespaces MenuOS运行write-asm\relax }}{49}{figure.caption.50}\protected@file@percent }
\@writefile{lof}{\contentsline {figure}{\numberline {5.11}{\ignorespaces handle\_exception 断点处\relax }}{49}{figure.caption.51}\protected@file@percent }
\@writefile{lof}{\contentsline {figure}{\numberline {5.12}{\ignorespaces ksys\_write 断点处\relax }}{50}{figure.caption.52}\protected@file@percent }
\@writefile{lof}{\contentsline {figure}{\numberline {5.13}{\ignorespaces 执行下一条汇编语句\relax }}{50}{figure.caption.53}\protected@file@percent }
\@writefile{lof}{\contentsline {figure}{\numberline {5.14}{\ignorespaces system\_call 调用过程\relax }}{50}{figure.caption.54}\protected@file@percent }
\@writefile{toc}{\contentsline {chapter}{\numberline {6}实验六:分析 Linux 内核创建一个新进程的过程}{52}{chapter.6}\protected@file@percent }
\@writefile{lof}{\addvspace {10\p@ }}
\@writefile{lot}{\addvspace {10\p@ }}
\@writefile{toc}{\contentsline {section}{\numberline {6.1}阅读理解 task\_struct 数据结构}{52}{section.6.1}\protected@file@percent }
\@writefile{toc}{\contentsline {section}{\numberline {6.2}分析 fork 函数对应的内核处理过程 sys\_clone}{52}{section.6.2}\protected@file@percent }
\@writefile{lof}{\contentsline {figure}{\numberline {6.1}{\ignorespaces 系统调用 sys\_clone\relax }}{52}{figure.caption.55}\protected@file@percent }
\@writefile{lof}{\contentsline {figure}{\numberline {6.2}{\ignorespaces 创建一个新进程\relax }}{57}{figure.caption.56}\protected@file@percent }
\@writefile{toc}{\contentsline {section}{\numberline {6.3}GDB 跟踪分析sys\_clone}{57}{section.6.3}\protected@file@percent }
\@writefile{lof}{\contentsline {figure}{\numberline {6.3}{\ignorespaces 打入断点\relax }}{58}{figure.caption.57}\protected@file@percent }
\@writefile{lof}{\contentsline {figure}{\numberline {6.4}{\ignorespaces fork-new\relax }}{59}{figure.caption.58}\protected@file@percent }
\@writefile{lof}{\contentsline {figure}{\numberline {6.5}{\ignorespaces \_\_se\_sys\_clone\relax }}{59}{figure.caption.59}\protected@file@percent }
\@writefile{lof}{\contentsline {figure}{\numberline {6.6}{\ignorespaces \_\_se\_sys\_clone\relax }}{59}{figure.caption.60}\protected@file@percent }
\@writefile{lof}{\contentsline {figure}{\numberline {6.7}{\ignorespaces copy\_process\relax }}{60}{figure.caption.61}\protected@file@percent }
\@writefile{lof}{\contentsline {figure}{\numberline {6.8}{\ignorespaces 复制所有的进程信息\relax }}{60}{figure.caption.62}\protected@file@percent }
\@writefile{lof}{\contentsline {figure}{\numberline {6.9}{\ignorespaces copy\_thread\relax }}{60}{figure.caption.63}\protected@file@percent }
\@writefile{lof}{\contentsline {figure}{\numberline {6.10}{\ignorespaces 返回子进程\relax }}{61}{figure.caption.64}\protected@file@percent }
\@writefile{lof}{\contentsline {figure}{\numberline {6.11}{\ignorespaces MenuOS\relax }}{61}{figure.caption.65}\protected@file@percent }
\@writefile{toc}{\contentsline {chapter}{\numberline {7}实验七:Linux 内核如何装载和启动一个可执行程}{62}{chapter.7}\protected@file@percent }
\@writefile{lof}{\addvspace {10\p@ }}
\@writefile{lot}{\addvspace {10\p@ }}
\@writefile{toc}{\contentsline {section}{\numberline {7.1}程序的编译过程}{62}{section.7.1}\protected@file@percent }
\@writefile{lof}{\contentsline {figure}{\numberline {7.1}{\ignorespaces 编译过程\relax }}{62}{figure.caption.66}\protected@file@percent }
\@writefile{lof}{\contentsline {figure}{\numberline {7.2}{\ignorespaces \#include 替换\relax }}{63}{figure.caption.67}\protected@file@percent }
\@writefile{lof}{\contentsline {figure}{\numberline {7.3}{\ignorespaces 添加标示\relax }}{63}{figure.caption.68}\protected@file@percent }
\@writefile{lof}{\contentsline {figure}{\numberline {7.4}{\ignorespaces execve函数信\relax }}{65}{figure.caption.69}\protected@file@percent }
\@writefile{lof}{\contentsline {figure}{\numberline {7.5}{\ignorespaces local\_exec\relax }}{66}{figure.caption.70}\protected@file@percent }
\@writefile{toc}{\contentsline {section}{\numberline {7.2}动态链接}{66}{section.7.2}\protected@file@percent }
\@writefile{lof}{\contentsline {figure}{\numberline {7.6}{\ignorespaces 文件大小比较\relax }}{66}{figure.caption.71}\protected@file@percent }
\@writefile{lof}{\contentsline {figure}{\numberline {7.7}{\ignorespaces 可执行程序装载时动态链接和运行时动态链接\relax }}{68}{figure.caption.72}\protected@file@percent }
\@writefile{toc}{\contentsline {section}{\numberline {7.3}gdb 跟踪分析一个 execve 系统调用}{68}{section.7.3}\protected@file@percent }
\@writefile{lof}{\contentsline {figure}{\numberline {7.8}{\ignorespaces 调试 exec\relax }}{70}{figure.caption.73}\protected@file@percent }
\@writefile{lof}{\contentsline {figure}{\numberline {7.9}{\ignorespaces SYSCALL\_DEFINE3\relax }}{70}{figure.caption.74}\protected@file@percent }
\@writefile{lof}{\contentsline {figure}{\numberline {7.10}{\ignorespaces b do\_execve \relax }}{70}{figure.caption.75}\protected@file@percent }
\@writefile{lof}{\contentsline {figure}{\numberline {7.11}{\ignorespaces b do\_execveat\_common \relax }}{71}{figure.caption.76}\protected@file@percent }
\@writefile{lof}{\contentsline {figure}{\numberline {7.12}{\ignorespaces hello world!\relax }}{71}{figure.caption.77}\protected@file@percent }
\@writefile{lof}{\contentsline {figure}{\numberline {7.13}{\ignorespaces schedule\relax }}{71}{figure.caption.78}\protected@file@percent }
\@writefile{lof}{\contentsline {figure}{\numberline {7.14}{\ignorespaces Shell 程序中断\relax }}{72}{figure.caption.79}\protected@file@percent }
\@writefile{toc}{\contentsline {chapter}{\numberline {8}实验八:理解进程调度时机跟踪分析进程调度与进程切换的过程}{73}{chapter.8}\protected@file@percent }
\@writefile{lof}{\addvspace {10\p@ }}
\@writefile{lot}{\addvspace {10\p@ }}
\@writefile{toc}{\contentsline {section}{\numberline {8.1}理解 Linux 系统中进程调度的时机}{73}{section.8.1}\protected@file@percent }
\@writefile{toc}{\contentsline {section}{\numberline {8.2}gdb 跟踪分析 schedule()函数}{73}{section.8.2}\protected@file@percent }
\@writefile{lof}{\contentsline {figure}{\numberline {8.1}{\ignorespaces gdb schedule\relax }}{73}{figure.caption.80}\protected@file@percent }
\@writefile{lof}{\contentsline {figure}{\numberline {8.2}{\ignorespaces riscv\_current\_is\_tp\relax }}{74}{figure.caption.81}\protected@file@percent }
\@writefile{lof}{\contentsline {figure}{\numberline {8.3}{\ignorespaces jump to schedule\relax }}{74}{figure.caption.82}\protected@file@percent }
\@writefile{lof}{\contentsline {figure}{\numberline {8.4}{\ignorespaces p *tsk\relax }}{75}{figure.caption.83}\protected@file@percent }
\@writefile{lof}{\contentsline {figure}{\numberline {8.5}{\ignorespaces b \_\_schedule\relax }}{76}{figure.caption.84}\protected@file@percent }
\@writefile{lof}{\contentsline {figure}{\numberline {8.6}{\ignorespaces 调用 context\_switch 函数\relax }}{76}{figure.caption.85}\protected@file@percent }
\@writefile{lof}{\contentsline {figure}{\numberline {8.7}{\ignorespaces 调用 switch\_to\relax }}{77}{figure.caption.86}\protected@file@percent }
\@writefile{lof}{\contentsline {figure}{\numberline {8.8}{\ignorespaces b \_\_switch\_to\relax }}{77}{figure.caption.87}\protected@file@percent }
\@writefile{toc}{\contentsline {section}{\numberline {8.3}分析 switch\_to 中的汇编代码}{77}{section.8.3}\protected@file@percent }
\@writefile{toc}{\contentsline {section}{\numberline {8.4}分析汇编代码}{78}{section.8.4}\protected@file@percent }
\@writefile{toc}{\contentsline {section}{\numberline {8.5}理解进程上下文的切换机制和中断上下文切换的关系}{81}{section.8.5}\protected@file@percent }
\abx@aux@read@bbl@mdfivesum{nobblfile}
\gdef \@abspage@last{87}