7章 概要
Table of Contents
7.1. Wine Overview
7.2. Standard Windows Architectures
7.3. Wine architecture
内容
7.1. Wine概要
7.2. 標準Windowsアーキテクチャ
7.3. Wineアーキテクチャ
Brief overview of Wine's architecture...
Wineのアーキテクチャの簡単な概要...
7.1. Wine Overview
7.1. Wine概要
With the fundamental architecture of Wine stabilizing, and people starting to think that we might soon be ready to actually release this thing, it may be time to take a look at how Wine actually works and operates.
Wineの基本的なアーキテクチャが固まってきて、実際にこれをリリースする準備がすぐにできるかもしれないと、皆が考え始めたので、Wineが実際にどのように動作しているのか、ちょっと見ておく時期かもしれない。
7.1.1. Foreword
7.1.1. 序
Wine is often used as a recursive acronym, standing for "Wine Is Not an Emulator". Sometimes it is also known to be used for "Windows Emulator". In a way, both meanings are correct, only seen from different perspectives. The first meaning says that Wine is not a virtual machine, it does not emulate a CPU, and you are not supposed to install Windows nor any Windows device drivers on top of it; rather, Wine is an implementation of the Windows API, and can be used as a library to port Windows applications to Unix. The second meaning, obviously, is that to Windows binaries (.exe files), Wine does look like Windows, and emulates its behaviour and quirks rather closely.
Wineはよく"Wine Is Not an Emulator"を表す再帰的頭字語として使われる。時々、"Windows Emulator"(の意味)でも使われていることが知られている。ある意味、両方とも正しい。異なる視点から見ているだけである。最初の意味は、Wineは仮想マシンではなく、CPUをエミュレートせず、WindowsやWindowsのデバイスドライバをそれにインストールすると思われず、むしろWineはWindows APIの実装の一つであり、WindowsアプリケーションをUnixに移植するためのライブラリとして使うことができると思われるだろう。次の意味は、明らかに、これはWindowsバイナリ(.exeファイル)のためのものであり、そしてWindowsに似ていてその振る舞いや癖を忠実にエミュレートするということだ。
"Emulator": The "Emulator" perspective should not be thought of as if Wine is a typical inefficient emulation layer that means Wine can't be anything but slow - the faithfulness to the badly designed Windows API may of course impose a minor overhead in some cases, but this is both balanced out by the higher efficiency of the Unix platforms Wine runs on, and that other possible abstraction libraries (like Motif, GTK+, CORBA, etc) has a runtime overhead typically comparable to Wine's.
"エミュレータ": "エミュレータ"という視点から、まるでWineが遅い以外の何者でもない意味の、典型的な非効率的なエミュレーションレイヤという風に思われるべきではない。
まずいデザインのWindows APIに忠実であることは、いくつかの場合では確かにわずかなオーバーヘッドを強いるかもしれない。だが、これはWineが走る、より効率の高いUnixプラットフォームで相殺される。その上、他の有力な抽象化ライブラリ(Motif、GTK+、CORBA、など)は一般的にWineのそれに匹敵するランタイムオーバーヘッドを持っている。
7.1.2. Executables
7.1.2. 実行ファイル
Wine's main task is to run Windows executables under non Windows operating systems. It supports different types of executables:
Wineの主な役割は、Windowsの実行ファイルをWindowsではないオペレーティングシステム上で走らせる事だ。異なるタイプの実行ファイルをサポートしている。
DOS executable. Those are even older programs, using the DOS format (either .com or .exe (the later being also called MZ)).
DOS実行ファイル。DOS形式(.comや.exe(後者はMZとも呼ばれる))を使用する、実に古いプログラム達である。
Windows NE executable, also called 16 bit. They were the native processes run by Windows 2.x and 3.x. NE stands for New Executable
16ビットとも呼ばれる、Windows NE実行ファイル。Windows 2.xや3.xのネイティブプロセス達であった。NEはNew Executableを意味する。
Windows PE executable. These are programs were introduced in Windows 95 (and became the native formats for all later Windows version), even if 16 bit applications were still supported. PE stands for Portable Executable, in a sense where the format of the executable (as a file) is independent of the CPU (even if the content of the file - the code - is CPU dependent).
Windows PE実行ファイル。16ビットアプリケーションがまだサポートされていたにせよ、Windows 95で導入されたプログラム達である。(そしてその後の全てのWindowsバージョンでネイティブフォーマットとなった。) PEはPortable Executableを意味し、その実行ファイルの形式は(ファイルとしては)ある程度CPUに非依存である(たとえ、ファイルの中身 - コード - はCPU依存であったとしても)。
Winelib executable. These are applications, written using the Windows API, but compiled as a Unix executable. Wine provides the tools to create such executables.
Winelib実行ファイル。Windows APIを使用して書かれたアプリケーション達なのだが、Unix実行ファイルとしてコンパイルされている。Wineはこのような実行ファイルを生成するためのツールを提供している。
Let's quickly review the main differences for the supported executables:
サポートされている実行ファイルの違いについてちょっとレビューしよう:
Table 7-1. Wine executables
表 7-1. Wine実行ファイル
DOS (.COM or .EXE) Win16 (NE) Win32 (PE) Winelib
Multitasking Only one application at a time (except for TSR) Cooperative Preemptive Preemptive
Address space One MB of memory, where each application is loaded and unloaded. All 16 bit applications share a single address space, protected mode. Each application has it's own address space. Requires MMU support from CPU. Each application has it's own address space. Requires MMU support from CPU.
Windows API No Windows API but the DOS API (like Int 21h traps). Will call the 16 bit Windows API. Will call the 32 bit Windows API. Will call the 32 bit Windows API, and possibly also the Unix APIs.
Code (CPU level) Only available on x86 in real mode. Code and data are in segmented forms, with 16 bit offsets. Processor is in real mode. Only available on IA-32 architectures, code and data are in segmented forms, with 16 bit offsets (hence the 16 bit name). Processor is in protected mode. Available (with NT) on several CPUs, including IA-32. On this CPU, uses a flat memory model with 32 bit offsets (hence the 32 bit name). Flat model, with 32 bit addresses.
Multi-threading Not available. Not available. Available. Available, but must use the Win32 APIs for threading and synchronization, not the Unix ones.
マルチタスク
DOS (.COM or .EXE) 同時に一つのアプリケーションのみ(TSRを除く)
Win16 (NE) 協調(型)
Win32 (PE) プリエンプティブ(割り込み型)
Winelib プリエンプティブ(割り込み型)
アドレス空間
DOS (.COM or .EXE) それぞれのアプリケーションがロード/アンロードされる場合に、1MBのメモリ
Win16 (NE) 全ての16ビットアプリケーションは単一のメモリをプロテクトモードで共有
Win32 (PE) それぞれのアプリケーションはそれぞれ自分のメモリ空間を持つ。CPUのMMUサポートが必要
Winelib それぞれのアプリケーションはそれぞれ自分のメモリ空間を持つ。CPUのMMUサポートが必要
Windows API
DOS (.COM or .EXE) Windows APIではなくDOS API (Int 21hトラップのような)
Win16 (NE) 16ビット Windows APIを呼び出し
Win32 (PE) 32ビット Windows APIを呼び出し
Winelib 32ビット Windows APIを呼び出し、場合によってはUnix APIも
コード(CPUレベル)
DOS (.COM or .EXE) x86リアルモードのみ利用可能。コードとデータは16ビットのオフセット付きセグメント形式。プロセッサはリアルモード。
Win16 (NE) IA-32アーキテクチャのみ利用可能。コードとデータは16ビットのオフセット付きセグメント形式(なので16ビットという名前)。プロセッサはプロテクトモード。
Win32 (PE) IA-32を含む様々なCPU(NTにおいて)。このCPUでは32ビットのオフセット付きのフラットなメモリモデル(なので32ビットという名前)。
Winelib 32ビットアドレスのフラットなモデル。
マルチスレッド
DOS (.COM or .EXE) 利用できない
Win16 (NE) 利用できない
Win32 (PE) 利用できる
Winelib 利用できるが、UnixのではなくWin32 APIをスレッディングと同期に使用しなければならない
Wine deals with this issue by launching a separate Wine process (which is in fact a Unix process) for each Win32 process, but not for Win16 tasks. Win16 tasks are run as different intersynchronized Unix-threads in the same dedicated Wine process; this Wine process is commonly known as a WOW process (Windows on Windows), referring to a similar mechanism used by Windows NT.
Wineはこの事柄を独立したWineプロセス(実際にはUnixプロセス)をそれぞれのWin32プロセス毎にラウンチすることで対応する。しかしWin16タスクはそうではない。Win16タスク達は、専用の同じWineプロセス内の、相互に同期された違うUnixスレッドとして走る。このWineプロセスは、Windows NTで使われる似たメカニズムから、一般にWOWプロセス(Windows on Windows)として知られている。
Synchronization between the Win16 tasks running in the WOW process is normally done through the Win16 mutex - whenever one of them is running, it holds the Win16 mutex, keeping the others from running. When the task wishes to let the other tasks run, the thread releases the Win16 mutex, and one of the waiting threads will then acquire it and let its task run.
WOWプロセス内で走るWin16タスク間の同期は、通常Win16ミューテックスを通してなされる。それらの一つが動いているときはいつでも、Win16ミューテックスを保持することで、他が走るのを避ける。そのタスクが他のタスクを走らせようと望んだときは、そのスレッドはWin16ミューテックスを解放し、待っているスレッドの一つがそれ(ミューテックス)を間もなく獲得し、そのタスクが走らされる。
winevdm is the Wine process dedicated to running the Win16 processes. Note that several instances of this process could exist, has Windows has support for different VDM (Virtual Dos Machines) in order to have Win16 processes running in different address spaces. Wine also uses the same architecture to run DOS programs (in this case, the DOS emulation is provided by a Wine only DLL called winedos.
winevdmはWin16プロセスを走らすため専用のWineプロセスである。このプロセスのたくさんのインスタンスが存在し得ることに注意しよう。異なるアドレス空間で走る複数のWin16プロセスを持つための、別々のVDM(Virtual Dos Machines)のサポートを持つ複数のWindowsを持つことがある。WineはDOSプログラムを走らせるのにもこれと同じアーキテクチャを使っている。(この場合、WineによるDOSエミュレーションは、winedosと呼ばれるWineにしかないDLLで提供される。)
0 件のコメント:
コメントを投稿