什么是操作系统
- Windows、UNIX、Linux、MacOS、Android、iOS ...
- 操作系统是直接运行于硬件之上的计算机程序
- 操作系统用于管理和控制计算机的硬件与软件资源
- 操作系统为用户软件的开发提供必要的服务和接口
- ...
现代计算机系统架构
- 现代计算机系统由下向上分别是硬件层、BIOS、操作系统、应用软件
什么是BIOS
- BIOS全称: Base Input Output System
- BIOS是计算机上电后第一个运行的程序
- BIOS首先检测硬件状态,检测通过后立即进行硬件初始化
- BIOS会在内存中建立中断向量表(提供硬件访问的方法)
- BIOS最后将控制权交由主引导程序
- BIOS不是软件(Software),而是固件(Firmware),固件是固化于硬件中的程序,在硬件出厂前已经烧写固定
- BIOS为操作系统提供了控制硬件设备的基本功能
系统启动流程
- 系统启动流程图(X86架构)
BIOS是如何运行起来的
- BIOS作为固件,是计算机上电后第一个运行的程序,那么谁加载运行了BIOS?
- BIOS程序不是被软件调用运行起来的,而是硬件电路的特殊设计使得上电后,CPU从 0xFFFF0 处开始执行
- 放在 0xFFFF0 处的只是一条跳转指令,跳到系统BIOS中真正的启动代码处
- BIOS存储于ROM中,地址映射为 0xF0000 - 0xFFFFF(实地址)
- BIOS的入口地址恰恰就是:0xFFFF0
运行时程序的代码段(.text)要从ROM中全部拷贝带RAM中才能执行吗
- 代码不一定要在RAM中才能执行,ROM也是可以执行代码的,CPU从一个存储器件中读取指令并执行,主要看的是该存储器能否实现随机读取
- 代码可以不用拷贝到RAM中运行,也可拷贝到RAM中运行,这些不是技术问题,而是要看这段代码有没有加载到RAM中运行的必要,比如数据段、堆栈等频繁变化的需要放到RAM中
- RAM比ROM中执行速度快得多!
BIOS最后的使命
- 按照用户设置扫描各个存储介质(光驱,软驱,硬盘,U盘等)
- 发现主引导区后,将主引导区中的引导程序载入内存
- 主引导程序在内存中的入口地址为:0x7C00
- 将控制权交由主引导程序执行(jmp 0x7C00)
主引导区&主引导程序
- BIOS 不可能一个人抗下所有(比如让 BIOS 运行 QQ 是不可能的),因此,BIOS 只完成一些简单的工作就要找机会把接力棒交出去,交给谁呢?下一个接力棒选手就是 MBR 。
- 主引导区(MBR:Master Boot Record)
- 为了方便 BIOS 找到 MBR,那么 MBR 必须在固定的位置等待,因此
- 主引导区位置:位于存储介质的最开始位置,大小为512字节,位于整个硬盘最开始的山区
- 主引导区特点:前512字节的最后2个字节为0x55AA
- 主引导区中前510字节(除去0x55AA)的数据被视为主引导程序
- BIOS在发现主引导程序后,就会将主引导程序加载到内存0x7C00处,
- BIOS加载完主引导程序后将跳转到主引导程序入口处继续执行(jmp 0x7C00)
- 接下来将由主引导程序负责后续初始化,并加载运行操作系统内核
- 主引导程序最大为512字节(包含0x55AA)
- 主引导程序是启动系统内核的桥梁,由汇编语言写成