2
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

【OSに体感で入門する①】教育用OS xv6-riscvをQEMUで動かす:設定と実行の手引き

Posted at

素人による授業の備忘録です
(誤っている部分があれば、コメントでご指摘くださると嬉しいです)

はじめに

MITの講義で使用されている教育用OSであるxv6を用いて、OSについて学んでいきます。xv6のソースコードを読んだり、システムコールを実装することで、UNIXのシンプルなシステム構造について学んでいきます。

xv6というOS

オペレーティングシステムとは

まず、オペーレーティングシステム(OS)は、ハードウェアとアプリケーションソフトウェア・ユーザーの中間に位置する『管理・制御』の役割を担うもののことです。
OSの目的は一般的に以下の3つだと説明されることが多いです。

①ハードウェアの抽象化
②リソース管理
③コンピューターの利用効率化

他の技術記事、OSに関わる授業などをとって理解してから手を動かすとより理解が進みます。
個人的におすすめなのが、以下の記事。UNIXの系譜などについてちょっとだけ理解するのに役立ちます。
https://qiita.com/zawawahoge/items/2ec3b638422c7c8cac8f
特にハードウェア「抽象化」に関しては、以下の記事からざっくりと理解してから読むと、よりわかりやすく全体像を噛み砕けるかと思いました。
https://www.ohitori.fun/entry/what-is-abstraction-in-computer-science

xv6とは

今回においては、MITが提供しているxv6というOSを用いることになります。
『xv6-RISCV』というのは、「xv6」というオペレーティングシステム(OS)をRISCVという命令セットアーキテクチャ(ISA: Instruction Set Architecture)上で動かしていることを意味します。

命令セットアーキテクチャに関しては以下を参照。
https://qiita.com/rihib/items/6b70361b48c3840d09b0
xv6-RISCVに関しては以下を参照すると良い。
https://jupiteroak.hatenablog.com/entry/2021/12/10/055000

xv6はユーザー管理の概念がなく、システムコールが24個しかない非常にシンプルな教育用OSです。そのため、最初に体感で理解し、OSの基本的なイメージをつけるには十分な教材だと思います。

実際のLinuxシステムコールは400個以上存在していたりします。実際のOSと比較しながら、ソースコードを追っていくと面白いかもしれないです。
[Linuxシステムコールのテーブル]
https://syscalls.mebeim.net/?table=x86/64/x64/latest
システムコールの詳細は以下などを追うと良い。
https://qiita.com/sxarp/items/aff43dd83b0da69b92ce

用意するもの

xv6-riscvのソースコード
https://github.com/mit-pdos/xv6-riscv
『xv6: a simple, Unix-like teaching operating system』のpdf
https://pdos.csail.mit.edu/6.828/2023/xv6/book-riscv-rev3.pdf
『xv6: シンプルで Unix 風な教育用オペレーティングシステム』という日本語訳されたものは以下
https://www.sugawara-lab.jp/fig/xv6-riscv-jpn.pdf

ソースコードと照らし合わせながら、これらの文献を読むととても勉強になります。

環境構築

まずは、手元の環境で動かすための環境構築をしていきます。
基本的な構成は、qemuという仮想化ソフトウェアを使います。qemuはいわゆる、エミュレーターです。
qemuを用いる理由は、実際のハードウェア(機材)を用意しなくても、簡単にOSを試すことができるからです。

qemuについて気になる場合は、ドキュメントや記事などを参照してください。
https://www.qemu.org/
https://valinux.hatenablog.com/entry/20230112

①まずは、qemuのインストールを行います。

$ brew install quem

②QEMU上でxv6-RISCVを動かすための必要なツールをダウンロードしてきます。

$ brew tap riscv-software-src/riscv
$ brew install riscv-tools

以下参照
https://github.com/riscv-software-src/homebrew-riscv

③qemuのバージョンを確認し、正常にインストールされているかを確認します。

$ qemu-system-riscv64 --version
QEMU emulator version 5.1.0()
Copyright (c) 2003-2020 Fabrice Bellard and the QEMU Project developers

④以上を確認して、xv6-RISCVのソースコードをダウンロードします。

以下のリポジトリをgit cloneしてくる。

$ git clone https://github.com/mit-pdos/xv6-riscv

ソースコード:https://github.com/mit-pdos/xv6-riscv

qemuを上げる

cloneしたディレクトリに移動cd xv6-riscvして、以下を実行。
qemuからxv6を起動させます。

$ make qemu

以下のような表示が出たら、正常にxv6-RISCVの起動が成功しています。

PC@test xv6-riscv % make qemu
qemu-system-riscv64 -machine virt -bios none -kernel kernel/kernel -m 128M -smp 3 -nographic -global virtio-mmio.force-legacy=false -drive file=fs.img,if=none,format=raw,id=x0 -device virtio-blk-device,drive=x0,bus=virtio-mmio-bus.0

xv6 kernel is booting

hart 1 starting
hart 2 starting
init: starting sh
$

qemuを落とす

他のTerminalを立ち上げて、プロセスをkillして抜ける。

pkill -9 qemu-system-riscv64

本記事では今後、shutdownの挙動などもまとめていきます。

実際に立ち上げてソースコードを読んでいこう

ソースコードを読むときは、grepコマンドとかを使ってなるべく見当をつけながら楽して読むのが一般的です。
もしくは、vs-codeを使って、ショートカット等を使って操作できるのが一番楽だと思います。

個人的におすすめのVScodeのショートカットに関する記事がおすすめです。意外とこういうの、バカにできないなと思います。
https://qiita.com/12345/items/64f4372fbca041e949d0

OSに体感で入門する②につづく...

2
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?