BIOS是PC最先启动的程序,而且BIOS是可以更新的,那么用BIOS来启动操作系统的话会方便的多。
现在的机制是,BIOS执行完硬件检查后到磁盘第一个扇区读取操作系统的bootloader,由于这种方法只会启动第一个操作系统,于是多了grub这样的用来启动多个操作系统的小程序,而这个程序本身要被最先启动的话也得修改磁盘第一个扇区的内容。因此grub本身也不安全。因为当安装了grub这样的程序后,后续安装的操作系统若把自己的bootloader放到磁盘第一个扇区的话,grub便不起作用了。
我的想法是,既然BIOS是第一个被执行的程序,而且也可以被修改,那么将启动操作系统的工作交给BIOS来执行,这样一来BIOS知道磁盘中那些操作系统的位置,我们便可以修改BIOS启动操作系统的顺序来启动默认的操作系统。如果不想每次通过设置BIOS来切换操作系统,那也可以再另外使用grub这样的程序来选择要启动的操作系统,方法只是把这个程序作为第一个启动项。得益于这种便利性,我们还可以很方便的启动其他程序,而不需要先启动操作系统。
一个可能的实现方法是,BIOS中开辟一段公共存储区,新安装的操作系统把自己的信息(bootloader的地址,操作系统名字和版本)按照一定格式写到这块区域内,BIOS启动后读取这片区域的内容,然后用户可以设置这些操作系统的启动顺序,以后BIOS只需要按照用户配置读取指定的内容(例如操作系统bootloader的地址)到pc,这样便能启动指定操作系统了。
这种方法的好处很多,例如不用担心磁盘第一个扇区被覆盖,操作系统的bootloader可以随便放,操作系统安装时不用感知其他操作系统的存在,可以不启动操作系统来启动某些程序等等。用户只需要到BIOS设置一下操作系统的启动顺序就行了,根本不用烦恼要先安装哪个操作系统。
当然,安全起见,往BIOS的那块存储区写东西的话需要先经过安全认证,如果用户不理会,也可以不认证。