首页 > 编程知识 正文

按照实验中分配被试的方式(ucore系统)

时间:2023-05-04 10:27:14 阅读:77197 作者:3465

操作系统全部笔记目录见:操作系统笔记整理

把实验楼的简介放进去,保持原样:

x86模拟器Bochs

Bochs是一款免费、开源的ia-32(x86 )体系结构PC机器模拟器。 在模拟环境中,可以运行各种操作系统,包括Linux、DOS和不同版本的Windows。 Bochs本身可移植性强,能够在各种硬件软件平台上运行,这是被选为本手册指定模拟器的主要原因。

如果你想拥抱自由的Linux,Bochs几乎是你的选择。 如果您想继续将自己绑定到Windows平台,除了Bochs外,还可以选择VMware或Microsoft Virtual PC。 这些是最有名的虚拟机软件,可以免费使用。 因为Bochs是模拟器,所以它的原理决定了运行效率低于虚拟机。

但是,在本书设计的实验中,效率的差异并不明显。 另外,Bochs具有虚拟机无法比拟的操作系统调试能力,因此建议选择Bochs。 hit-oslab中已经内置了bochs,本实验后设想的默认环境也是bochs。

我们现在用自己虚拟机上的Ubuntu系统构建实验环境。

打开VMware,将:https://pan.Baidu.com/s/1 RP0BC1_ du VCL-7 _ g _ yjheq提取代码: u3nb链接下载的文件解压缩到linux系统

复制并放置实验楼上所附的个人资料。

文件结构

Image文件oslab在主机操作系统上运行,我们使用的Linux在主机操作系统上完成Linux 0.11的开发、修改和编译后,在linux-0.11目录下运行Image这就是编译后的目标文件。

如果此文件中已经有包含引导和所有内核的二进制代码软盘、从它的 0 扇区开始,逐字节写入 Image 文件的内容,请在此软盘上启动真正的计算机,并进入Linux 0.11内核

oslab在bochs模拟器中加载此Image文件,并模拟运行Linux 0.11,可以省去重新启动计算机的麻烦。

bochs目录bochs目录下有与bochs相关的执行文件、数据文件和配置文件

run脚本run是运行bochs的脚本命令。

运行后,bochs将自动安装在其虚拟软驱 A 和虚拟硬盘上各挂载一个镜像文件上,软驱上安装linux-0.11/Image、hdc-0.11.img。

bochs 配置文件中的设置是从软驱 A 启动,所以 Linux 0.11 会被自动加载

Linux 0.11驱动硬盘,装载硬盘上的文件系统。 也就是说,如果通过0.11系统中的根目录——/0.11访问hdc-0.11.img中的镜像文件系统,则可以访问hdc-0.11.img文件中的虚拟文件系统

hdc-0.11.img文件hdc-0.11.img文件的格式是Minix文件系统的镜像。

所有Linux版本都支持这种格式的文件系统,因此可以在主机Linux上使用mount命令直接访问此文件中的文件,主机系统与bochs中运行的Linux 0.11之间的

由于Windows目前无法直接访问(或尚未发现) Minix文件系统,因此使用fdb.img。 这是1.44M米软盘的镜像文件,内部是FAT12文件系统。 装载到bochs的FDDb后,可以在0.11中访问。 使用filedisk或WinImage,可以在Windows上访问内部文件。

hdc-0.11.img包含以下内容:

bash外壳; cp、rm、mv、tar等基本Linux命令,工具vi编辑器; gcc 1.4编译器,可用于编译标准c程序; as86和ld86; Linux 0.11的源代码可以用0.11进行编译,以覆盖现有的二进制内核。 其他文件在以后使用时会单独说明。

我们现在开始操作,进入linux-0.11目录。 /不黑热狗/mySoftware/oslab/linux-0.11

按照实验步骤输入make all,出现错误:

访问目录后,发现makefile是一个空文件。

p>

注意:因为 all 是最常用的参数,所以可以省略,只用 make,效果一样。

在多处理器的系统上,可以用 -j 参数进行并行编译,加快速度。例如双 CPU 的系统可以:

$ make -j 2

 

然后注意到自己名字打错了,应该是 Makefile ,一定要注意大小写。

查看错误信息,我们发现是因为少了个命令:即as86,看名字大概是x86的汇编asm编译器。解决办法:

输入命令

apt install 怕黑的热狗86

然后再运行,发现

看来gcc-3.4也没有安装:

ll /usr/怕黑的热狗/gcc*或者ls -l /usr/怕黑的热狗/gcc*

可以查看全部已经安装的gcc版本。安装好老版本的gcc3.4 以后,编译就可以正常运行了。

