前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >操作系统启动顺序bios在哪里寻址机制bootloader结构建立段机制使能保护模式

操作系统启动顺序bios在哪里寻址机制bootloader结构建立段机制使能保护模式

作者头像
用户1174983
发布2018-02-05 15:43:43
1.1K0
发布2018-02-05 15:43:43
举报
文章被收录于专栏:钟绍威的专栏钟绍威的专栏

概述

在这里以x86的处理器为例 机器在启动的时候会执行第一条指令。这条指令会去执行bios,将控制权交给bios。 bios完成硬件的质检,然后将bootloader从硬盘读到内存中,执行bootloader,并将控制权交给bootloader bootloader负责使能保护模式、建立段机制以及加载操作系统,然后将控制权交给操作系统

启动顺序
启动顺序

第一条指令

执行机器的第一条指令是为了跳转到bios执行,那么需要知道bios在哪里?cpu是怎么寻址的?

bios在哪里

bios是固化在内存EPROM中的,断电不会丢失(非易失性),这样biod的地址是固定的,因为在cpu第一次加电了之后,寄存器就会有缺省的初始值,所以bios地址=寻址寄存器的缺省值就好啦。 寻址是由段寄存器以及指令指针共同完成,bios地址由CS:IP=16*CS+IP(代码段寄存器:指令指针)来表示。 CS的缺省值是FFFF0000H,IP的缺省值是0000FFF0H。 CS:IP=FFFFFFF0H

寻址机制

寻址是由段寄存器以及指令指针共同完成。因为内存很大,而且在一段时间内操作的内存具有空间局部性,所以可以将内存分为一段一段由段寄存器来定位,这一段的内存中再由指令指针来定位到具体的代码、数据 段寄存器:

  • CS——code segment,代码段寄存器
  • DS——data segment,数据段寄存器
  • ES——extra segment,附加段寄存器
  • SS——stack segment,堆栈寄存器

指令寄存器IP(instruction pointer),即是我们熟悉的程序计数器PC。 一个地址由段寄存器:指令指针=16*段寄存器+指令指针来表示 由于在这一阶段,机器还是处于实模式,实模式是20位寻址,所以单单只用段寄存器(16位)是不够的。 因为实模式只有20位寻址,所以最大可调用的空间只有1M

bios

bios是负责做硬件自检并初始化以及将bootloader加载到内存中 要保证硬盘、内存...在后续工作中不会出错。 然后将bootloader加载到内存中的0x7c00,然后跳转到0x7c00执行。

bootloader

bootloader要完成使能保护模式(实模式——>保护模式)、建立段机制以及加载操作系统

bootloader结构

bootloader在硬盘中的第一个扇区也叫主引导扇区,一个扇区是512字节,所以bootloader也是512字节。 其中有400+个字节是启动代码,负责完成bootloader需要完成的工作,剩下的字节是记录硬盘分区表。

bootloader结构
bootloader结构

建立段机制

当没有段机制,CS:IP得到的是真实的物理地址,段机制就是为了更加灵活的分段。 段机制就是中间做了一层映射,CS先定位到GDT(全局描述表)相应的段描述符,再从段描述符中找到段的起始地址,与IP组成物理地址。

使能保护模式

将CR0寄存器(control 0 register控制寄存器),的第0位设为1,这样就开启了保护模式

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2016-11-15 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 概述
  • 第一条指令
    • bios在哪里
      • 寻址机制
      • bios
      • bootloader
        • bootloader结构
          • 建立段机制
            • 使能保护模式
            领券
            问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档