XV6操作系统的安装与使用

时间:2022-01-12 22:12:27

    麻省理工大学的网站上http://pdos.csail.mit.edu/6.828/2011/xv6.html,已经对XV6的来龙去脉及如何下载做了较详细的介绍。这里我们以32位的Ubuntu12.04为例,简单介绍一下如何通过x86模拟器Bochs来运行XV6操作系统。    

    XV6操作系统是可以运行在多核结构的X86平台上,我们需要支持SMP功能的Bochs模拟器,可从http://sourceforge.net/projects/bochs/files/bochs/2.6.1/下载bochs-2.6.1.tar.gz,解压后的路径不妨记为/home/cse/src/bochs-2.6.1。Bochs的图形界面需要用到GTK函数库,可通过以下命令安装该函数库

   cse@ubuntu:~$  sudo apt-get install libgtk2.0-dev

   之后进入/home/cse/src/bochs-2.6.1目录,依次执行以下命令编译并安装Bochs。

./configure --enable-debugger --enable-disasm --enable-smp

make

sudo make install

   不妨假设我们把从MIT网站下载来的XV6源代码存放在/home/cse/src/xv6。我们需要对其中的dot-bochsrc文件做一些修改,该文件相当于是模拟器Bochs的配置文件。由于XV6的源代码memlayout.h中把宏PHYSTOP定义为0xE000000,即224M字节的物理内存,而从MIT网站下载来的dot-bochsrc文件只设置了32M的物理内存,因此可把dot-bochsrc第121行的“megs: 32”改为“megs: 256”,比224M更大即可。另一个需要修改的地方是dot-bochsrc第497行的“vga_update_interval: 300000”改为“#vga_update_interval: 300000”,即注释掉配置选项vga_update_interval,Bochs2.6.1模拟器不支持该选项。还有一个需要修改的选项为第273行的“cylinders=1024”,改为“cylinders=1000”,其原因是文件fs.img的大小为512,000 字节,共占用1000个扇区,每扇区512字节,如下所示。

ata0-slave: type=disk, mode=flat, path="fs.img",cylinders=1000, heads=1, spt=1

    之后执行以下命令,我们就可以看到图1.1.1这样的界面。

cse@ubuntu:~/src/xv6 $ make bochs

XV6操作系统的安装与使用

图1.1.1  make bochs

   在图1.1.1左下方的<bochs:1>后输入一个字母c,表示continue后,我们就可以得如图1.2的XV6运行界面。从图1.1.2中我们可以看到有cpu0和cpu1这两个CPU在运行,

XV6操作系统的安装与使用

图1.1.2  XV6在bochs上的运行界面

   同时运行的CPU个数,是由配置文件dot-bochsrc由第110行的配置选项count所指定,如下所示。

cpu: count=2, ips=10000000

   运行ls命令,我们可得到图1.1.3这样的运行结果,从中我们可以看到我们在Linux系统上也可用的cat、echo、grep、kill、ln、ls、mkdir、rm和wc等命令。刹那间,我们仿佛看到了生命进化的源头,而Unix系统正是Linux系统的源头,XV6是Unix V6在X86多核平台上的重生。

XV6操作系统的安装与使用

图1.1.3  ls命令的运行结果

    在图1.1.3中形如“cat  2  3  11451”的输出告诉我们,根目录下的文件cat在硬盘上占用了11451字节的空间,其i节点号为3,文件类型为2,即普通的文件(不是目录,也不是设备文件)。我们在分析XV6的文件系统时,会进一步讨论什么是i节点。这里我们只要知道,文件中存放了用户要保存的内容,但在文件系统中,我们还需要记录这些文件内容存放在硬盘的哪些扇区,即还要保存文件的说明信息。简单来说,文件由“文件内容本身”和“文件的说明信息”这两部分构成,在XV6操作系统中,会将“文件的说明信息”存放到索引结点(即index  node,通常简称为i节点)中,一个文件对应一个inode,对不同的inode进行编号,因此不同的文件就对应不同的i节点号。

    而图1.1.3中的“.  1  1  512”告诉我们,当前所处的目录也是个文件,其文件类型为1,在XV6中,这代表着一个目录(即Windows中的文件夹),其i节点号为1,共占用512字节硬盘空间。而“console  3  18  0”则告诉我们文件console所占的硬盘空间为0,这是一个类型为3的文件,即设备文件,其i结点号为18。文件console即所谓的“控制台”,对应的物理实体是键盘和显示器,对该console文件的读操作,相当于是读取从键盘输入的字符,对console文件的写操作,则是在屏幕上显示字符。在PC还未普及的年代,console文件对应的物理设备,是位于主机房的与主机直接相连的键盘与显示器,在那个年代,能进入主机房这样的核心位置的人员,当然是管理员级别的人物了。在无法人手一机的年代,其他用户就需要通过各自的终端设备,通过电话线等介质连接到主机房,分时共享主机房里的计算机,较早期的终端设备是由Teletype公司生产的电传打字机,缩写为tty。时至今日,我们仍然可在Linux上看到名为/dev/tty的设备文件,虽然其对应的物理实体早已物是人非,但这名字tty却延用至今。XV6为了简单,并未支持tty终端设备。

    我们还可在qemu虚拟机上运行XV6,安装qemu及运行XV6的主要步骤如下所示,如果一切顺利,我们可得到如图1.1.4的运行结果。

(1)安装qemu

sudo apt-get install qemu

sudo ln -s /usr/bin/qemu-system-i386/usr/bin/qemu

(2)进入/home/cse/src/xv6目录,在qemu中运行xv6

make qemu

XV6操作系统的安装与使用

图1.1.1.4 Qemu上运行XV6

--------------------------------------------------------------------------------------

最近一段时间一直比较忙,XV6的分析和讨论只好等有空时再进行。