注释:make 命令会显示很多很多的信息,你可以尽量去看懂,也可以装作没看见。只要最后几行中没有 “error” 就说明编译成功。

最后生成的目标文件是一个软盘镜像文件—— linux-0.11/Image(下面的图中给出了详细的信息)。如果将此镜像文件写到一张 1.44MB 的软盘上,就可以启动一台真正的计算机。

linux-0.11 目录下是全部的源代码,很多实验内容都是要靠修改这些代码来完成。修改后需要重新编译内核,还是执行命令:make all。

make 命令会自动跳过未被修改的文件,链接时直接使用上次编译生成的目标文件,从而节约编译时间。但如果重新编译后,你的修改貌似没有生效,可以试试先 make clean ,再 make all(或者一行命令:make clean && make all。make clean 是删除上一次编译生成的所有中间文件和目标文件,确保是在全新的状态下编译整个工程。

在 Bochs 中运行最新编译好的内核很简单,在 oslab 目录下执行:

# 注意是在上层目录# 刚刚编译是在 oslab/linux-0.11/ 文件夹下$ cd ~/oslab/# 执行 run 脚本$ ./run

 

如果出现 Bochs 的窗口,里面显示 linux 的引导过程,最后停止在 [/usr/root/]#,表示运行成功,如下图所示。

内核调试分为两种模式:汇编级调试和 C 语言级调试。

(1)汇编级调试

汇编级调试需要执行命令:

# 确认在 oslab 目录下$ cd ~/oslab/# 运行脚本前确定已经关闭刚刚运行的 Bochs$ ./dbg-asm

 

汇编级调试的启动之后 Bochs 是黑屏,这是正常的。

可以用命令 help 来查看调试系统用的基本命令。更详细的信息请查阅 Bochs 使用手册。

(2)C 语言级调试

C 语言级调试稍微复杂一些。首先执行如下命令:

$ cd ~/oslab$ ./dbg-c

 

然后再打开一个终端窗口,执行:

$ cd ~/oslab$ ./rungdb

 

注意:启动的顺序不能交换,否则 gdb 无法连接。

出现下图所示的提示,才说明连接成功:

新终端窗口中运行的是 GDB 调试器。关于 gdb 调试器请查阅 GDB 使用手册。

接下来讲解一下 Ubuntu 和 Linux 0.11 之间的文件交换如何启动。

开始设置文件交换之前,务必关闭所有的 Bochs 进程。

oslab 下的 hdc-0.11-new.img 是 0.11 内核启动后的根文件系统镜像文件,相当于在 bochs 虚拟机里装载的硬盘。在 Ubuntu 上访问其内容的方法是:

$ cd ~/oslab/# 启动挂载脚本$ sudo ./mount-hdc

 

大家使用 sudo 时,password 是 shiyanlou,也有可能不会提示输入密码。

之后,hdc 目录下就是和 0.11 内核一模一样的文件系统了,可以读写任何文件(可能有些文件要用 sudo 才能访问)。

# 进入挂载到 Ubuntu 上的目录$ cd ~/oslab/hdc# 查看内容$ ls -al

 

读写完毕,不要忘了卸载这个文件系统:

$ cd ~/oslab/# 卸载$ sudo umount hdc

 

经过 sudo ./mount-hdc 这样处理以后,我们可以在 Ubuntu 的 hdc 目录下创建一个 xxx.c 文件,然后利用 Ubuntu 上的编辑工具(如 gedit 等)实现对 xxx.c 文件的编辑工作,在编辑保存以后。

执行 sudo umount hdc 后,再进入 Linux 0.11(即 run 启动 bochs 以后)就会看到这个 xxx.c(即如下图所示),这样就避免了在 Linux 0.11 上进行编辑 xxx.c 的麻烦,因为 Linux 0.11 作为一个很小的操作系统,其上的编辑工具只有 vi,使用起来非常不便。

图 2 用 Ubuntu 和 Linux 0.11 完成文件交换以后再启动 Linux 0.11 以后

另外在 Linux 0.11 上产生的文件,如后面实验中产生的 process.log 文件,可以按这种方式 “拿到” Ubuntu 下用 python 程序进行处理,当然这个 python 程序在 Linux 0.11 上显然是不好使的,因为 Linux 0.11 上搭建不了 python 解释环境。

注意 1:不要在 0.11 内核运行的时候 mount 镜像文件,否则可能会损坏文件系统。同理,也不要在已经 mount 的时候运行 0.11 内核。

注意 2:在关闭 Bochs 之前,需要先在 0.11 的命令行运行 “sync”,确保所有缓存数据都存盘后,再关闭 Bochs。

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。