1. 开机之后,计算机干了什么?
- 加载BIOS:计算机通电后,基本输入/输出系统(BIOS)会首先运行。BIOS是一个固件程序,它位于计算机主板上的芯片中,并负责初始化硬件设备、检测和解决问题以及执行其他预启动任务。
- 加载引导程序:BIOS会加载引导程序,引导程序是操作系统的一部分,负责启动操作系统。引导程序通常被存储在硬盘驱动器的引导扇区中,并根据系统配置进行加载。
- 加载操作系统:引导程序会加载操作系统内核并将控制权交给操作系统。操作系统内核是操作系统的核心部分,它负责管理计算机的硬件、软件和资源,并提供各种系统服务。
- 初始化硬件设备:操作系统内核会初始化计算机的硬件设备,包括CPU、内存、硬盘驱动器、键盘、鼠标等。
- 启动系统服务:操作系统内核会启动各种系统服务,如网络服务、文件系统服务、安全服务等。
- 启动用户界面:操作系统内核会启动用户界面,如登录屏幕或桌面环境,以便用户可以使用计算机。
关键词:引导程序
2. BIOS是如何得知引导程序位置并加载引导程序的?引导程序是什么,它是如何工作的?
- 在计算机启动之后,bios会按照顺序检查计算机中的硬件设备,直到找到包含MBR的硬件设备。MBR 叫做主引导记录,它通常位于磁盘的一个物理扇区(并不是绝对的)。MBR 的大小为512个字节,它最后两个字节为0x55AA,bios会通过结尾字节来判断它的有效性。引导程序在MBR的代码段,即MBR的前446个字节。bios找到MBR后会将MBR的代码段加载到内存中,并且运行引导程序。
- 引导程序是用来加载系统内核到内存中,并将控制权交给内核的一段MBR中的程序。引导程序会加载同在MBR上的分区表,从而确定内核文件所在的分区和具体位置。找到内核文件后,引导程序会将内核加载到内存中并且将控制权交给内核。至此,引导程序的工作完成。
3. GPT分区是如何加载引导程序的?
GPT分区表中的UEFI系统引导程序与MBR分区表中的传统引导程序不同,UEFI引导程序市存储在磁盘上的EFI系统分区中的,而不是存储在磁盘的MBR中的。
使用DiskGenius可以看到在磁盘中有一个ESP系统分区,该分区中的一个Boot文件夹中有引导程序文件 bootx64.efi。
4. linux中的MBR和引导程序
Linux-0.11 中使用的引导程序就是位于boot文件夹下的bootsect.s文件。该文件是一个汇编语言源代码文件。通过编译,这个文件会被编译成二进制文件,存放在启动区的第一扇区。bootsect.s包含了引导程序代码、硬件配置代码和错误处理代码。
5. linux 0.11版本的引导程序
在Linux-0.11版本中,引导程序位于boot目录下的bootsect.s。
下面看一下bootsect.s:
SETUPLEN = 4 ; nr of setup-sectors
BOOTSEG = 0x07c0 ; original address of boot-sector
INITSEG = 0x9000 ; we move boot here - out of the way
SETUPSEG = 0x9020 ; setup starts here
SYSSEG = 0x1000 ; system loaded at 0x10000 (65536).
ENDSEG = SYSSEG + SYSSIZE ; where to stop loadingentry start
start:mov ax,#BOOTSEGmov ds,axmov ax,#INITSEGmov es,axmov cx,#256sub si,sisub di,direpmovwjmpi go,INITSEG
go: mov ax,csmov ds,axmov es,ax
; put stack at 0x9ff00.mov ss,axmov sp,#0xFF00 ; arbitrary value >>512