操作系统的疑问

1:bochs模仿的是什么硬件部分,它有什么功能?
2:计算机的启动过程是怎么样的?
3:实现操作系统,我们需要做的部分是什么?
回答:1:Bochs(读音同 Box)是用C++开发的以 LGPL 许可证发放的开放源代码的x86,x86-64模拟器,模拟整个PC。它被设计成可以运行于多种主流平台下,包括x86, PPC, Alpha, Sun和MIPS。

和 Bochs 类似的虚拟机软件还有:VMware,Virtual PC,VirtualBox,但这些都使用了虚拟化技术,部分指令直接交给硬件执行。而Bochs完全是靠软件模拟来实现的(所以Bochs虚拟机的速度慢很多,而且应该称Bochs为模拟器,而非虚拟机)。从启动到重启,包括PC的外设键盘,鼠标,VGA卡,磁盘,网卡等,全部都是由软件来模拟的。也正是由于Bochs完全是靠软件来模拟整个PC环境,因此它非常的适合开发操作系统,这对广大操作系统爱好者来说是一个福音。因为有它,使得调试操作系统非常非常的容易,它自带一个调试器bochsdbg,它可以从PC机刚启动的那一刹那起就开始模拟,注意,这不是从读取磁盘中的引导扇区那开始模拟。

在Bochs中安装操作系统,不会分区宿主机硬盘,而仅仅是在宿主机中建立一个大文件——磁盘镜像文件。

使用Bochs自带的bximage工具可以创建软盘,硬盘的镜像文件。

在Bochs中运行操作系统的最低要求:

Bochs 软件
BIOS 镜像
VGA BIOS 镜像
至少一个可引导的磁盘镜像(软盘,硬盘,光盘)或物理磁盘(软盘,光盘)

