Chinaunix

标题: 请教一个bios与操作系统的问题? [打印本页]

作者: cainiao911    时间: 2008-01-12 13:34
标题: 请教一个bios与操作系统的问题?
bios也可以看做一个操作系统,它提供了API(bios中断),对于现在主流操作系统来讲,除了启动早期的MBR和操作系统分区的引导代码等少数地方需要
使用BIOS中断外(主要是INT 13H读磁盘),实际上它就跟BIOS没任何关系了,它用自己的驱动程序,自己的中断机制来访问硬件。
那么我想知道,BIOS设置中遮蔽磁盘,遮蔽内置网卡,设置USB的工作模式等是怎么做到的,操作系统是不是也要去读CMOS,是不是BIOS设置中遮蔽了磁盘,
操作系统做适当的处理也可以识别到? 等等,我就想知道现在主流操作系统和BIOS还有什么关系?

[ 本帖最后由 cainiao911 于 2008-1-12 13:48 编辑 ]
作者: flw2    时间: 2008-01-12 13:42
没注意遮蔽磁盘是什么意思,是不是关中断
BIOS也是一些指令和数据,只是它最早得到处理器的控制权
操作系统得到控制权之后,能做任何BIOS能做的事情
作者: cainiao911    时间: 2008-01-12 13:48
就是在BIOS SETUP中将Primary IDE Master设置为Not Installed.
作者: zx_wing    时间: 2008-01-12 15:22
原帖由 cainiao911 于 2008-1-12 13:34 发表
bios也可以看做一个操作系统,它提供了API(bios中断),对于现在主流操作系统来讲,除了启动早期的MBR和操作系统分区的引导代码等少数地方需要
使用BIOS中断外(主要是INT 13H读磁盘),实际上它就跟BIOS没任何关 ...

我来回答这个问题有点班门弄斧了,其实 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强项,他帮你解释吧
作者: mik    时间: 2008-01-13 00:24
BIOS 也就是一段代码,与普通的代码没什么特别之处,只是用于控制及初始化硬件的代码。但是要受数据总线规范的制约。现在PC机的总线系统还是PCI。
BIOS 和数据总线是相辅相成的,总线系统决定如何映射BIOS代码,BIOS代码又反过来来总线系统的一些必要的初始化及控制工作。而总线系统又受到整个计算机架构的制约。
作者: qiuhanty    时间: 2008-01-13 23:01
曾经调试过磁盘驱动引起的中断风暴,看过一点这方面的东西。
当时的场景是,在bios中设置磁盘为legacy模式,bios会在pci总线上的ide控制器的pci寄存器中设置相应的标识,然后os在设备枚举时会读该pci寄存器的值来判断磁盘的模式。
作者: albcamus    时间: 2008-01-17 14:05
原帖由 qiuhanty 于 2008-1-13 23:01 发表
曾经调试过磁盘驱动引起的中断风暴,看过一点这方面的东西。
当时的场景是,在bios中设置磁盘为legacy模式,bios会在pci总线上的ide控制器的pci寄存器中设置相应的标识,然后os在设备枚举时会读该pci寄存器的值 ...


这里指的是SATA host controller的工作模式吗?
作者: albcamus    时间: 2008-01-17 15:59
原帖由 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强项,他帮你解释吧


作者: sangwf    时间: 2014-10-04 16:10
我认为是的,操作系统的核心工作就是管理硬件资源,为应用程序做一层封装(系统调用)。而BIOS也是对硬件访问的底层封装,并提供中断调用。只是这个操作系统比较基本和简陋。




欢迎光临 Chinaunix (http://bbs.chinaunix.net/) Powered by Discuz! X3.2