第11回 カーネル/VM 探検隊
筆者注 UPDATE3 Dec 2019 未だストックが伸びていますが、この記事はあまりにも古いです。そろそろこの記事を参考にするのはヤバいと思います。 UPDATE2 Nov 2016 たくさんの反響ありがとうございます。予想以上に「いいね」「ストック」が伸び続けていたため、記事中のよろしくない部分を修正しました。 UPDATE Nov 2016 本記事は筆者自身も未熟な時期に書いたもので、今読み返してみるとやや不正確な表現があったり、既により良い手段に置き換えられている内容が含まれます。足がかり程度にお読みください。 1. はじめに この記事の想定読者 私 VagrantとDocker、どちらも名前だけは知ってるという方 インフラ構成のコード化と共有に興味があるけどまだ触ってないという方 各種ソフトの概要と利用シーンについて軽く触れつつ、調べた内容をまとめておきました。 (執筆時点でそ
HHVM の話を聴いてからというもの、VM というものにどうにも興味がわいて仕方がない今日この頃。世の中の言語処理系も中身は VM だったりするわけで、そもそも VM ってどうやって作るのかな − とか考えてたら @riywo PDP-11のVM作って、Unix V6動かせば、一石何鳥になることやら — sakamoto.kazuki (@splhack) October 1, 2014 というご意見をもらって、初めて PDP-11 というものを調べ始めました。UNIX V6 の本とかを買って読み始めてみたり、言語処理系の作り方の本にも手をだしてみました。 PDP-11/UNIX V6 の勉強会があった そんな中、@7shiさんが主催されている「池袋バイナリ勉強会」の存在を知りました。なんと、ついこの間まで PDP-11 の逆アセンブラ(機械語のバイナリからアセンブリ言語を出力する)を作っ
3130292827262524232221201918171615141312111009080706050403020100
なんとなく、mrubyのVMの基本的なところを書いておこうと思ったので。誰かの参考になれば。 大きな仕様的なところは、 ・32bit固定長のバイトコードを解釈して動作する。 ・レジスタをスタックに確保するタイプのレジスタマシンである。従って、スタックの任意の位置をレジスタ番号で指定して直接読み書き可能。 ・メソッドやブロックなどの単位でバイトコードがirep構造体にまとめられている。 みたいな感じ。 スタックの使い方 スタックトップがレジスタのR0となり、以下、R1、R2・・・と名前が付けられる。スタックの型はmrb_valueの配列であり、つまりmrubyオブジェクトが詰まっている。irepのコードを呼び出すとき、スタックの上から順に以下のような情報を積んでから呼ばれる。 (引数が2個あった場合の例) R0 |self | R1 |argument1| R2 |argument2| R3
このブログエントリはカーネル/VM Advent Calendar 2013 25日目の記事です。 前回、カーネル/VM探検隊で「バインディングさえあればスクリプト言語でもゲストOSローダを実装出来る」という話をちらっとしました(資料)。 今回の記事では、ゲストOSローダではなくてもっと実験的な、簡単なアセンブリコードをRubyスクリプトからハイパーバイザへ投入する仕組みを実装したのでこれを紹介します。 ruby-virtualmachine ruby-virtualmachineというgemを作成しました。 これを用いて、任意のアセンブリコードをアセンブル・ロード・VM上で実行、までの一連の処理をわずかな行数のRubyスクリプトで行えます。 インストール BHyVeが正常動作するFreeBSD 10.0以降の環境が必要です。 インストールコマンドは以下の通りになります。 $ gem in
リリース、障害情報などのサービスのお知らせ
最新の人気エントリーの配信
処理を実行中です
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く