一,一些常识:
①每块硬盘的第一个扇区包含446B的MBR(主引导记录)和46B的分区表(partition table)。
②每个文件系统(分区)一般在最前面都会保留一个boot sector(引导扇区或称为启动扇区)。
③CMOS是记录各项硬件参数且嵌入到主板上的存储器,BIOS是一个写入到主板上的软件程序。
二,启动流程:
按下电源---自动加载BIOS(读取CMOS各种参数、开机硬件检测)---根据BIOS中指定的启动设备(某块硬盘)读取MBR---安装在MBR上的boot loader(如:grub)提供各种菜单供用户选择启动选项
启动选项如:转交给winodws loader ,转交给linux loader……
比如选择了启动linux系统,则在grub提供的菜单上选择linux的相应启动选项,然后进入linux loader ,再由linux loader 加载内核文件,最后完成启动。
三,一些介绍:
一块硬盘的第一个扇区有446B的MBR,有46B的分区表,给该硬盘进行格式化时,(或进行分区时),比如划出一个分区用来安装windows,则将该分区格式化为NTFS;再划出一个分区用来安装linux,则将该分区格式化为EXT3.
windows的文件系统与linux文件系统是不同的,因此,这两个文件系统一般在不同的分区上,而在每一个分区上一般默认会划分出一个boot sector,该boot sector
用来安装boot loader,boot loader就是用来加载系统内核文件的。
windows安装时,默认主动将MBR与boot sector 都装上一份boot loader,而linux安装时,可以选择将boot loader安装到MBR,也可以选择不安装到MBR。因此,装双系统时,要先装好windows。这样再去装linux时,把grub安装到MBR中,由grub提供的选项来选择是否启动哪个系统,当选择了linux时,就会跳转到linux文件系统下的boot sector 下去执行boot loader以加载linux内核;当选择了windows时,就会跳转到windows的文件系统下的boot sector 去执行boot loader以加载windows内核。
虚拟文件系统的意义:
linux中,模块(各种各样的驱动程序)放置在磁盘根目录下(/lib/modules/),因此在启动过程中内核必须要挂载根目录,这样才能读取内核模块以加载驱动程序。
但是,由于内核不认识磁盘,因而需要加载磁盘的驱动程序,而磁盘的驱动程序又存放在/lib/modules/下,因而需要挂载根目录,但是内核又没有加载磁盘的驱动程序,因此似乎陷入了一个死循环中。此时就需要虚拟文件系统来处理了。
虚拟文件系统一般使用文件名为:/boot/initrd 它通过boot loader 加载到内存,在内存中解压并仿真出一个根目录,这个仿真的文件系统提供一个可执行程序,通过该程序来加载内核需要的模块(如各文件系统与磁盘接口的驱动程序)