总结:bochs可以看做是一台计算机,只不过该计算机的功能全由软件模拟而形成的。
2:计算机的启动过程是一件相当复杂的事情。主要步骤如下:
当打开电源开关时,电源就开始向主机和其他设备供电,此时电压还不太稳定,主板上的控制芯片组会向CPU发出并保持一个Reset信号(重置信号),让CPU内部自动恢复到初始状态,同时等待电源发出的POWER GOOD信号(电源准备好信号),但是CPU在此时并不会马上执行指令。当电源开始稳定供电后(当然从不稳定到稳定的过程也只是短暂的瞬间),芯片组便撤去RESET信号(如果是手动按下计算机面板上的 Reset按钮来重启机器,那么松开该按钮时芯片组就会撤去RESET信号),CPU 马上就从地址FFFF0H处开始执行指令,这个地址在系统BIOS的地址范围内,无论是Award BIOS还是AMI BIOS,放在这里的只是一条跳转指令,跳到系统BIOS中真正的启动代码处。
系统BIOS的启动代码首先进行POST自检。POST(Power On Self Test,加电自检)的主要任务是检测系统中的一些主要部件是否存在和能否正常工作(如内存,显卡,中断,存储器等)。这一过程是逐一进行的,BIOS厂商对每一个设备都给出了一个检测代码(称为POST CODE即开机自我检测代码),在对某个设置进行检测时,首先将对应的POST CODE写入80H(地址)诊断端口,当该设备检测通过,则接着送另一个设置的POST CODE,对此设置进行测试。如果某个设备测试没有通过,则此POST CODE会在80H处保留下来,检测程序也会中止,并根据已定的报警声进行报警(BIOS厂商对报警声也分别作了定义,不同的设置出现故障,其报警声也是不同的,我们可以根据报警声的不同,分辨出故障所在。
具体请看:http://blog.sina.com.cn/s/blog_61746be701017x3g.html
接下来系统BISO将查找显示卡的BIOS,存放显示卡BIOS的ROM芯片的起始地址通常在C0000H处,系统BIOS找到显卡BIOS之后调用它的初始化代码,由显卡BIOS来完成显示卡的初始化。大多数显示卡在这个过程通常会在屏幕上显示出一些显示卡的信息,如生产厂商、图形芯片类型、显存容量等内容,这就是我们开机看到的第一个画面,不过这个画面几乎是一闪而过的,也有的显卡BIOS使用了延时功能,以便用户可以看清显示的信息。接着系统BIOS会查找其它设备的BIOS程序,找到之后同样要调用这些BIOS内部的初始化代码来初始化这些设备。
查找完所有其它设备的BIOS之后,系统BIOS将显示它自己的启动画面,其中包括有系统BIOS的类型、序列号和版本号等内容。同时屏幕底端左下角会出现主板信息代码,包含BIOS的日期、主板芯片组型号、主板的识别编码及厂商代码等。
接着系统BIOS将检测CPU的类型和工作频率,并将检测结果显示在屏幕上,这就是我们开机看到的CPU类型和主频。接下来系统BIOS开始测试主机所有的内存容量,并同时在屏幕上显示内存测试的数值,就是大家所熟悉的屏幕上半部份那个飞速翻滚的内存计数器。这个过程我们可以在BIOS设置中选择耗时少的"快速检测"或者耗时多的"全面检测"方式。
内存测试通过之后,系统BIOS将开始检测系统中安装的一些标准硬件设备,这些设备包括:硬盘、CD-ROM、软驱、串行接口和并行接口等连接的设备,另外绝大多数新版本的系统BIOS在这一过程中还要自动检测和设置内存的定时参数、硬盘参数和访问模式等。
标准设备检测完毕后,系统BIOS内部的支持即插即用的代码将开始检测和配置系统中安装的即插即用设备,每找到一个设备之后,系统BIOS都会在屏幕上显示出设备的名称和型号等信息,同时为该设备分配中断、DMA通道和I/O端口等资源。
到这一步为止,所有硬件都已经检测配置完毕了,系统BIOS会重新清屏并在屏幕上方显示出一个系统配置列表,其中概略地 列出了系统中安装的各种标准硬件设备,以及它们使用的资源和一些相关工作参数。
按下来系统BIOS将更新ESCD(Extended System Configuration Data,扩展系统配置数据)。ESCD是系统BIOS用来与操作系统交换硬件配置信息的数据,这些数据被存放在CMOS(一小块特殊的RAM,由主板上的电池来供电)之中。通常ESCD数据只在系统硬件配置发生改变后才会进行更新,所以不是每次启动机器时我们都能够看到"Update ESCD… Success"这样的信息,不过,某些主板的系统BIOS在保存ESCD数据时使用了与Windows 9x不相同的数据格式,于是Windows 9x在它自己的启动过程中会把ESCD数据转换成自己的格式,但在下一次启动机器时,即使硬件配置没有发生改变,系统BIOS又会把ESCD的数据格式改回来,如此循环,将会导致在每次启动机器时,系统BIOS都要更新一遍ESCD,这就是为什么有的计算 机在每次启动时都会显示"Update ESCD… Success"信息的原因。
ESCD数据更新完毕后,系统BIOS的启动代码将进行它的最后一项工作,即根据用户指定的启动顺序从软盘、硬盘或光驱启动。以从C盘启动为例,系统BIOS将读取并执行硬盘上的主引导记录,主引导记录接着从分区表中找到第一个活动分区,然后读取并执行这个活动分区的分区引导记录,而分区引导记录将负责读取并执行IO.SYS,这是DOS和Windows 9x最基本的系统文件。Windows 9x的IO.SYS首先要初始化一些重要的系统数据,然后就显示出我们熟悉的蓝天白云,在这幅画面之下,Windows将继续进行DOS部分和GUI(图形用户界面)部分的引导和初始化工作。如果系统这中安装有引导多种操件系统的工具软件,通常主引导记录将被替换成该软件的引导代码,这些代码将允许用户选择一种操作系统,然后读取并执行该操作系统的基本引导代码(DOS和Windows的基本引导代码就是分区引导记录)。
具体请看:https://blog.csdn.net/langeldep/article/details/8788119
3:在以上步骤里,我们通过bochs实现了计算机硬件的模拟,由于操作系统处于软件层次,但考虑到其作为软硬件接口的独特性。故在此我们仅仅需要考虑其接口特性以及操作系统本身的部分即可。

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值