1.1 引言

什么是操作系统呢?

有些读者可能会像曾经的笔者一样,认为操作系统是"一种图形界面";在学习了Linux操作系统后,认为操作系统也可以是"一种命令行"。而不同种类,不同版本的操作系统,则是"不同的图形界面",或是"不同的命令行语法"。

那么,以Linux操作系统为例,读者是否想过这些问题呢?

  • 为什么输入ls命令,屏幕上就显示了文件列表?
  • 什么是"文件"?
  • 为什么在键盘上按一下l键,屏幕上就会显示一个字母l,而不是别的字母,或者没反应?s键也是一样
  • 计算机怎么知道键盘被按下了?又怎么知道按的是什么键?
  • 怎么在屏幕上显示一个字符?

这一系列越来越底层的问题乍一看都问的莫名其妙,尤其是最后一个:学过C语言的读者都知道,用C语言的printf函数,不就行了吗?

那么,printf函数又是怎么实现的呢?

看来,事情并没有这么简单。这些看似莫名其妙的问题,都指向了一个词:操作系统。

上述所有问题的答案,都可以用一句比较笼统的话来回答:由操作系统对这些功能提供支持。而其中原理,正是本系列要向读者讲述的。

欢迎来到操作系统的实现之旅!

1.2 准备工作

想要实现一个操作系统,需要进行一些准备工作。

首先是一台安装有Linux操作系统的物理机或虚拟机,且带有GCC编译器。

然后,需要下载并安装汇编编译器nasm,其官网为https://nasm.us/。使用./configure --prefix=... && make -jN && make install命令即可完成安装。

然后,需要安装bochs虚拟机,其官网为https://bochs.sourceforge.io/。bochs拥有强大的硬件模拟及调试功能,其用于运行我们的操作系统。

bochs的安装比较复杂,首先,需要使用普通的./configure --prefix=... && make -jN && make install命令将其编译一次,此时得到的bochs程序是用于运行的版本,此外,还会得到一个名为bximage的程序,其用于创建虚拟硬盘。然后,需要使用./configure --prefix=xxx --enable-debugger --enable-debugger-gui && make -jN && make install再编译一次(注意两次编译的--prefix应不同,否则就覆盖了),这一次,得到的是bochs的调试器版本,当操作系统出现问题时,就依靠它了。由于这两个版本的bochs名字一样,所以,读者应将第二个bochs更名,笔者使用的名称是bochsdbg

然后,需要构建虚拟硬盘。运行bximage命令,然后输入1,回车;接下来一直回车,直至命令结束。此时,当前目录下出现了名为c.img的文件,其大小接近10M,这个文件就是创建好的虚拟硬盘了。

接下来,需要为两个版本的bochs分别构造一个配置文件。第一个配置文件需要放在~/.bochsrc处,其内容为:

romimage: file=$BXSHARE/BIOS-bochs-latest
vgaromimage: file=$BXSHARE/VGABIOS-lgpl-latest
boot: disk
ata0-master: type=disk, path="c.img", mode=flat
megs: 32

此配置文件中,第4行设定的是虚拟硬盘信息;第5行设定的是内存容量,单位是M;其他配置无需关注。

第二个配置文件需要放在~/.bochsdbgrc处,其内容较上一个文件多了最后一行:

romimage: file=$BXSHARE/BIOS-bochs-latest
vgaromimage: file=$BXSHARE/VGABIOS-lgpl-latest
boot: disk
ata0-master: type=disk, path="c.img", mode=flat
megs: 32
display_library: x, options="gui_debug"

第6行用于启动bochs调试器的GUI。

最后,需要在~/.bashrc中将两个版本的bochs与其配置文件分别对应起来:

alias bochs="bochs -q"
alias bochsdbg="bochsdbg -q -f ~/.bochsdbgrc"

至此,所有的准备工作就都完成了。

如果现在运行bochs命令,bochs会显示:"No bootable device"(没有可引导的设备),这是正常的,因为现在什么都还没有实现。在下一章中,我们将正式开始实现操作系统。

本系列源码可从https://github.com/yingyulou/Published-Articles/tree/master/code/os获得。


樱雨楼
26 声望1 粉丝

Stay Gold