(1)学习资料是这些书
以及赵炯博士的完全剖析。谢谢这些大师与网上优秀的文章。
(2)看 linux 0.11 源码是 sourceinlight 4.这里附上一个安装包。fork 函数其实是内联函数,是对 中断调用的封装
由本图可知, main 函数对 fork 函数的调用。 fork 函数实际是定义在 main.c 文件中的内联函数。编译时候,不存在对 fork 的调用。直接抽取 fork 中的代码就是那些汇编代码,进入了 main 函数,对 中断 int 80 H 的 调用后,返回值存储在 EAX 寄存器里。压入的中断栈帧指向 int 80h 的下一行代码,行号 160 所示。
(3)随着调用链的压栈情况
(4) 0 号任务的 0 级栈与三级栈在哪里
(5)在系统转入 0 号任务的 用户态之前,系统代码用的是哪个栈?
如上图所示,在建立起 0 号任务之前,代码肯定要执行,要建立 GDT 表,IDT表,建立分页,建立 0 号任务所需要的数据结构,以及各种初始化。这时候代码执行肯定要配置栈。源代码显示,此时系统是以全局变量数组, user_stack ,为系统栈。当 0 号任务建立成功以后, 此栈成为了 0 号任务的三级栈。
(6)本文的 1–6 编号与后来的 笔记中的编号不具有连贯性。不同时期看的。大的标题编号是为了标识笔记的顺序。
谢谢,祝好