Skip to content

rsk-ymst/minix_vm

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

5 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

x8086アーキテクチャ対応 MINIX2 VM Emulator

概要

当プロジェクトは,x8086アーキテクチャ対応MINIX2のユーザランドで実行可能なバイナリファイル の実行をエミュレーションするプログラムである.当プログラムには以下の3種類の実行モードがある.

  • デフォルト;通常の実行モード
  • ディスアセンブル;バイナリファイルのテキスト情報をディスアセンブルした結果を表示する
  • VM;バイナリファイルを実行し,命令ごとのレジスタ・メモリの状況を表示する

開発環境

  • OS: Ubuntu 22.04.4 LTS
  • CPU: intel x86_64 13th Gen Intel(R) Core(TM) i7-13700K
  • ツールチェイン: cargo 1.76.0 (c84b36747 2024-01-18)
    • コンパイラ: rustc 1.76.0 (07dca489a 2024-02-04)
    • コンパイル対象:x86_64-unknown-linux-gnu

補足事項

  • ディスアセンブル及びVMモードのフォーマットは既存VMと同一である.既存VMの出力と差分を確認することによってプログラムを検証する.
  • ルートディレクトリのa.outnmの実行に必要であるため残しておく

ファイル構成

./src
├── arch
│   ├── asm.rs        ... 命令セットに関する構造体及び関数を定義している
│   ├── bin.rs        ... バイナリファイルに関する構造体及び関数を提供している
│   ├── constant.rs   ... 定数の情報が格納されている
│   ├── decode.rs     ... テキスト情報の解析に関する機能が含まれている
│   ├── header.rs     ... ファイルヘッダの定義及び処理を行う構造体や関数が含まれている
│   ├── mod.rs        ... モジュールのルートファイルで、他のファイルをまとめて管理している
│   ├── opcode.rs     ... オペコード(命令コード)に関する構造体や関数が含まれている
│   ├── operand.rs    ... オペランド(命令の対象)に関する情報が含まれている
│   ├── reg.rs        ... レジスタに関する構造体及び関数が含まれている
│   └── vm.rs         ... 仮想マシンに関する機能を提供している
├── main.rs            ... プログラムのエントリポイント
└── test
    └── mod.rs        ... テスト用のモジュールファイルで、テストコードが含まれている

実行

cargo run-- のあとにバイナリファイルに渡すオプションを指定する.(ビルドも同時に行う)

通常実行

cargo run -- <file>

VMを実行する場合

cargo run -- -m <file>

ディスアセンブラを実行する場合

cargo run -- -d <file>
  • なお,releaseモードでビルドした実行ファイルminix_vmもルートディレクトリに用意しており,上記と同様のオプションで実行可能である

テスト

  • すべてのモードのテストケースを用意
  • ./bin/minix2_setuptool/tests/1.c~7.cに対応する実行ファイル1c~7cと,nmが格納されている.
  • ./origin/default,./origin/dasm, ./origin/vm にそれぞれ既存VMのデフォルト,ディスアセンブル,VMモードの実行の出力結果が格納されており,テストコマンドによって当VMの出力と比較を行う.
  • 当VMの出力は./out/default,./out/dasm, ./out/vmに格納される

全てのテスト実行

cargo test

デフォルトモードのテスト実行

cargo test default

ディスアセンブラ実行

cargo test dasm 

VMのテスト実行

cargo test vm

工夫点

  • 既存VMの出力との比較テストケースを最初に用意し,テスト駆動的に開発した
  • オペコードの粒度をドキュメントに沿って細かくした.
    • 例:addadd Immediate to Register/Memory, add Immediate to Accumulatorなどに分ける
    • 命令実行の統計情報を集積する等、VMならではの機能を追加する場面では有用であると判断してこの仕様にした.しかし,今回の用途では必要なかった

About

Emulator for minix os

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published