BIOS只是在初始化硬件的时候写了一些配置寄存器来调整硬件的行为模式(是模拟IDE表现还是AHCI表现)。只要硬件允许二次配置,操作系统层面完全可以把这些配置改回来。
说到底其实是BIOS和操作系统之间的Interface规范明确划分了什么应该由BIOS做,什么应该由操作系统做,所以在具体实现中可以各自只做好各自的功能。不然如果二者做的事情互相冲突的话很容易造成混乱。这样的规范也是保证x86(IBM-PC)兼容机一直保持一定程度前向兼容性的基石。
回到IDE和AHCI上,为什么会有IDE和AHCI的区别呢?是因为当时IDE控制器的实现在业界已经形成了共识,也就是说大家做出来的IDE控制器都可以用差不多的驱动,操作系统只需要按规范实现一个统一驱动。后来SATA硬盘横空出世,IDE的控制器模型并不能最大化的利用SATA硬盘的新特性。于是业界又定义了AHCI规范。但是当时大量的操作系统(Windows XP, DOS)并没有AHCI支持。没有硬盘驱动,操作系统几乎不可能正常运行。于是大家在做SATA控制器的时候,都加入了兼容模式,也就是为那些老系统模拟了一个IDE控制器接口。在兼容模式下虽然不能最大化利用SATA特性,但是老的操作系统也可以正常运行。操作系统在发布之后不可能去修改已经分发的安装盘的代码,所以这个功能的开关不可能由操作系统来控制而只能放在后来随硬件分发的BIOS里。
在x86乃至整个计算机体系架构里有很多类似的东西。后来者为了兼容性而不得不去做“无用功”。保证兼容性的解决方案也有很多,比较典型的有: