VirtualMachine本: Chapter1 Virtual Machine Introduction
昨年末から読んでいる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 Machines: Versatile Platforms For Systems And Processes