美文网首页
操作系统(linux0.11)的启动

操作系统(linux0.11)的启动

作者: 转相因 | 来源:发表于2019-04-13 21:27 被阅读0次

    概述

    linux系统启动涉及三个汇编文件,bootsect.s,setup.s,head.s,下图为启动盘的代码模块布局


    启动盘布局

    主要流程

    1. x86 pc电源启动时,cpu处于实模式,此时cs置为0xFFFF,IP置为0x0000,执行0xFFFF0代码,此区域为ROM BIOS映射区

    2. ROM BIOS映射区代码会物理地址0处初始化中断向量表,检查RAM,键盘,显示器,软硬磁盘,并将磁盘0磁道0扇区(bootsect.s)读入0x7c00处,此代码为操作系统引导代码,设置cs=0x07c0,ip=0x0000

    3. 引导扇区代码将0x7c00的512字节移动到0x90000处(为后面system模块腾出内存),跳转到0x9000x处继续执行,将setup的4个扇区内容读到内存0x90200处,并继续将system模块加载到内存 0x10000处,跳转到setpup处执行

    4. setup的代码主要作用是利用ROM BIOS中断读取机器数据,并将数据保存在0x90000处,然后将system模块移动到 0x00000处(system 模块中代码的地址也即等于实际的物理地址。便于对内核代码和数据的操作),临时设置中断描述符表( idt )和全局描述符表( gdt ),进入保护模式,跳转到system模块最前面的head.s处执行


      setup.s结束后的内存映像

    5.head的代码主要作用是重置中断描述符表( idt )和全局描述符表( gdt ),接着设置管理内存的分页处理机制,将页目录表放在绝对物理地址 0 开始处(本程序会被覆盖),最后去运行main函数


    head.s结束后的内存映像

    相关文章

      网友评论

          本文标题:操作系统(linux0.11)的启动

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