美文网首页
操作系统(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)的启动

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

  • Linux0.11源码学习--操作系统启动

    Linux0.11启动过程 需要重点记住:cpu按照pc寄存器的值取值执行,取值后pc的值会加一 系统加电 从bi...

  • Linux0.11缓冲区机制详解

    相关阅读(点击即可阅读哦~):Linux0.11写时复制机制详解LINUX0.11信号机制Linux0.11共享内...

  • TinyOS

    分享一个自写的,模仿Linux0.11系统的一个小型操作系统。此源码比较简短,功能虽然有限,但是可以对Linux系...

  • Linux0.11内核启动流程

    1 内核镜像 在讲解 Linux 内核启动流程之前,先需要了解一下内核镜像的组成。Linux 内核映像由 boot...

  • 操作系统(linux0.11)的系统调用

    什么是系统调用 Linux内核中设置了一组用于实现各种系统功能的子程序,称为系统调用.系统调用和普通库函数调用非常...

  • 03 计算器运行过程和网络

    1 操作系统的启动流程 启动bios程序——>找到操作系统启动介质——>把系统加载到内存——>CPU运行 2 应用...

  • 计算机操作系统笔记(五)

    操作系统用户界面 3.1操作系统的启动过程3.2操着系统的生成3.3用户界面3.4系统调用 3.1操作系统的启动过...

  • ucore学习

    1、启动操作系统的bootloader,用于了解操作系统启动前的状态和要做的准备工作,了解运行操作系统的硬件支持,...

  • init、systemd、systemctl是什么

    init进程的来历 linux操作系统的启动过程 Linux 操作系统的启动首先从 BIOS 开始 接下来进入 b...

网友评论

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

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