Lab1 【哈工大_操作系统】熟悉实验环境

本系列文章主要更新哈工大《操作系统》课程对应的9个Lab实验(包括熟悉实验环境),提供了非常详细的环境配置方法以及按照指导书展开的详细操作步骤,希望对大家有所帮助。

实验的基本流程是根据实验要求编写应用程序、修改 Linux 0.11 的源代码,用 gcc 编译后,在 Bochs 的虚拟环境中运行、调试目标代码。注:笔者是在 Ubuntu20.04 平台上进行实验。

一、实验工具准备:

文件名 介绍
hit-操作系统实验指导书.pdf 哈工大OS实验指导书
Linux内核完全注释(修正版v3.0).pdf 赵博士对Linux v0.11 OS进行了详细全面的注释和说明
file1615.pdf BIOS 涉及的中断数据手册
hit-oslab-linux-20110823.tar.gz hit-oslab 实验环境
gcc-3.4-ubuntu.tar.gz Linux v0.11 所使用的编译器
Bochs 汇编级调试指令 bochs 基本调试指令大全

二、实验环境配置

1、文件结构

下载 hit-oslab-linux-20110823.tar.gz 压缩包,并将其解压,将得到如下文件:

• Image 文件

oslab 工作在一个宿主操作系统之上,我们使用的 Linux,在宿主操作系统之上完成对 Linux0.11 的开发、修改和编译之后,在 linux-0.11 目录下会生产一个名为 Image 的文件,它就是编译之后的目标文件。

该文件内已经包含引导和所有内核的二进制代码。如果拿来一张软盘,从它的 0 扇区开始,逐字节写入 Image 文件的内容,就可以用这张软盘启动一台真正的计算机,并进入 Linux0.11 内核。

oslab 采用 bochs 模拟器加载这个 Image 文件,模拟执行 Linux 0.11,这样省却了重新启动计算机的麻烦。

• bochs 目录

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

• run 脚本

bochs 目录下是与 bochs 相关的执行文件、数据文件和配置文件。run 是运行 bochs 的脚本命令。

运行后 bochs 会自动在它的虚拟软驱 A 和虚拟硬盘上各挂载一个镜像文件,软驱上挂载是linux-0.11/Image,硬盘上挂载的是 hdc-0.11.img

• hdc-0.11.img 文件

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

Linux 所有版本都支持这种格式的文件系统,所以可以直接在宿主 Linux 上通过 mount 命令访问此文件内的文件,达到宿主系统和 bochs 内运行的 Linux 0.11 之间交换文件的效果。

2、使用方法

(1)进入 linux-0.11 目录进行编译

shell 复制代码
cd ~/my_space/OS_HIT/oslab/linux-0.11
make all

结尾出现 sync 则表示成功。

(2)运行

shell 复制代码
../run

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

(3)调试

(4)文件交换

接下来讲解一下 Ubuntu 和 Linux 0.11 之间的文件交换如何启动。
开始设置文件交换之前,务必关闭所有的 Bochs 进程。

slab 下的 hdc-0.11-new.img 是 0.11 内核启动后的根文件系统镜像文件,相当于在 bochs 虚拟机里装载的硬盘。在启动挂载之前打开 hdc 文件夹时显示内容如下:

  • 在 Ubuntu 上访问其内容的方法:
shell 复制代码
cd oslab
sudo ./mount-hdc     // 启动挂载脚本

成功挂载后,hdc 文件夹显示内容如下:

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

shell 复制代码
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,使用起来非常不便。

相关推荐
WZF-Sang1 天前
Linux—进程学习-01
linux·服务器·数据库·学习·操作系统·vim·进程
Goboy2 天前
0帧起步:3分钟打造个人博客,让技术成长与职业发展齐头并进
程序员·开源·操作系统
结衣结衣.2 天前
【Linux】Linux管道揭秘:匿名管道如何连接进程世界
linux·运维·c语言·数据库·操作系统
OpenAnolis小助手2 天前
龙蜥副理事长张东:加速推进 AI+OS 深度融合,打造最 AI 的服务器操作系统
ai·开源·操作系统·龙蜥社区·服务器操作系统·anolis os
小蜗的房子3 天前
SQL Server 2022安装要求(硬件、软件、操作系统等)
运维·windows·sql·学习·microsoft·sqlserver·操作系统
邂逅岁月5 天前
【多线程奇妙屋】 Java 的 Thread类必会小技巧,教你如何用多种方式快速创建线程,学并发编程必备(实践篇)
java·开发语言·操作系统·线程·进程·并发编程·javaee
CXDNW6 天前
【系统面试篇】进程和线程类(1)(笔记)——区别、通讯方式、同步、互斥、死锁
笔记·操作系统·线程·进程·互斥·死锁
Anemone_6 天前
MIT 6.S081 Lab3
操作系统
掘了7 天前
持久化内存 | Persistent Memory
c++·架构·操作系统
结衣结衣.8 天前
【Linux】掌握库的艺术:我的动静态库封装之旅
linux·运维·服务器·c语言·操作系统·