原帖由 cainiao911 于 2008-1-12 13:34 发表
bios也可以看做一个操作系统,它提供了API(bios中断),对于现在主流操作系统来讲,除了启动早期的MBR和操作系统分区的引导代码等少数地方需要
使用BIOS中断外(主要是INT 13H读磁盘),实际上它就跟BIOS没任何关 ...
原帖由 qiuhanty 于 2008-1-13 23:01 发表
曾经调试过磁盘驱动引起的中断风暴,看过一点这方面的东西。
当时的场景是,在bios中设置磁盘为legacy模式,bios会在pci总线上的ide控制器的pci寄存器中设置相应的标识,然后os在设备枚举时会读该pci寄存器的值 ...
原帖由 zx_wing 于 2008-1-12 15:22 发表
我来回答这个问题有点班门弄斧了,其实 albcamus更合适一点。不管怎样,还是说一点我的认识。
BIOS主要作用是在引导系统前探测平台的硬件并为它分配资源,并提供一些系统引导必要的驱动供OS的bootloader使用(例如磁盘的驱动)。OS 是通过BIOS获得系统资源状况的,所以对于屏蔽某一个设备,只要在向OS报告平台资源的时候忽略掉它就好了。例如这里你说的屏蔽磁盘,或许BIOS可以通过ACPI中的DSDT表(是不是这个哦,可能记错了,albcamus指正)隐藏它。具体细节应该是不把磁盘IDE控制器的寄存器(以及控制数据结构)映射到地址空间中的地址报告给OS,OS就认为它不存在。
当然,或许屏蔽IDE设备不是用的我上面说的ACPI的方法,但原理上是类似的。
至于BIOS中断,那是早期BIOS提供给OS调用它的一种手段,类似于API。也不仅仅只有INT 13这样的磁盘中断常用,还有例如显卡切换模式的INT 10中断,OS用来获得内存布局的INT 15中断等等~~~这张实模式下的IDT表在INTEL的手册中称为IVT表(Interrupt Vetor Table),BIOS是通过修改表中对应的vector来添加自己的handler的,这张表位于地址0处。
后来Intel和几家公司一起推UEFI(全称不记得了,albcamus帮忙补充一下)。这玩意就超复杂了,真不亚于一个操作系统。它提供API的方式是通过一个RuntimeSevice table提供一组函数指针给OS调用,还有其他的类似内存布局了Memorydescriptor table之类的全通过一个结构体封装好提交给OS,就不在需要BIOS中断这种调用方式了 ~~~~ 不多说了,多说献丑,这部分是albcamus强项,他帮你解释吧
欢迎光临 Chinaunix (http://bbs.chinaunix.net/) | Powered by Discuz! X3.2 |