2009年2月10日

VirtualMachine本: Chapter 3 Process Virtual Machines

[ LowLevel ]

Virtual Machines: Versatile Platforms For Systems And Processes (The Morgan Kaufmann Series in Computer Architecture and Design)Virtual Machines: Versatile Platforms For Systems And Processes

VM本第三章やっと読み終わりました。ProcessVMについてです。

いろいろなVMがあるけど、ここではProcess or Program VMについて語られます。「仮想ABI」です。たとえばIA-32/WindowsのアプリケーションをItaniumのWindows上で動作させるものです。

続きを読む "VirtualMachine本: Chapter 3 Process Virtual Machines" »

2009年2月 4日

VirtualMachine本のひとり勉強会

[ LowLevel ]

VM本読書記録がいくら自分用メモとはいえ、粒度がむちゃくちゃで読みにくいので、いったんVM本の全体構成をおさらいしてみましょう。(そういうことは先にやれ>おれ)

現時点(2009.2.4)では、Chapter 3の途中です。読み進むにつれ、このエントリはかきかえていきます。

Chapter 1: Introduction to Virtual Machines

Chapter1のメモ

タイトル通り、仮想マシンへのイントロダクション。コンピュータのアーキテクチャ、「仮想」とはなんであるか、仮想マシンのいろいろ、そして本書の構成について。

Chapter 2: Emulation: Interpretation and Binary Translation

Chapter2のメモ

命令セットのエミュレーション全般。直観的なインタープリットから始まり、threaded, predecode, binary translationなどの方式や、命令セットのエミュレーションにおけるさまざまな問題について概観します。

Chapter 3: Process Virtual Machines

Chapter3のメモ

プロセスVMを構成するはなし。まずは全体の構成からはじまります。それから互換性・状態のマッピング・エミュレーションいろいろ(メモリアーキテクチャ・命令・例外・OS)・コードキャッシュの管理・そしてシステム環境への埋め込み。FX!32の実例をとりあげてから、まとめです。

Chapter 4: Dynamic Binary Optimization

ダイナミックバイナリ最適化の話。ここでは主に複数のbasic blockをまたがる最適化について。

まずは最適化の前提としてプロファイルで「どこがよく実行されているのか」を知る。そしてsuperblockをはじめとするブロック最適化。それをベースにした最適化フレームワーク。フレームワークの上でのテクニックとしてのコード再配置。そしてコードの最適化いろいろ(余分なブランチ削除、定数展開、コピー展開等々)。さらに、同一ISAでの最適化についての話題。

以下、じわじわ更新していきます。

Chapter 5: High-Level Language Virtual Machine Architecture

Chapter 6: High-Level Language Virtual Machine Implementation

Chapter 7: Codesigned Virtual Machines

Chapter 8: System Virtual Machines

Chapter 9: Multiprocessor Virtualization

Chapter 10: Emerging Applications

Appendix A: Real Machines

実マシンの復習。

Virtual Machines: Versatile Platforms For Systems And Processes (The Morgan Kaufmann Series in Computer Architecture and Design)Virtual Machines: Versatile Platforms For Systems And Processes

VirtualMachine本: Chapter 2 Emulation: Interpretation and Binary Translation

[ LowLevel ]

Virtual Machines: Versatile Platforms For Systems And Processes (The Morgan Kaufmann Series in Computer Architecture and Design)Virtual Machines: Versatile Platforms For Systems And Processes

やっとダイナミックなバイナリトランスレートの話がでてきましたよ。

(2009.2.9 Chapter毎に整理しました)

Source ISAとTarget ISAが異なるときの話。しかし、そうじゃない場合にもこのテクニックは使える。binary optimizationとか、特権命令実行時のemulation的動作とか。

続きを読む "VirtualMachine本: Chapter 2 Emulation: Interpretation and Binary Translation" »

2009年1月25日

VirtualMachine本: Chapter1 Virtual Machine Introduction

[ LowLevel ]

昨年末から読んでいるVM本ですが、遅々として進んでいます(日本語がおかしい)。Chapter1(Introduction to Virtual Machines)を読み、Chapter2に入る前にAppendix A(Real Machines)を読んでコンピュータアーキテクチャの復習をして、今Chapter2の途中。ここまで100ページくらい。1ヶ月で100ページだと読み終わるのに半年かかる...。これではいかんので、もうちょっとがんばります。

さて、遅々としているとはいえ、ほぼ知らない分野なので超面白いです。普段の高級言語で富豪的なことやってるのとは全く違う世界です。たのしい。ここまでのメモを、自分のために書いておきます。

