基础知识.计算机的启动过程——从按下电源键到进入操作系统

计算机启动过程

BOOTSTRAP

计算机启动被称作 BOOT,我们会在开机时看到在显示器上的第一行就是 BOOT,但它的翻译的意思是靴子,BOOT 来自于一个单词 BOOTSTRAP。

BOOTSTRAP 的意思是 靴带,来自短语:“Pull oneself up by one’s bootstrap”——用靴带将自己拉起来

计算机启动是一个很矛盾的过程:必须先运行程序,然后计算机才能启动,但是计算机不启动就无法运行程序,最后只能将一小段程序装进内存,然后计算机才能正常运行。

流程图

image-20230811112234217

流程

上电

按下电源开关,首先通电的是主板,主板控制芯片组会向 CPU 发送 reset 信号,当稳定供电后撤回信号,CPU 从 FFFF0H 处执行指令,跳转到 BIOS 的地址范围

BIOS

BIOS 启动,先进行自检,检查内存、显卡、磁盘等关键设备是否存在功能异常,会有蜂鸣器汇报错误,无错误自检飞快结束

BIOS 调用显卡 BIOS 代码,通常在 C0000H 处(此时显示器已经可以显示显卡 BIOS 程序信息,或许是个 logo?)

BIOS 调用其他关键设备的 BIOS 代码来初始化他们

启动顺序

BIOS 将控制权交给其他设备,可以是硬盘,U盘或者网络,BIOS 会尝试一一尝试启动他们,知道成功或者最终关闭或重启。

主引导记录

BIOS 会从可使用启动顺序的第一位存储设备中读取设备的 MBR,并将程序放到内存的 0x7C000 的内存中,并跳转到扇区的引导程序中执行。

MBR 的第 447-510 共 64 字节保存的是分区表,即将硬盘分为若干个区,一个硬盘最多分四个主分区,每个 16 字节,主分区里只有一个是激活分区,用于接收 BIOS 的控制权,第一个字节位 0x80 即表示为激活分区。

硬盘启动

  1. 卷引导记录

    计算机读取激活分区的第一个扇区——卷引导记录 VBR

  2. 拓展分区和逻辑分区

    分区里的分区被称为逻辑分区

    除了可激活分区,还可以仅有一个区可以被定义为拓展分区,拓展分区第一个扇区——拓展引导记录包含一张 64 字节分区表,但最多只能有两个逻辑分区,但是可以通过第二个逻辑分区的第一个扇区的分区表中找到第三个逻辑分区地址,直至某个逻辑分区仅有自己,所以,拓展分区可以包含无数个逻辑分区

    实际上很少通过这种方式启动操作系统。

  3. 启动管理器

    计算机读取主引导记录前 446 字节后,暂时不交出控制权,而是运行实现安装的“启动管理器”,交由用户选择启动哪一个操作系统。

操作系统

选择想要进入的操作系统,控制权交给操作系统,引导程序会将存储设备中的操作系统内核载入内存,待到系统内核完成初始化后,即可供用户交互。

一些名词解释

RTC

RTC(Real-Time Clock)实时时钟芯片,一般由主板电池供电,在主板未完全通电时一直执行,有时会出现主板电池电压不足导致系统时间变慢的情况。

CMOS

CMOS(Complementary-Metal-OxideSemiconductor)互补金属氧化物半导体,一般指电脑上主板 PCH 南桥芯片的 RAM 可读写存储器,用于存储计算机基本启动信息(日期、时间、启动设置)。

EC

EC(Embedded-Controller)嵌入式控制器,与 BIOS 合作控制指示灯风扇等等。

South Bridge

South Bridge南桥芯片,一般位于 PCI 插槽附近,进行输入输出的控制,发展方向主要是集成更多的功能——网卡、RAID、IEEE 13294、WIFI 等。

BIOS

BIOS(Basic-Input/Output-System)基本输入输出系统——一组保存着计算机最重要的基本输入输出的程序、开机后自检程序、系统自启动程序,并固化到计算机内主板上的一个ROM芯片上的程序。

BOOTLOADER

BOOTLOADER操作系统引导,操作系统运行之前运行的一段小程序,用于初始化硬件设备,从而将系统的软硬件环境带到一个合适的状态,以便为最终调用操作系统做好准备。

