提交文章时赫然看到上一次更新的时间,明晃晃挂着的三月两字刺痛了我的双眼,手里的炸鸡顿时不香了。原来不知不觉间已经当了这么多月的咸鱼??唉,以后一定要天天坚持更博。再更一篇讲讲实验开始过程吧。
整个开始过程一言以蔽之:我以为的不是我以为的,但或许有可能真是我以为的。一开始运行都蛮顺利,让本万年非酋窃喜不已。直到运行make qemu-gdb时,弹出的窗口栏上出现的“stopped”打破了我的幻想。可是为什么为什么为什么?为什么什么错误提示也找不到?遍寻原因无果,且确认lab和qemu都没有下载错后,我以为可能会是虚拟机的问题,于是乎删了virtualbox重下了vmware和ubuntu镜像。然鹅,悲催的事情再度上演(流泪.jpg)令人迷惑的是,当我尝试着忽视这个令人伤心的点,继续实验过程时,居然!是可以正常运行的。这一切真是让人摸不着头脑。害,总觉得未来会有坑等着我。算啦,先讲讲遇到的一些小bug和解决方法吧!

  1. 错误提示:undefined reference to ‘minor'、‘major’
    解决方法:在commands-posix.c文件中加上头文件<sys/sysmacros.h>.
  2. 错误如图所示:解决方法:在前面加sudo
  3. 错误提示:auto-loading has been declined by…具体如图所示:

    解决方案及结果:

    使用‘si’命令,对ROM BIOS指令进行追踪,部分过程如下:

    对指令的分析,这篇博客讲的挺好:mit6.828 -1.2但有些指令我还没完全弄明白,有些云里雾里的,明天再仔细研究研究吧。
    综上,可以看出BIOS的主要操作的是控制并检测各种底层的设备,其的主要功能就是把操作系统从磁盘中导入内存,再把控制权转交给操作系统。所以BIOS在运行最后会检测可以从当前系统的哪个设备中找到操作系统,如果确定操作系统位于磁盘中,就会把这个磁盘的第一个扇区(boot sector)加载到内存中。boot sector中包括boot loader程序,该程序会将操作系统从磁盘导入内存,同时完成一些配置工作。最后操作系统开始运行。

MIT6.828      操作系统

本博客所有文章除特别声明外,均采用 CC BY-SA 3.0协议 。转载请注明出处!