SlideShare a Scribd company logo
1 of 27
Download to read offline
UNIX V6 インタプリタ



     七誌
自己紹介
• 典型的な社内ニート(たまにVBA程度)
• プログラミングはほとんど趣味
 – 良いネタができたら独立・・・と考えて早10年
 – 自然言語処理がやりたかったけど、さっぱり
• みんなで自作のおもちゃコンパイラを作って、
  自作のおもちゃOSを作って遊びたい!
• コンパイラを作るにはバイナリの知識が必要
• そのため準備としてPE勉強会を主催
自作コンパイラ
• 4年くらい掛けて独自言語コンパイラのセルフ
  ホスティングに到達
 – セルフホスティングする前はC#で書いた
• ある程度できてから、独自言語でコンパイラ
  を書き直そうとして挫折
• 2年くらい放置した後、C#から独自言語にトラ
  ンスレートすれば良いと気付いた
• こういう遊びを広めたい!
最初の失敗
独自言語
              C#
コンパイラ
のソース        コンパイラ
 (C#)

            独自言語
 サンプル
            コンパイラ   EXE
(独自言語)
             のEXE


コンパイラ書き直し   • あれもこれも!
  (独自言語)
            • セカンドシステム症候群
トランスレート
                         タイムスタンプ以外
独自言語コンパイラ        C#        完全一致!
 のソース(C#)      コンパイラ
                          独自言語
                          コンパイラ
                           のEXE
C#から独自言語への
  トランスレータ

               独自言語       独自言語
独自言語コンパイラ      コンパイラ      コンパイラ
のソース(独自言語)      のEXE       のEXE

             セルフホスティング
OS遊び
• 2年ほどFreeBSDをメインにしていたけど、巨
  大過ぎて内部には手が付けられなかった
• MINIXがシンプルで良いと思ったので、PEか
  らa.outに変換するツールを作って、VC++で
  吐いたEXEを変換して動かしてみた
 – カーネルもVC++でビルドできるようにはなったけ
   ど、アセンブリをACKからMASMに書き換える際
   に間違えたらしく、うまく動かなかった
 – カーネルハックには到達できず挫折
UNIX V6
• 1975年頃の古いUNIX
 – コンパイラ+カーネルのセットとしてはMINIXより
   も遥かにコンパクトで手頃だと思った
• 解説書のLions本は持っていたけど、どこから
  読めば良いのかよく分からず放置
• そんなとき読書会が始まった!
 – PDP-11のアセンブリが読めなくて脱落寸前
• 慣れるため、simh(エミュレータ)でV6を動か
  して、ハローワールドを書いて遊んだりした
V6のファイルシステム
• ハローワールドをディスクイメージから取り出
  して、バイナリを分析したい
• TCP/IP実装前でネットワークはない
• 仕方ないのでカーネルのソースを見ながら
  ディスクイメージを分析して、ファイルを取り出
  すツールを作った
• VFS以前の時代で、lsがディレクトリエントリを
  ユーザー側で読んでいるのが衝撃的
V6FS
• F#で作った自作のファイル抜き出しツール
• 最初はWindows FormsのGUIアプリ
• GUIアプリって気軽に試しにくいよね
 – ダウンロード→展開→実行
 – ClickOnceではインストールされてしまう
 – Windows以外ではmonoで動くけど、monoはな
   かなか普及しない
• とりあえずブラウザで動かすためSilverlight
F#
• とにかく構文が簡潔
 – セミコロンやブロックのブレースが不要
• REPL標準装備
• クラスを作らずにコードをベタ書きできる
 – C#だと必ずクラスで囲まなければいけない
   class Test { static void Main() { … } }
• モジュールをopenすれば接頭辞が不要
 – C#だとstaticメソッド呼び出しにクラス名が必要
 – VB.NETでもできるけど
Silverlight
• Webページに貼り付けるプラグイン
• MS版Flashというかアプレットみたいなもの
 – 実は.NET 1.0の頃からアプレットは作れた
 – 誰も使わない、MSも推奨しない
• GUI以外のコードが流用できるので、.NETア
  プリをWebに貼り付けるのが手軽
• サーバー側に処理を組み込まなくても、ロー
  カルに閉じた擬似ファイル送受信が可能
 – ディスクイメージ→ファイル抜き出しに使用
ツールを作ったけど
• いちいちファイルを取り出すのが面倒
• V6の外でコンパイラが動けば済むのでは?
 – バイナリ分析が目的なので、必ずしも実行できな
   くても構わない
• gccはpdp11-aoutターゲットをサポート
 – V6のコードはK&R以前の古いC言語でgcc非互
   換、アセンブラもgasとは非互換
• V6のcc/asがどうしても必要!
移植戦略
•   ccを今のC言語で書き直すのは、頑張れば
    できると思った
•   しかしasはフルアセンブラ
•   さてどうしよう・・・?

1. アセンブリを解読しながら高級言語に翻訳
2. 文法を真似て互換アセンブラを開発
3. インタプリタを作って動かす ← 採用
PDP-11インタプリタ
• 初めに逆アセンブラを作成
• 当初はGUIアプリとSilverlightを並行開発
 – すぐに面倒になりSilverlightに一本化
• 逆汗の分岐をコピペして実行に書き換え
 – PDP-11はアドレッシングモードが豊富で、初めは
   理解が曖昧だったので苦労した
 – 動いた解釈が正しいというのが判断基準
 – ひたすらログを目視でトレース
• 開発言語はVB.NET(ぇ
VB.NET
• ごめんなさい、ぬるい人間にF#はきつい!
• 言語ではなくIDEのサポート不足が問題
 – 補完が微妙とかは許容範囲内
 – 「すべての参照の検索」 ができないのは致命的
• C#の好きじゃない点もVB.NETならクリア
 – セミコロンを打たなくて良い
 – モジュールの接頭辞を省略できる
 – VB10なら次の行への継続も自動判断
   • VB9までこれができないのでC#を使っていた
コマンドライン版
• Silverlight版インタプリタでcc/asが動いた
• カーネルをビルドしていじるには、結局ローカ
  ルのコマンドラインじゃないと不自由
• 当初はVB.NETのコードでコマンドライン版を
  作ろうと思っていたけど、Lions本読書会の参
  加者に.NET愛好者はいない!
• 仕方ないので読書会前日にC++で作り直し
• V6カーネルのビルドができるのを確認
C++
• POSIX前提にInterix上で開発
 – NetBSD, FreeBSD, Mac OS Xで動作確認
• C++0xとかboostはなし
 – 依存ライブラリなしに、OSデフォルトのコンパイラ
   でサクっとビルドできるようにしたい
 – FreeBSDはGPL3避けのためgcc-4.2系で更新
   を停止している(clang待ち)
• STLを使った10年くらい前のスタイルで開発
 – STLすら使えない環境は・・・ごめんなさい
Interix
• MSが買収して公式になったPOSIXサブシステム
• Interix上のV6インタプリタでカーネルをビルドすると
  simhの5倍くらい遅い
• VMware上のNetBSDではsimhとほぼ同じ速度
• InterixのオーバーヘッドはCygwinほどではないと
  思っていたけど、これは酷い
 – Vista以降はUltimate/Enterprise縛りがあって人に薦めら
   れないので、個人的にはMSYSに移行する予定
• 仕方ないのでWin32ネイティブに移植すると、simh
  とほぼ同じスピードが出た
システムコール
• cc/asを動かすのに必要なものだけ実装
 – 標準出力/ファイル入出力/fork/exec
• 標準出力のシステムコールで出力した文字を
  テキストボックスに表示するだけ
 – トレースでV6のprintf()がデフォルトでバッファリン
   グせずに一文字ずつ出力しているのがわかる
• Silverlight上でのファイルはRAMディスク
 – 実態は単なるフルパスのハッシュテーブル
fork/exec (1)
• これが一番厄介だった
• Silverlight、POSIX、Win32それぞれ別実装
• POSIXではforkは実際にフォーク(プロセス
  のコピー)、execはVM内でのシミュレート
• SilverlightとWin32はネイティブプロセスには
  触れずに完全にVM内でのシミュレート
 – 原理的には実装を同じにできる
 – そうなっていないのは、Silverlightでの実装が稚
   拙で、Win32を実装したとき改良したため
fork/exec (2)
• V6のforkは子プロセスは   _fork:
                       mov    r5,-
                              r5,-(sp)
  コピー後そのまま実行し、         mov    sp,r5
  親プロセスは命令を1つ          sys    fork
                                    子
                    親         br 1f
  飛ばして続行                bec   2f
• Lions本読書会で教えて    1:
                        jmp   cerror

  もらった                  mov   r0,_par_uid
                        clr   r0
 – 教えてくれた方は、この仕    2:
   組みを解読するのにとて          mov   (sp)+,r5
                        rts   pc
   も苦労したとのこと
fork/exec (3)
• POSIXではホストのネイティブのforkを使って
  インタプリタのプロセスを実際にfork後、親プ
  ロセス側のVMのPCをいじって対応
     プロセス(親)
        VM
                  本物のfork
       sys fork             プロセス(子)
                              VM
       PC += 2
fork/exec (4)
                                プロセス
• Silverlightではcc/asに特          VM(親)
  化した小細工で実装
• 子はすぐexecして親はそ
                         sys fork   sys exec
  れをwaitするパターン
• execでVMのインスタンス                    VM(子)

  を作り、exit後にfork時点       PC += 2    sys exit

  にロールバックして続行            sys wait
• シングルスレッド実行のた
  めwaitは素通り
fork/exec (5)
                              プロセス
• Win32にはネイティブの        VM(親)
  forkはないため、VMのイ
  ンスタンスをコピーして擬
  似的にforkを再現           sys fork   VM(子)

• execはVMのメモリイメー                  sys exec
  ジを書き換えて再現
                       PC += 2    sys exit
• シングルスレッド実行の
  ため、Silverlightと同じよ   sys wait
  うにwaitは素通り
• Silverlightの改良モデル
オチ
• 読書会の参加者から既存のユーザーモード
  シミュレータが存在すると教えてもらった
 – apout
   http://puszcza.gnu.org.ua/software/apout/
• 存在を知っていたら、作らなかったと思う
• せっかく作ったので、ユーザーモードとカーネ
  ルモードの特定の遷移をモデル化して抽出す
  るなど、学習に特化した方向で発展させたい
最後に
• V6関係は手探りだったけど、状況がわかって
  かなり開けてきた感じ
• まごろくさんのV7の説明を聞いて、基本的な
  部分はほとんど同じだと感じた
 – 読書会でV6のバグじゃないかと指摘された部分
   がV7で直されていたりして面白い
 – BSD派なのでV6からBSDを追いたいかも
• コンパイラ・OS自作にフィードバックしたい
 – あれ、自然言語処理はいつになったら・・・
ご清聴ありがとうございました

More Related Content

What's hot

最強のPHP統合開発環境 PHPStorm
最強のPHP統合開発環境 PHPStorm最強のPHP統合開発環境 PHPStorm
最強のPHP統合開発環境 PHPStorm晃 遠山
 
Ruby で高速なプログラムを書く
Ruby で高速なプログラムを書くRuby で高速なプログラムを書く
Ruby で高速なプログラムを書くmametter
 
Ansibleハンズオン勉強会
Ansibleハンズオン勉強会Ansibleハンズオン勉強会
Ansibleハンズオン勉強会Takahisa Iwamoto
 
WordPress on PHP7 on CentOS7 on Saraku-VPS
WordPress on PHP7 on CentOS7 on Saraku-VPSWordPress on PHP7 on CentOS7 on Saraku-VPS
WordPress on PHP7 on CentOS7 on Saraku-VPSRyo Shibayama
 
Typescriptの中のこと(浅め)
Typescriptの中のこと(浅め)Typescriptの中のこと(浅め)
Typescriptの中のこと(浅め)Kazuhide Maruyama
 
俺のZabbixがこんなに可愛いわけがない
俺のZabbixがこんなに可愛いわけがない俺のZabbixがこんなに可愛いわけがない
俺のZabbixがこんなに可愛いわけがないSeiichiro Ishida
 
PhpStormを使おう --高槻からは快速急行が早くなります #jbugj
PhpStormを使おう --高槻からは快速急行が早くなります #jbugjPhpStormを使おう --高槻からは快速急行が早くなります #jbugj
PhpStormを使おう --高槻からは快速急行が早くなります #jbugjHisateru Tanaka
 
Infrastructure as codeのススメ
Infrastructure as codeのススメInfrastructure as codeのススメ
Infrastructure as codeのススメkanji htmt
 
webアプリケーションフレームワークの話
webアプリケーションフレームワークの話webアプリケーションフレームワークの話
webアプリケーションフレームワークの話Yoshihiro Ura
 
Real World PHP in pixiv
Real World PHP in pixivReal World PHP in pixiv
Real World PHP in pixivKenta USAMI
 
PHP7をDockerで動かしたという話
PHP7をDockerで動かしたという話PHP7をDockerで動かしたという話
PHP7をDockerで動かしたという話侑弥 濱田
 
Flowtype Introduction
Flowtype IntroductionFlowtype Introduction
Flowtype IntroductionTeppei Sato
 
PhpStormで始める快適なWebアプリケーション開発 #phpcon2013
PhpStormで始める快適なWebアプリケーション開発 #phpcon2013PhpStormで始める快適なWebアプリケーション開発 #phpcon2013
PhpStormで始める快適なWebアプリケーション開発 #phpcon2013晃 遠山
 
運用に効く!JVMオプション三選
運用に効く!JVMオプション三選運用に効く!JVMオプション三選
運用に効く!JVMオプション三選Kazuhiro Oinuma
 
Closure Compiler Updates for ES6
Closure Compiler Updates for ES6Closure Compiler Updates for ES6
Closure Compiler Updates for ES6Teppei Sato
 
超絶技巧プログラミングと Ruby 3.0 (大江戸 Ruby 会議 05 コミッタ LT)
超絶技巧プログラミングと Ruby 3.0 (大江戸 Ruby 会議 05 コミッタ LT)超絶技巧プログラミングと Ruby 3.0 (大江戸 Ruby 会議 05 コミッタ LT)
超絶技巧プログラミングと Ruby 3.0 (大江戸 Ruby 会議 05 コミッタ LT)mametter
 

What's hot (20)

最強のPHP統合開発環境 PHPStorm
最強のPHP統合開発環境 PHPStorm最強のPHP統合開発環境 PHPStorm
最強のPHP統合開発環境 PHPStorm
 
VimM#3
VimM#3VimM#3
VimM#3
 
Ruby で高速なプログラムを書く
Ruby で高速なプログラムを書くRuby で高速なプログラムを書く
Ruby で高速なプログラムを書く
 
Ansibleハンズオン勉強会
Ansibleハンズオン勉強会Ansibleハンズオン勉強会
Ansibleハンズオン勉強会
 
WordPress on PHP7 on CentOS7 on Saraku-VPS
WordPress on PHP7 on CentOS7 on Saraku-VPSWordPress on PHP7 on CentOS7 on Saraku-VPS
WordPress on PHP7 on CentOS7 on Saraku-VPS
 
Typescriptの中のこと(浅め)
Typescriptの中のこと(浅め)Typescriptの中のこと(浅め)
Typescriptの中のこと(浅め)
 
俺のZabbixがこんなに可愛いわけがない
俺のZabbixがこんなに可愛いわけがない俺のZabbixがこんなに可愛いわけがない
俺のZabbixがこんなに可愛いわけがない
 
PhpStormを使おう --高槻からは快速急行が早くなります #jbugj
PhpStormを使おう --高槻からは快速急行が早くなります #jbugjPhpStormを使おう --高槻からは快速急行が早くなります #jbugj
PhpStormを使おう --高槻からは快速急行が早くなります #jbugj
 
Infrastructure as codeのススメ
Infrastructure as codeのススメInfrastructure as codeのススメ
Infrastructure as codeのススメ
 
webアプリケーションフレームワークの話
webアプリケーションフレームワークの話webアプリケーションフレームワークの話
webアプリケーションフレームワークの話
 
Real World PHP in pixiv
Real World PHP in pixivReal World PHP in pixiv
Real World PHP in pixiv
 
PHP7をDockerで動かしたという話
PHP7をDockerで動かしたという話PHP7をDockerで動かしたという話
PHP7をDockerで動かしたという話
 
Flowtype Introduction
Flowtype IntroductionFlowtype Introduction
Flowtype Introduction
 
Osoljp201204
Osoljp201204Osoljp201204
Osoljp201204
 
PhpStormで始める快適なWebアプリケーション開発 #phpcon2013
PhpStormで始める快適なWebアプリケーション開発 #phpcon2013PhpStormで始める快適なWebアプリケーション開発 #phpcon2013
PhpStormで始める快適なWebアプリケーション開発 #phpcon2013
 
OSC 2011 KeySnail
OSC 2011 KeySnailOSC 2011 KeySnail
OSC 2011 KeySnail
 
運用に効く!JVMオプション三選
運用に効く!JVMオプション三選運用に効く!JVMオプション三選
運用に効く!JVMオプション三選
 
エディタ戦争
エディタ戦争エディタ戦争
エディタ戦争
 
Closure Compiler Updates for ES6
Closure Compiler Updates for ES6Closure Compiler Updates for ES6
Closure Compiler Updates for ES6
 
超絶技巧プログラミングと Ruby 3.0 (大江戸 Ruby 会議 05 コミッタ LT)
超絶技巧プログラミングと Ruby 3.0 (大江戸 Ruby 会議 05 コミッタ LT)超絶技巧プログラミングと Ruby 3.0 (大江戸 Ruby 会議 05 コミッタ LT)
超絶技巧プログラミングと Ruby 3.0 (大江戸 Ruby 会議 05 コミッタ LT)
 

Viewers also liked

Unixファイルシステムの歴史
Unixファイルシステムの歴史Unixファイルシステムの歴史
Unixファイルシステムの歴史magoroku Yamamoto
 
PDP-11のインタプリタを作った話
PDP-11のインタプリタを作った話PDP-11のインタプリタを作った話
PDP-11のインタプリタを作った話kanorimon
 
シンプル資産運用法
シンプル資産運用法シンプル資産運用法
シンプル資産運用法renny_29
 
貯金エクササイズ
貯金エクササイズ貯金エクササイズ
貯金エクササイズTakuya Komatsu
 
ファイルシステム
ファイルシステムファイルシステム
ファイルシステムYohei Tanaka
 
20140607 限界はどこにある?
20140607 限界はどこにある?20140607 限界はどこにある?
20140607 限界はどこにある?Runabout GIA
 
2015年10月度スパイス・パークのアップデート計画
2015年10月度スパイス・パークのアップデート計画2015年10月度スパイス・パークのアップデート計画
2015年10月度スパイス・パークのアップデート計画Tsuyoshi Horigome
 
家計簿習慣化支援サービス ~エロい家計簿~
家計簿習慣化支援サービス ~エロい家計簿~家計簿習慣化支援サービス ~エロい家計簿~
家計簿習慣化支援サービス ~エロい家計簿~Takuya Komatsu
 
物欲家計簿プレゼン
物欲家計簿プレゼン物欲家計簿プレゼン
物欲家計簿プレゼンTakuya Komatsu
 
仕様記述言語の中の関数
仕様記述言語の中の関数仕様記述言語の中の関数
仕様記述言語の中の関数ardbeg1958
 
お金持ちはなぜタワーマンションに住むの?そのリスクは?
お金持ちはなぜタワーマンションに住むの?そのリスクは?お金持ちはなぜタワーマンションに住むの?そのリスクは?
お金持ちはなぜタワーマンションに住むの?そのリスクは?節約 社長
 
だいたいデジタルのライフログ
だいたいデジタルのライフログだいたいデジタルのライフログ
だいたいデジタルのライフログRyusuke Goto
 
[20120410] @marqsの転職を祝うLT
[20120410] @marqsの転職を祝うLT[20120410] @marqsの転職を祝うLT
[20120410] @marqsの転職を祝うLTYoshifumi Yamaguchi
 
0423mitsubishi
0423mitsubishi0423mitsubishi
0423mitsubishiloftwork
 
日本を捨てた富裕層たち
日本を捨てた富裕層たち日本を捨てた富裕層たち
日本を捨てた富裕層たちyorihiko katou
 
Language presentations at WOCS and after.
Language presentations at WOCS and after.Language presentations at WOCS and after.
Language presentations at WOCS and after.Kiyoshi Ogawa
 

Viewers also liked (20)

Unixファイルシステムの歴史
Unixファイルシステムの歴史Unixファイルシステムの歴史
Unixファイルシステムの歴史
 
PDP-11のインタプリタを作った話
PDP-11のインタプリタを作った話PDP-11のインタプリタを作った話
PDP-11のインタプリタを作った話
 
V6 unix in okinawa
V6 unix in okinawaV6 unix in okinawa
V6 unix in okinawa
 
シンプル資産運用法
シンプル資産運用法シンプル資産運用法
シンプル資産運用法
 
貯金エクササイズ
貯金エクササイズ貯金エクササイズ
貯金エクササイズ
 
ファイルシステム
ファイルシステムファイルシステム
ファイルシステム
 
Deb2009
Deb2009Deb2009
Deb2009
 
20140607 限界はどこにある?
20140607 限界はどこにある?20140607 限界はどこにある?
20140607 限界はどこにある?
 
2015年10月度スパイス・パークのアップデート計画
2015年10月度スパイス・パークのアップデート計画2015年10月度スパイス・パークのアップデート計画
2015年10月度スパイス・パークのアップデート計画
 
家計簿習慣化支援サービス ~エロい家計簿~
家計簿習慣化支援サービス ~エロい家計簿~家計簿習慣化支援サービス ~エロい家計簿~
家計簿習慣化支援サービス ~エロい家計簿~
 
物欲家計簿プレゼン
物欲家計簿プレゼン物欲家計簿プレゼン
物欲家計簿プレゼン
 
仕様記述言語の中の関数
仕様記述言語の中の関数仕様記述言語の中の関数
仕様記述言語の中の関数
 
Hiib
HiibHiib
Hiib
 
お金持ちはなぜタワーマンションに住むの?そのリスクは?
お金持ちはなぜタワーマンションに住むの?そのリスクは?お金持ちはなぜタワーマンションに住むの?そのリスクは?
お金持ちはなぜタワーマンションに住むの?そのリスクは?
 
だいたいデジタルのライフログ
だいたいデジタルのライフログだいたいデジタルのライフログ
だいたいデジタルのライフログ
 
[20120410] @marqsの転職を祝うLT
[20120410] @marqsの転職を祝うLT[20120410] @marqsの転職を祝うLT
[20120410] @marqsの転職を祝うLT
 
0423mitsubishi
0423mitsubishi0423mitsubishi
0423mitsubishi
 
日本を捨てた富裕層たち
日本を捨てた富裕層たち日本を捨てた富裕層たち
日本を捨てた富裕層たち
 
婚活メソッド
婚活メソッド婚活メソッド
婚活メソッド
 
Language presentations at WOCS and after.
Language presentations at WOCS and after.Language presentations at WOCS and after.
Language presentations at WOCS and after.
 

Similar to V6 Interpreter (Nagoya Geek Bar 2011-05-02)

密着!わたしのコンソールアプリ開発環境
密着!わたしのコンソールアプリ開発環境密着!わたしのコンソールアプリ開発環境
密着!わたしのコンソールアプリ開発環境Fumihito Yokoyama
 
動画共有ツール
動画共有ツール動画共有ツール
動画共有ツールtamtam180
 
Emscriptenと不思議のダンジョン
Emscriptenと不思議のダンジョンEmscriptenと不思議のダンジョン
Emscriptenと不思議のダンジョン兎 伊藤
 
NetBSDのクロスビルドのしくみとインストール済みLive Imageの作成
NetBSDのクロスビルドのしくみとインストール済みLive Imageの作成NetBSDのクロスビルドのしくみとインストール済みLive Imageの作成
NetBSDのクロスビルドのしくみとインストール済みLive Imageの作成Izumi Tsutsui
 
このべん第二回 ~「できない子ほどかわいくしたい!ConoHa補完計画」勉強会
このべん第二回 ~「できない子ほどかわいくしたい!ConoHa補完計画」勉強会このべん第二回 ~「できない子ほどかわいくしたい!ConoHa補完計画」勉強会
このべん第二回 ~「できない子ほどかわいくしたい!ConoHa補完計画」勉強会ConoHa, GMO INTERNET
 
初心者がOpenIndianaで自宅サーバを作ったよって話
初心者がOpenIndianaで自宅サーバを作ったよって話初心者がOpenIndianaで自宅サーバを作ったよって話
初心者がOpenIndianaで自宅サーバを作ったよって話Masataka Tsukamoto
 
Visual Studioで始めるTypeScript開発入門
Visual Studioで始めるTypeScript開発入門Visual Studioで始めるTypeScript開発入門
Visual Studioで始めるTypeScript開発入門Narami Kiyokura
 
CLR/H第54回勉強会 ライトニングトーク
CLR/H第54回勉強会 ライトニングトークCLR/H第54回勉強会 ライトニングトーク
CLR/H第54回勉強会 ライトニングトークJun-ichi Sakamoto
 
FOLIOのコードを動かしてみた
FOLIOのコードを動かしてみたFOLIOのコードを動かしてみた
FOLIOのコードを動かしてみたFutoshi Tanuma
 
Aspnet mvc 6の今を紹介
Aspnet mvc 6の今を紹介Aspnet mvc 6の今を紹介
Aspnet mvc 6の今を紹介Makoto Nishimura
 
うわ…私のEmacs力、低すぎ...?
うわ…私のEmacs力、低すぎ...?うわ…私のEmacs力、低すぎ...?
うわ…私のEmacs力、低すぎ...?Masahiro Sano
 
scheme処理系の実装
scheme処理系の実装scheme処理系の実装
scheme処理系の実装bobuhiro11
 
Yet Another DLR for Silverlightの試作
Yet Another DLR for Silverlightの試作Yet Another DLR for Silverlightの試作
Yet Another DLR for Silverlightの試作terurou
 
たのしいNode.js
たのしいNode.jsたのしいNode.js
たのしいNode.jsishiki-takai
 
Ansible ではじめるサーバ作業の自動化
Ansible ではじめるサーバ作業の自動化Ansible ではじめるサーバ作業の自動化
Ansible ではじめるサーバ作業の自動化Masashi Shinbara
 
WebRTC mediasoup on raspberrypi3
WebRTC mediasoup on raspberrypi3WebRTC mediasoup on raspberrypi3
WebRTC mediasoup on raspberrypi3mganeko
 
composer-scriptsについて
composer-scriptsについてcomposer-scriptsについて
composer-scriptsについてHiraku Nakano
 
Unix architecture
Unix architectureUnix architecture
Unix architectureraw-hide
 
メガ Unity ユーザーミートアップ 2012
メガ Unity ユーザーミートアップ 2012メガ Unity ユーザーミートアップ 2012
メガ Unity ユーザーミートアップ 2012cfm_art
 

Similar to V6 Interpreter (Nagoya Geek Bar 2011-05-02) (20)

密着!わたしのコンソールアプリ開発環境
密着!わたしのコンソールアプリ開発環境密着!わたしのコンソールアプリ開発環境
密着!わたしのコンソールアプリ開発環境
 
動画共有ツール
動画共有ツール動画共有ツール
動画共有ツール
 
Emscriptenと不思議のダンジョン
Emscriptenと不思議のダンジョンEmscriptenと不思議のダンジョン
Emscriptenと不思議のダンジョン
 
NetBSDのクロスビルドのしくみとインストール済みLive Imageの作成
NetBSDのクロスビルドのしくみとインストール済みLive Imageの作成NetBSDのクロスビルドのしくみとインストール済みLive Imageの作成
NetBSDのクロスビルドのしくみとインストール済みLive Imageの作成
 
このべん第二回 ~「できない子ほどかわいくしたい!ConoHa補完計画」勉強会
このべん第二回 ~「できない子ほどかわいくしたい!ConoHa補完計画」勉強会このべん第二回 ~「できない子ほどかわいくしたい!ConoHa補完計画」勉強会
このべん第二回 ~「できない子ほどかわいくしたい!ConoHa補完計画」勉強会
 
初心者がOpenIndianaで自宅サーバを作ったよって話
初心者がOpenIndianaで自宅サーバを作ったよって話初心者がOpenIndianaで自宅サーバを作ったよって話
初心者がOpenIndianaで自宅サーバを作ったよって話
 
Visual Studioで始めるTypeScript開発入門
Visual Studioで始めるTypeScript開発入門Visual Studioで始めるTypeScript開発入門
Visual Studioで始めるTypeScript開発入門
 
CLR/H第54回勉強会 ライトニングトーク
CLR/H第54回勉強会 ライトニングトークCLR/H第54回勉強会 ライトニングトーク
CLR/H第54回勉強会 ライトニングトーク
 
FOLIOのコードを動かしてみた
FOLIOのコードを動かしてみたFOLIOのコードを動かしてみた
FOLIOのコードを動かしてみた
 
Aspnet mvc 6の今を紹介
Aspnet mvc 6の今を紹介Aspnet mvc 6の今を紹介
Aspnet mvc 6の今を紹介
 
邪道Jenkins
邪道Jenkins邪道Jenkins
邪道Jenkins
 
うわ…私のEmacs力、低すぎ...?
うわ…私のEmacs力、低すぎ...?うわ…私のEmacs力、低すぎ...?
うわ…私のEmacs力、低すぎ...?
 
scheme処理系の実装
scheme処理系の実装scheme処理系の実装
scheme処理系の実装
 
Yet Another DLR for Silverlightの試作
Yet Another DLR for Silverlightの試作Yet Another DLR for Silverlightの試作
Yet Another DLR for Silverlightの試作
 
たのしいNode.js
たのしいNode.jsたのしいNode.js
たのしいNode.js
 
Ansible ではじめるサーバ作業の自動化
Ansible ではじめるサーバ作業の自動化Ansible ではじめるサーバ作業の自動化
Ansible ではじめるサーバ作業の自動化
 
WebRTC mediasoup on raspberrypi3
WebRTC mediasoup on raspberrypi3WebRTC mediasoup on raspberrypi3
WebRTC mediasoup on raspberrypi3
 
composer-scriptsについて
composer-scriptsについてcomposer-scriptsについて
composer-scriptsについて
 
Unix architecture
Unix architectureUnix architecture
Unix architecture
 
メガ Unity ユーザーミートアップ 2012
メガ Unity ユーザーミートアップ 2012メガ Unity ユーザーミートアップ 2012
メガ Unity ユーザーミートアップ 2012
 

More from 7shi

ELFの動的リンク
ELFの動的リンクELFの動的リンク
ELFの動的リンク7shi
 
F#とトランスレータ
F#とトランスレータF#とトランスレータ
F#とトランスレータ7shi
 
F#談話室(3) LT
F#談話室(3) LTF#談話室(3) LT
F#談話室(3) LT7shi
 
マーク&スイープ勉強会
マーク&スイープ勉強会マーク&スイープ勉強会
マーク&スイープ勉強会7shi
 
Cコンパイラの改造(未)
Cコンパイラの改造(未)Cコンパイラの改造(未)
Cコンパイラの改造(未)7shi
 
V6でJIT・部分適用・継続
V6でJIT・部分適用・継続V6でJIT・部分適用・継続
V6でJIT・部分適用・継続7shi
 
ZIP勉強会
ZIP勉強会ZIP勉強会
ZIP勉強会7shi
 
Deflate
DeflateDeflate
Deflate7shi
 
CRC-32
CRC-32CRC-32
CRC-327shi
 
無料環境でWindows Mobileアプリ開発
無料環境でWindows Mobileアプリ開発無料環境でWindows Mobileアプリ開発
無料環境でWindows Mobileアプリ開発7shi
 
LLPML
LLPMLLLPML
LLPML7shi
 

More from 7shi (11)

ELFの動的リンク
ELFの動的リンクELFの動的リンク
ELFの動的リンク
 
F#とトランスレータ
F#とトランスレータF#とトランスレータ
F#とトランスレータ
 
F#談話室(3) LT
F#談話室(3) LTF#談話室(3) LT
F#談話室(3) LT
 
マーク&スイープ勉強会
マーク&スイープ勉強会マーク&スイープ勉強会
マーク&スイープ勉強会
 
Cコンパイラの改造(未)
Cコンパイラの改造(未)Cコンパイラの改造(未)
Cコンパイラの改造(未)
 
V6でJIT・部分適用・継続
V6でJIT・部分適用・継続V6でJIT・部分適用・継続
V6でJIT・部分適用・継続
 
ZIP勉強会
ZIP勉強会ZIP勉強会
ZIP勉強会
 
Deflate
DeflateDeflate
Deflate
 
CRC-32
CRC-32CRC-32
CRC-32
 
無料環境でWindows Mobileアプリ開発
無料環境でWindows Mobileアプリ開発無料環境でWindows Mobileアプリ開発
無料環境でWindows Mobileアプリ開発
 
LLPML
LLPMLLLPML
LLPML
 

Recently uploaded

クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdf
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdfクラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdf
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdfFumieNakayama
 
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察 ~Text-to-MusicとText-To-ImageかつImage-to-Music...
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察  ~Text-to-MusicとText-To-ImageかつImage-to-Music...モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察  ~Text-to-MusicとText-To-ImageかつImage-to-Music...
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察 ~Text-to-MusicとText-To-ImageかつImage-to-Music...博三 太田
 
SOPを理解する 2024/04/19 の勉強会で発表されたものです
SOPを理解する       2024/04/19 の勉強会で発表されたものですSOPを理解する       2024/04/19 の勉強会で発表されたものです
SOPを理解する 2024/04/19 の勉強会で発表されたものですiPride Co., Ltd.
 
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)UEHARA, Tetsutaro
 
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)Hiroki Ichikura
 
論文紹介:Automated Classification of Model Errors on ImageNet
論文紹介:Automated Classification of Model Errors on ImageNet論文紹介:Automated Classification of Model Errors on ImageNet
論文紹介:Automated Classification of Model Errors on ImageNetToru Tamaki
 
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介Yuma Ohgami
 
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...Toru Tamaki
 
TSAL operation mechanism and circuit diagram.pdf
TSAL operation mechanism and circuit diagram.pdfTSAL operation mechanism and circuit diagram.pdf
TSAL operation mechanism and circuit diagram.pdftaisei2219
 
論文紹介:Semantic segmentation using Vision Transformers: A survey
論文紹介:Semantic segmentation using Vision Transformers: A survey論文紹介:Semantic segmentation using Vision Transformers: A survey
論文紹介:Semantic segmentation using Vision Transformers: A surveyToru Tamaki
 
TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案
TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案
TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案sugiuralab
 
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdf
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdfAWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdf
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdfFumieNakayama
 

Recently uploaded (12)

クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdf
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdfクラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdf
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdf
 
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察 ~Text-to-MusicとText-To-ImageかつImage-to-Music...
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察  ~Text-to-MusicとText-To-ImageかつImage-to-Music...モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察  ~Text-to-MusicとText-To-ImageかつImage-to-Music...
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察 ~Text-to-MusicとText-To-ImageかつImage-to-Music...
 
SOPを理解する 2024/04/19 の勉強会で発表されたものです
SOPを理解する       2024/04/19 の勉強会で発表されたものですSOPを理解する       2024/04/19 の勉強会で発表されたものです
SOPを理解する 2024/04/19 の勉強会で発表されたものです
 
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)
 
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)
 
