setup.s 总结——Linux-0.11 剖析笔记(四)
生活随笔
收集整理的这篇文章主要介绍了
setup.s 总结——Linux-0.11 剖析笔记(四)
小编觉得挺不错的,现在分享给大家,帮大家做个参考.
上一篇文章 setup.s 解读——Linux-0.11 剖析笔记(三) 详细地解释了 setup.s 的代码,整个代码完成的任务有:
- 保存光标的位置
- 获取从 1M 处开始的扩展内存大小
- 获取显示模式
- 检查显示方式(EGA/VGA)并获取参数
- 复制硬盘参数表(包括检查系统是否有第2个硬盘)
但是,要进入保护模式,上面的有些步骤不是必须的。
进入保护模式的主要步骤有:
需要强调的是,在 setup.s 程序执行结束后,系统模块 system 被移动到物理地址 0 开始处,从位置 0x90000 开始处则存放内核将会使用的一些参数,示意图如下图:
此时临时全局表中有三个描述符,第一个是 NULL,不使用;另外两个分别是代码段描述符和数据段描述符,它们都指向系统模块的起始处,即物理地址 0 处。这样当 setup . s 中执行最后一条指令
jmp 0,8就会跳到 head.s 程序的起始位置,这条指令中的 ‘8’ 是段选择符,即 GDT 中的代码段描述符。‘0’ 是代码段中的偏移值。
这里的全局描述符表,是一个临时表,仅仅是为了进入保护模式。进入保护模式后,会执行 head.s 中的代码,head.s 会设置真正的全局描述符表。
参考资料
1《Linux内核完全剖析》(赵炯,机械工业出版社,2006)
2《Orange’s:一个操作系统的实现》(于渊)
总结
以上是生活随笔为你收集整理的setup.s 总结——Linux-0.11 剖析笔记(四)的全部内容,希望文章能够帮你解决所遇到的问题。
- 上一篇: router vue 动态改变url_v
- 下一篇: head.s 剖析——Linux-0.1