• 计算机是如何启动的


    计算机是如何启动的呢?

    要启动一台计算机,必须要让启动程序先运行,机器才能随之启动。然而通常又是,只有在机器启动后,程序才能运行,这本身就是自相矛盾的。pull oneself up by one`s bootstrap,也就是某人通过自己的鞋带将自己拉起来,也显然是不可能的。

    所以必须实现一个机制,让操作系统还未运行的时候,就注入一段启动程序在内存中运行,这就是BIOS程序。当你点击电源按钮后,CPU会自动寻址到0xFFFF0,然后读取BIOS程序到内存中执行,BIOS会进行硬件自检,即检查计算机硬件是否正常,如果一切正常,BIOS会进入下一个启动程序,然而它并不知道该启动程序在哪里,可能在磁盘上,也可能在U盘中,也有可能通过网卡获取,所以需要用户自己选择,计算机默认会选择第一个(通常是磁盘),当然这个顺序是可以调整的,这就是Boot Sequence。

    如果是从磁盘启动,那么计算机会读取磁盘的第一个扇区MBR,也就是引导程序(最前面的512B,主引导记录 Master Boot Record)。

     MBR由三个部分组成:

      (1) 第1-446字节:调用操作系统的机器码(boot loader)

      (2) 第447-510字节:分区表(Partition table)。

      (3) 第511-512字节:主引导记录签名(0x55和0xAA)。

    其中,第二部分"分区表"的作用,是将硬盘分成若干个区,因为每个区可以安装不同的操作系统。如果最后两个字节-主引导记录签名是0x55和0xAA,那么说明该设备可以启动(如果不是的话,就在Boot Sequence中依次选择下一项进行启动,例如U盘)。

    如果设备可以启动,那么计算机会首先读取"主引导记录"前面446字节的机器码,运行“启动管理器”(boot loader,现在最流行的启动管理器是Grub),由用户选择启动哪一个操作系统。之后,boot loader会定位到某个特定的磁盘分区,并将操作系统内核(/boot)加载到内存,内核加载成功后,第一个运行的程序是/sbin/init,所有其他进程都是由init进程fork出来的。

     
  • 相关阅读:
    51nod1260
    51nod1327
    51nod1342
    51nod1479
    LOJ6088
    51nod1634
    51nod1778
    JAVA循环结构学校上机经常遇到的几题 笔记
    B. The Number of Products(Codeforces Round #585 (Div. 2))
    A. Yellow Cards ( Codeforces Round #585 (Div. 2) 思维水题
  • 原文地址:https://www.cnblogs.com/james111/p/7441061.html
Copyright © 2020-2023  润新知