stage1 使用汇编语言编写,工作为:

  1. 初始化硬件设备、
  2. 为加载Bootloader的stage2准备RAM空间
  3. 拷贝Bootloader的stage2到RAM空间
  4. 设置好堆栈段为stager2的C语言环境做准备。

stage2 使用 C 语言编写,工作为:

  1. 初始化本阶段要使用到的硬件设备
  2. 将内核映像和根文件系统映像从 flash 上读到RAM
  3. 调用内核

普通的 bootloader 需要实现:

  1. 初始化硬件设备
  2. 为操作系统准备RAM空间
  3. 将操作系统代码载入到RAM中
  4. 设置堆栈执行环境,为高级语言(如 C 语言)提供执行环境。这里要多说一句,操作系统并不都是 C 语言写的哦。现在 Rust 语言接近 C 语言性能,并且因为其提供的安全性,已经被用来写操作系统了。
  5. 将控制权交给操作系统。到这一步,系统的完整启动也就结束啦。之后就是操作系统主宰的世界了!
  • 6
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 作为程序员,编程必备基础知识非常重要,并且下载CSDN网站上的资源将对我们很有帮助。 首先,计算机基础是程序员必备的基础知识之一。这包括计算机体系结构、计算机网络、操作系统等方面的知识。了解计算机的工作原理,对于编写高效、可靠的程序至关重要。在CSDN网站上,我们可以下载各种教程或书籍,学习这些基础知识。 其次,编程语言是程序员必备的基础知识之一。不同的编程语言适用于不同的应用场景,例如C语言用于系统开发,Python用于数据分析和人工智能等。在CSDN网站上,我们可以下载各种编程语言的学习资料和示例代码,帮助我们快速入门和提高编程能力。 此外,算法和数据结构是程序员必备的基础知识之一。良好的算法和数据结构设计可以提高程序的性能和效率。在CSDN网站上,我们可以下载各种经典算法和数据结构的实现代码,学习它们的原理和应用,提升我们的算法和编程能力。 最后,软件工程和项目管理是程序员必备的基础知识之一。了解软件开发过程、版本控制、测试和质量保证等方面的知识,可以提高我们的团队协作和项目管理能力。在CSDN网站上,我们可以下载各种软件工程和项目管理的书籍和工具,帮助我们学习和应用这些知识。 总而言之,计算机基础、编程语言、算法和数据结构、软件工程和项目管理是程序员必备的基础知识。在CSDN网站上,我们可以下载各种教程、书籍、示例代码和工具,帮助我们学习和提高这些知识和能力。 ### 回答2: 编程必备基础知识对于程序员来说非常重要,它们是构建程序和解决问题的基础。而在download.csdn.net网站上,你可以找到关于计算机基础的许多资源。 首先,计算机基础包括计算机硬件操作系统的知识。硬件包括中央处理器(CPU)、存储器、输入输出设备等组成部分。了解硬件的工作原理和性能可以帮助程序员优化程序并充分利用计算资源。同时,操作系统计算机运行程序的核心,学习操作系统的概念和功能可以帮助程序员理解程序与硬件之间的交互过程。 其次,数据结构和算法是编程中必不可少的基础知识。数据结构涉及如何组织和存储数据,例如数组、链表、栈、队列和树等。而算法则是解决问题的步骤和策略,包括排序、搜索、递归、动态规划等。在download.csdn.net网站上,你可以找到许多关于数据结构和算法的教程和示例代码,帮助你提升编程技巧和解决问题的能力。 另外,编程语言也是程序员必备的基础知识之一。不同的编程语言有各自的语法和特点,了解它们可以帮助你选择适合的语言来解决问题。在download.csdn.net网站上,你可以找到各种编程语言的学习资料和代码示例,例如C++、Java、Python等。 最后,计算机网络和数据库也是程序员需要了解的基础知识计算机网络涉及如何在不同计算机之间传输数据和通信。而数据库则涉及如何组织和管理数据,例如关系型数据库和非关系型数据库。在download.csdn.net网站上,你可以找到关于计算机网络和数据库的教程和工具,帮助你深入了解这些概念和技术。 总而言之,在download.csdn.net网站上,你可以找到丰富的计算机基础知识的学习资源。掌握这些知识可以帮助你成为一名更优秀的程序员,更好地构建程序并解决问题。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值