在次 boot loader 存在与内存中后,就可以对文件系统进行查询了,同时将默认的内核镜像以及初始化内存盘镜像也被加载到内存中 。
一切准备完毕之后,次 boot loader 就会调用内核镜像,完成操作系统的加载 。
加载内核并从实模式转换为保护模式当内核映像被加载到内存中(加载过程仍然用int 0x13中断向量),并且次引导加载程序释放控制权之后,内核阶段就开始了 。
加载内核镜像内核映像并不是一个可执行的内核,而是一个压缩过的内核映像 。通常它是一个 zImage(压缩映像,小于 512KB)或一个 bzImage(较大的压缩映像,大于 512KB),它是提前使用 zlib 进行压缩过的 。在这个内核映像前面是一个例程,它实现少量硬件设置,并对内核映像中包含的内核进行解压,然后将其放入高端内存中,如果有初始 RAM 磁盘映像,就会将它移动到内存中,并标明以后使用 。然后该例程会调用内核,并开始启动内核引导的过程 。
当 bzImage(用于 i386 映像)被调用时,我们从 ./arch/i386/boot/head.S 的 start 汇编例程开始执行 。
这个例程会执行一些基本的硬件设置,并调用 ./arch/i386/boot/compressed/head.S 中的 startup_32,设置一个基本的环境(堆栈等),并清除 Block Started by Symbol(BSS) 。然后调用一个叫做 decompress_kernel 的 C 函数(在 ./arch/i386/boot/compressed/misc.c 中)来解压内核 。当内核被解压到内存中之后,就可以调用它了 。这是另外一个 startup_32 函数,但是这个函数在 ./arch/i386/kernel/head.S 中 。
进入保护模式并初始化
- 进入保护模式
- 设置中断描述附表和全局描述符表
- 创建了内存分页机制
- start_kernel启动内核
- 创建init进程
它是一组固化到计算机内主板上一个ROM芯片上的程序,它保存着计算机最重要的基本输入输出的程序、开机后自检程序和系统自启动程序,它可从CMOS中读写系统设置的具体信息 。其主要功能是为计算机提供最底层的、最直接的硬件设置和控制 。
BIOS存储的信息BIOS芯片中主要存放:
- 自诊断程序:通过读取CMOSRAM中的内容识别硬件配置,并对其进行自检和初始化;
- CMOS设置程序:引导过程中,用特殊热键启动,进行设置后,存入CMOS RAM中;
- 系统自举装载程序:在自检成功后将磁盘相对0道0扇区上的引导程序装入内存,让其运行以装入DOS系统;
- 主要I/O设备的驱动程序和中断服务:由于BIOS直接和系统硬件资源打交道,因此总是针对某一类型的硬件系统,而各种硬件系统又各有不同,所以存在各种不同种类的BIOS,随着硬件技术的发展,同一种BIOS也先后出现了不同的版本,新版本的BIOS比起老版本来说,功能更强 。
计算机会首先加载BIOS信息,BIOS信息是如此的重要,以至于计算机必须在最开始就找到它 。
电脑启动后,CPU逻辑电路被设计为只能运行内存中的程序,没有能力直接运行存在于软盘或硬盘中的操作系统,如果想要运行,必须要加载到内存(RAM)中 。
BIOS是如何启动的CPU硬件逻辑设计为在加电瞬间强行将CS值置为0XF000,IP为0XFFF0,这样CS:IP就指向0XFFFF0这个位置,这个位置正是BIOS程序的入口地址 。
BIOS需要在内存中加载中断向量表和中断服务程序BIOS程序被固化在计算机主机板上的一块很小的ROM芯片里 。现在CS:IP已经指向了0XFFFF0这个位置,意味着BIOS开始启动 。随着BIOS程序的执行,屏幕上会显示显卡的信息,内存的信息,说明BIOS程序在检测显卡,内存,这个就是POST开机自检期间,有一项对启动操作系统至关重要的工作,那就是BIOS在内存中建立中断向量表和中断服务程序
推荐阅读
- PHP 开源工作流引擎 V6.0.0 正式版发布
- 鸿蒙APP开发:如何实现“百度地图”的显示?需要3项认真操作才行
- linux-centos网络配置bond
- 国三车能开到什么时候?
- 国产Linux系统可爱鱼CutefishOS 0.7 Beta发布
- 这样清理C盘不影响系统,电脑一下子多了30G,运行忒流畅
- App制作的流程是什么?如何制作App开发流程?
- Java业务开发常见错误
- 小白如何看出计算机操作系统是否开启勒索病毒危险端口
- 小白是如何让Kali Linux操作系统从U盘成功启动