(2009.2.9 Chapter毎にEntryを整理しました)

FORTH処理系はthreaded interpreterの考え方だというのが初耳でした。retargetable dynamic binary translatorというものについて言及されていますが、どうやってやるのか見当も付かない。

まずはコンピュータの作りについて。抽象レイヤがwell-defined interfaceを介して積み上がっている。同じレベルでも違うwell-defined interfaceがある。たとえばIA32とPowerPC。WindowsとLinux。多様性は善だが、interoperabilityの阻害にもなる。

仮想化は制限をゆるめ、柔軟性を高める。仮想化と抽象化の違い: 仮想化された場合でも、仮想化したレイヤより抽象度が低いとは限らない。

目的と同じ数だけのVMがある。

1.1 アーキテクチャの話

well-defined interfaceはいろんなレベルのがある。CPUが提供するISA(instruction set architecture)。user ISA/systme ISAに分けられる。

ABI = user ISA + systemcall。API = user ISA + ライブラリインタフェース。

1.2〜1.4 VMのいろいろ

1.3.1 マルチプログラミング: 実はProcess VMの一種と考えられる。各プロセスは、CPUやらメモリやらを占有しているつもり(だが実際には違う)

1.3.2 エミュレータ、バイナリトランスレータ: sourceとtargetのISAが違うときに使われる。FX!32(Windows Alpha上でWindows IA32のアプリを走らせるためのVM)とか。

1.3.4 高級言語VM: これはポータビリティが目的。古くはPCODE、最近はJavaVM, CLI

1.4 System VMs:1960年代くらいから作られてる。Virtual Machineという言葉の元祖。もともとはハードウェアの上に直接VMMを載せていた。hostedなのはもっと最近。

1.4.2 whole system VMs: ISAが違うとき。PowerPC上のIA32とか。

1.4.3 codesigned VMs: 他のVMと違って、パフォーマンス向上が目的の場合がある。native ISA用のアプリなどなく、VMを含めたものがあたかもISA。crusoeが好例。IBM AS/400も、object-oriented instruction setをサポートするのが主な目的だった(が、実際は?)

1.5分類

大きく分けてProcess VM/SystemVM。それぞれの下に、Same ISA/Different ISAがある。

Virtual Machine本ひとり勉強会

Virtual Machines: Versatile Platforms For Systems And Processes (The Morgan Kaufmann Series in Computer Architecture and Design)Virtual Machines: Versatile Platforms For Systems And Processes

2008年12月29日

LLひとり勉強会

[ LowLevel ]

LLといってもLightweight Languageではなく。

めったに更新されないブログなので見ているかたも少ないとおもいますが、数少ない読者のみなさまこんにちは。このブログをはじめてから、うすうすは知っていた自分の企画倒れっぷりをまざまざと見せ付けられたわけですが、懲りずにまたあたらしい宣言をします。

今わたしが読みかけている本を列挙。

Virtual Machines: Versatile Platforms For Systems And Processes (The Morgan Kaufmann Series in Computer Architecture and Design) Essential .NET ― 共通言語ランタイムの本質 インサイド Microsoft Windows 第4版〈上〉 (マイクロソフト公式解説書) ビジュアライジング・データ ―Processingによる情報視覚化手法

最後の「ビジュアライジング・データ」を除くと、比較的ローレベルについての本なんですよね。読み始めて、私はローレベルの話はそれなりに知っているつもりだったけれども、細部はぜんぜん知らなくて、それでは知っていることにならないんだなあ、ということがわかりつつあります。実践的な知識があるCPUってZ80だけだし、モダンなOSの中身なんてほとんど知らないし。

そもそもはVMの仕組みって細かいこと知らないな、と思って、"Virtual Machines"を読み始めたんですが、いっしょにローレベル本を読むと効果的ではないか。とおもって、読みさしで放置していた.NET本とかWindows本をひっぱりだしてきたのでした。

この勢いで、ローレベル向けの積読本をつづけてやっつけて、何かモノを作れるネタがあればやろうかと、今思っています。いままで「...しようと思っています」とこのブログで宣言したものは例外なく企画倒れになっていますが(情けないな)、さてこれはどうなるでしょう。

ちなみに、"Virtual Machines"は平易な英語でかかれた、たいへん読みやすい洋書です。

関連するかもしれない積読本

CPUの創りかた 30日でできる! OS自作入門 デバッガの理論と実装 (ASCII SOFTWARE SCIENCE Language) モダン オペレーティング システム 原書 第2版

他にもあった気がするので本棚をあさってみます。