美文网首页
从头写一个操作系统 07

从头写一个操作系统 07

作者: 半步江南 | 来源:发表于2019-04-12 14:36 被阅读0次

    lesson 9

    你需要自己去查: GDT

    本节目标: 编写 GDT

    还记得lesson 6的segmentation吗?段地址左移一位,只有16位的寻址总线却达到了20位的寻址能力。

    在32位模式下,段地址的使用方法有了变化。现在,偏移量是GDT中段描述符的索引。段描述符定义了基础地址(32位)、地址范围(20位)和其他一些标志位(只读,权限等)。更让人容易迷惑的是GDT的数据结构有点奇怪,打开os-dev.pdf看第34页,或者GDT的维基。

    编写GDT最简单的方式是定义两个段,一个是代码段,另一是数据段。让它们重叠在一起放弃对内存的保护,今后我们会用c语言来修复这个缺陷。

    第一个GDT入口必须是0x00,确保程序员管理内存是没有出错

    然后,CPU不能直接加载GDT地址,它需要先取得一个GDT的大小(16bit)、地址(32bit)的数据结构(GDT descriptor)。用lgdt操作符加载GDT descriptor即可。

    让我们直接跳转到GDT的汇编代码。这一节的理论比较复杂,最后仔细看看os-dev上的内容。

    下一节课,我们会完成32位保护模式的跳转,并且测试今天的代码。

    相关文章

      网友评论

          本文标题:从头写一个操作系统 07

          本文链接:https://www.haomeiwen.com/subject/ldscwqtx.html