論文紹介:Automated Classification of Model Errors on ImageNet
論文紹介:Automated Classification of Model Errors on ImageNet論文紹介:Automated Classification of Model Errors on ImageNet
論文紹介:Automated Classification of Model Errors on ImageNet
 
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介
 
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...
 
TSAL operation mechanism and circuit diagram.pdf
TSAL operation mechanism and circuit diagram.pdfTSAL operation mechanism and circuit diagram.pdf
TSAL operation mechanism and circuit diagram.pdf
 
論文紹介:Semantic segmentation using Vision Transformers: A survey
論文紹介:Semantic segmentation using Vision Transformers: A survey論文紹介:Semantic segmentation using Vision Transformers: A survey
論文紹介:Semantic segmentation using Vision Transformers: A survey
 
TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案
TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案
TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案
 
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdf
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdfAWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdf
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdf
 

V6 Interpreter (Nagoya Geek Bar 2011-05-02)

  • 2. 自己紹介 • 典型的な社内ニート(たまにVBA程度) • プログラミングはほとんど趣味 – 良いネタができたら独立・・・と考えて早10年 – 自然言語処理がやりたかったけど、さっぱり • みんなで自作のおもちゃコンパイラを作って、 自作のおもちゃOSを作って遊びたい! • コンパイラを作るにはバイナリの知識が必要 • そのため準備としてPE勉強会を主催
  • 3. 自作コンパイラ • 4年くらい掛けて独自言語コンパイラのセルフ ホスティングに到達 – セルフホスティングする前はC#で書いた • ある程度できてから、独自言語でコンパイラ を書き直そうとして挫折 • 2年くらい放置した後、C#から独自言語にトラ ンスレートすれば良いと気付いた • こういう遊びを広めたい!
  • 4. 最初の失敗 独自言語 C# コンパイラ のソース コンパイラ (C#) 独自言語 サンプル コンパイラ EXE (独自言語) のEXE コンパイラ書き直し • あれもこれも! (独自言語) • セカンドシステム症候群
  • 5. トランスレート タイムスタンプ以外 独自言語コンパイラ C# 完全一致! のソース(C#) コンパイラ 独自言語 コンパイラ のEXE C#から独自言語への トランスレータ 独自言語 独自言語 独自言語コンパイラ コンパイラ コンパイラ のソース(独自言語) のEXE のEXE セルフホスティング
  • 6. OS遊び • 2年ほどFreeBSDをメインにしていたけど、巨 大過ぎて内部には手が付けられなかった • MINIXがシンプルで良いと思ったので、PEか らa.outに変換するツールを作って、VC++で 吐いたEXEを変換して動かしてみた – カーネルもVC++でビルドできるようにはなったけ ど、アセンブリをACKからMASMに書き換える際 に間違えたらしく、うまく動かなかった – カーネルハックには到達できず挫折
  • 7. UNIX V6 • 1975年頃の古いUNIX – コンパイラ+カーネルのセットとしてはMINIXより も遥かにコンパクトで手頃だと思った • 解説書のLions本は持っていたけど、どこから 読めば良いのかよく分からず放置 • そんなとき読書会が始まった! – PDP-11のアセンブリが読めなくて脱落寸前 • 慣れるため、simh(エミュレータ)でV6を動か して、ハローワールドを書いて遊んだりした
  • 8. V6のファイルシステム • ハローワールドをディスクイメージから取り出 して、バイナリを分析したい • TCP/IP実装前でネットワークはない • 仕方ないのでカーネルのソースを見ながら ディスクイメージを分析して、ファイルを取り出 すツールを作った • VFS以前の時代で、lsがディレクトリエントリを ユーザー側で読んでいるのが衝撃的
  • 9. V6FS • F#で作った自作のファイル抜き出しツール • 最初はWindows FormsのGUIアプリ • GUIアプリって気軽に試しにくいよね – ダウンロード→展開→実行 – ClickOnceではインストールされてしまう – Windows以外ではmonoで動くけど、monoはな かなか普及しない • とりあえずブラウザで動かすためSilverlight
  • 10. F# • とにかく構文が簡潔 – セミコロンやブロックのブレースが不要 • REPL標準装備 • クラスを作らずにコードをベタ書きできる – C#だと必ずクラスで囲まなければいけない class Test { static void Main() { … } } • モジュールをopenすれば接頭辞が不要 – C#だとstaticメソッド呼び出しにクラス名が必要 – VB.NETでもできるけど
  • 11. Silverlight • Webページに貼り付けるプラグイン • MS版Flashというかアプレットみたいなもの – 実は.NET 1.0の頃からアプレットは作れた – 誰も使わない、MSも推奨しない • GUI以外のコードが流用できるので、.NETア プリをWebに貼り付けるのが手軽 • サーバー側に処理を組み込まなくても、ロー カルに閉じた擬似ファイル送受信が可能 – ディスクイメージ→ファイル抜き出しに使用
  • 12. ツールを作ったけど • いちいちファイルを取り出すのが面倒 • V6の外でコンパイラが動けば済むのでは? – バイナリ分析が目的なので、必ずしも実行できな くても構わない • gccはpdp11-aoutターゲットをサポート – V6のコードはK&R以前の古いC言語でgcc非互 換、アセンブラもgasとは非互換 • V6のcc/asがどうしても必要!
  • 13. 移植戦略 • ccを今のC言語で書き直すのは、頑張れば できると思った • しかしasはフルアセンブラ • さてどうしよう・・・? 1. アセンブリを解読しながら高級言語に翻訳 2. 文法を真似て互換アセンブラを開発 3. インタプリタを作って動かす ← 採用
  • 14. PDP-11インタプリタ • 初めに逆アセンブラを作成 • 当初はGUIアプリとSilverlightを並行開発 – すぐに面倒になりSilverlightに一本化 • 逆汗の分岐をコピペして実行に書き換え – PDP-11はアドレッシングモードが豊富で、初めは 理解が曖昧だったので苦労した – 動いた解釈が正しいというのが判断基準 – ひたすらログを目視でトレース • 開発言語はVB.NET(ぇ
  • 15. VB.NET • ごめんなさい、ぬるい人間にF#はきつい! • 言語ではなくIDEのサポート不足が問題 – 補完が微妙とかは許容範囲内 – 「すべての参照の検索」 ができないのは致命的 • C#の好きじゃない点もVB.NETならクリア – セミコロンを打たなくて良い – モジュールの接頭辞を省略できる – VB10なら次の行への継続も自動判断 • VB9までこれができないのでC#を使っていた
  • 16. コマンドライン版 • Silverlight版インタプリタでcc/asが動いた • カーネルをビルドしていじるには、結局ローカ ルのコマンドラインじゃないと不自由 • 当初はVB.NETのコードでコマンドライン版を 作ろうと思っていたけど、Lions本読書会の参 加者に.NET愛好者はいない! • 仕方ないので読書会前日にC++で作り直し • V6カーネルのビルドができるのを確認
  • 17. C++ • POSIX前提にInterix上で開発 – NetBSD, FreeBSD, Mac OS Xで動作確認 • C++0xとかboostはなし – 依存ライブラリなしに、OSデフォルトのコンパイラ でサクっとビルドできるようにしたい – FreeBSDはGPL3避けのためgcc-4.2系で更新 を停止している(clang待ち) • STLを使った10年くらい前のスタイルで開発 – STLすら使えない環境は・・・ごめんなさい
  • 18. Interix • MSが買収して公式になったPOSIXサブシステム • Interix上のV6インタプリタでカーネルをビルドすると simhの5倍くらい遅い • VMware上のNetBSDではsimhとほぼ同じ速度 • InterixのオーバーヘッドはCygwinほどではないと 思っていたけど、これは酷い – Vista以降はUltimate/Enterprise縛りがあって人に薦めら れないので、個人的にはMSYSに移行する予定 • 仕方ないのでWin32ネイティブに移植すると、simh とほぼ同じスピードが出た
  • 19. システムコール • cc/asを動かすのに必要なものだけ実装 – 標準出力/ファイル入出力/fork/exec • 標準出力のシステムコールで出力した文字を テキストボックスに表示するだけ – トレースでV6のprintf()がデフォルトでバッファリン グせずに一文字ずつ出力しているのがわかる • Silverlight上でのファイルはRAMディスク – 実態は単なるフルパスのハッシュテーブル
  • 20. fork/exec (1) • これが一番厄介だった • Silverlight、POSIX、Win32それぞれ別実装 • POSIXではforkは実際にフォーク(プロセス のコピー)、execはVM内でのシミュレート • SilverlightとWin32はネイティブプロセスには 触れずに完全にVM内でのシミュレート – 原理的には実装を同じにできる – そうなっていないのは、Silverlightでの実装が稚 拙で、Win32を実装したとき改良したため
  • 21. fork/exec (2) • V6のforkは子プロセスは _fork: mov r5,- r5,-(sp) コピー後そのまま実行し、 mov sp,r5 親プロセスは命令を1つ sys fork 子 親 br 1f 飛ばして続行 bec 2f • Lions本読書会で教えて 1: jmp cerror もらった mov r0,_par_uid clr r0 – 教えてくれた方は、この仕 2: 組みを解読するのにとて mov (sp)+,r5 rts pc も苦労したとのこと
  • 22. fork/exec (3) • POSIXではホストのネイティブのforkを使って インタプリタのプロセスを実際にfork後、親プ ロセス側のVMのPCをいじって対応 プロセス(親) VM 本物のfork sys fork プロセス(子) VM PC += 2
  • 23. fork/exec (4) プロセス • Silverlightではcc/asに特 VM(親) 化した小細工で実装 • 子はすぐexecして親はそ sys fork sys exec れをwaitするパターン • execでVMのインスタンス VM(子) を作り、exit後にfork時点 PC += 2 sys exit にロールバックして続行 sys wait • シングルスレッド実行のた めwaitは素通り
  • 24. fork/exec (5) プロセス • Win32にはネイティブの VM(親) forkはないため、VMのイ ンスタンスをコピーして擬 似的にforkを再現 sys fork VM(子) • execはVMのメモリイメー sys exec ジを書き換えて再現 PC += 2 sys exit • シングルスレッド実行の ため、Silverlightと同じよ sys wait うにwaitは素通り • Silverlightの改良モデル
  • 25. オチ • 読書会の参加者から既存のユーザーモード シミュレータが存在すると教えてもらった – apout http://puszcza.gnu.org.ua/software/apout/ • 存在を知っていたら、作らなかったと思う • せっかく作ったので、ユーザーモードとカーネ ルモードの特定の遷移をモデル化して抽出す るなど、学習に特化した方向で発展させたい
  • 26. 最後に • V6関係は手探りだったけど、状況がわかって かなり開けてきた感じ • まごろくさんのV7の説明を聞いて、基本的な 部分はほとんど同じだと感じた – 読書会でV6のバグじゃないかと指摘された部分 がV7で直されていたりして面白い – BSD派なのでV6からBSDを追いたいかも • コンパイラ・OS自作にフィードバックしたい – あれ、自然言語処理はいつになったら・・・