Z/VM

z/VM（ゼットブイエム）は、IBMが開発・販売している、メインフレーム用のオペレーティングシステム (OS) の1つ。商用では世界初の仮想化OS（ハイパーバイザ）であるCP-67やVM/370から続く、VMファミリーの最新OSでもある。

 名称 
現在の製品名は「z/VM」で、「z」はz/Architecture、「VM」は仮想マシン (Virtual Machine) を表す。歴代のVMファミリーを通して単に「VM」と表記する場合が多く、一般用語のVM（仮想マシン）との混同に注意が必要である。

 概要 
最新のz/VMを含めたVMファミリーは、仮想マシンを実現するハイパーバイザ型の仮想化用OSであり、対話型の専用のゲストOSが付属する。

主に以下の2機能から構成される。合わせて「CP/CMS」や「VM/CMS」と呼ばれる事も多い。

 CP 
 ソフトウェアにより実現されたハイパーバイザであり、タイムシェアリングにより複数の仮想マシンを実現し、それぞれの仮想マシンでゲストOS（z/OS、z/VSE、Linux on System z (z/Linux)、CMSなど）を同時に動かすことができる。
 CMS 
 専用のゲストOSであり、軽量で対話型のOSである。強力なエディタであるXEDITや、スクリプト言語のREXXを持つ。CPの管理の他、ミニコンピュータやUNIXが普及するまでは、研究所や学校などでも使用された。

 歴史 
1967年 System/360モデル40用にCP-40とCMS（当時はCambridge Monitor System）が研究用に開発された (CP-40/CMS)。更にSystem/360モデル67用にCP-67が開発され発売された (CP-67/CMS)。

1972年 仮想記憶をサポートしたSystem/370シリーズ用にCP-370が開発され (CP-370/CMS)、更にVM/370と改称され発売された。この際にCMSはConversational Monitor Systemと改称された。

その後、31ビットアドレッシングのSystem/370-XAアーキテクチャに対応したVM/XA、更にVM/ESAが発売された。それぞれゲストOSに、MVS/XAやMVS/ESAなどが使用可能になった。ただしCMS自体は24ビットアドレッシングのままである。平行してTCP/IPなどオープン標準も段階的にサポートされた。

2001年 64ビットアドレッシングのz/Architectureに対応したz/VMが発表され、ゲストOSにz/OSやz/VSEなどが使用可能になった。

2009年10月 z/VM V6.1 発表。2011年10月 z/VM V6.2発表。2013年7月 z/VM V6.3発表、実メモリ 1TBサポート、OpenStack採用など。

2013年7月 z/VM v6.3 発表。実メモリー 1TBのサポート、OpenStack強化など。

2016年10月 z/VM V6.4 発表。実メモリー 2TBのサポートなど。

2020年4月 z/VM V7.2 発表

2022年9月 z/VM V7.3 発表

 開発経緯 
ハイパーバイザは、メインフレームでまず最初に実装された。最初に完全仮想化の機能を提供したのはIBMのCP-40で、これは1967年の1月から製造が開始されたワンオフの研究システムである。これがIBMのCP/CMSのOSの最初のバージョンになる。CP-40は、仮想化の機能をサポートするようにカスタマイズされたそれ専用のSystem/360モデル40の上で動作していた。この時より前に、コンピュータハードウェアは複数のユーザアプリケーションを実行ができるのには十分な仮想化がなされている（CTSSおよびIBM_M44を参照）。CP-40を使って、ハードウェアの特権状態はうまく仮想化されていたので、複数のオペレーティングシステムが同時に実行できた。

CP-40はSystem/360モデル67用にすぐにCP-67として再実装された。最初に製造されたコンピュータシステムは完全仮想化の機能を持っていた。このマシンは1966年に最初に輸出された。仮想メモリ用にページ変換テーブルハードウェアを持っていたり、I/Oや割り込みハンドラを含んだすべてのカーネル処理を完全仮想化するための技術が組み込まれていた。（なおTSS/360は完全仮想化の技術を組み込んでおらず、後のタイムシェアリングオプション (TSO) となった）。CP-40とCP-67は1967年から使われ始めた。CP/CMSは、1968年から1972年にかけて、IBMの顧客に対して提供されたサポートなしのソースコードの中に入っていた。

CP/CMSはIBMのメインフレーム用に頑健なタイムシェアリングシステムを作り上げるためのIBMの試みの一つであった。複数のオペレーティングシステムを同時に走らせることによって、ハイパーバイザはシステムの頑強さと安定性を増すことができる。たとえ、一つのオペレーティングシステムがクラッシュしたとしても、他のOSが割り込まれることなく動作し続けるだろう。この機能を使えばβ版ないしは実験版のOS、さらには新しいハードウェアでさえも開発したりデバッグしたりすることが可能になる。安定しているメインの製品システムを危険にさらしたり、コストを増やす追加の開発システムを必要とすることもない。

IBMのSystem/370シリーズは1970年に仮想化機能（仮想記憶）なしに発表された。しかし、これらの機能は1972年には追加され、その後の後継のシステム全てにおいてこの機能は見られる。（zSeriesのようなすべての現代的なIBMのメインフレームは1960年代のIBM System/360シリーズと後方互換性を持っている）。1972年の発表には、System/370用のCP/CMSの再実装であるVM/370もまた含んでいた。CP/CMSとは違って、まだいくつかのリリースにわたってソースコードの形で配布はしているが、IBMはこのバージョンからサポートを行うようになった。VMは単に仮想マシンというだけに留まらず、ハードウェアインタフェースを仮想化したものという側面が強調されるようになった。IBM内と同様、大学や企業ユーザ、タイムシェアリングシステムの開発ベンダーによって、VMとCP/CMSは共に早くから受け入れられ開発期間の短縮に貢献してきた。ユーザは開発を進める上でアクティブな役割を演じていて、現在のオープンソースプロジェクトに見られるトレンドを予見させるものだった。しかし、IBM社内ではバッチ処理システムをベースとしたMVS系が主流となったため、VM/CMSは補助的なOSとされる時代が続いた。

しかし、VM/CMSはVM/XA、VM/ESAを経てz/VMとなり、今でも数十年に渡ってIBMの他のメインフレームのOSの中に残っている。現在はゲストOSとして、z/OS、z/VSEなどの他、Linuxを多数稼働させる用途（サーバ統合）でも使われている。

なお、上に述べたように、VM制御プログラムは、仮想マシン内にDIAG（診断）命令を横取りするhypervisor callハンドラを内部に含んでいる。これにより、ファイルシステムへのアクセスなど仮想化されていない処理の実行を高速化する手段を提供できる。診断命令は対象モデルに依存した特権命令であり、通常のプログラミングでは使われないし、仮想化もされない。したがって、ホストOSにシグナルを送るのに使うことができる。CP/CMSリリース3.1で最初に実装された時、この診断コードを使うことでSystem/360のSVC (supervisor call) 命令に似たOSインタフェースを提供していたが、その方法はSVCを使ったシステムの仮想化機能に手を入れたり拡張する必要はなかった。

 特徴 
IBMのメインフレームである、System z等で稼働する。x86でのVMware ESXに相当すると考える事ができる。

IBMメインフレームの仮想化である、物理分割 (PPAR)、論理分割 (LPAR) と組み合わせる事もできる。

z/VMは、PPARやLPARと比較して、より柔軟な構成変更ができるため、特に開発環境などで広く使用されている。ただし本番環境ではz/VM自体が単一障害点となりうる事に注意する必要がある。また現在は、サーバ統合として、多数のLinuxを1～2台のメインフレームに安定して同時稼働させる用途でも使われている。

z/VMは、同じIBMメインフレーム専用OSでも、z/OSやz/VSEとは全く別物である。しかし、上述のように、これらをゲストOSとして稼働させる事ができる。

z/OSやz/VSEとの共通点には以下が挙げられる。
 z/Architectureで稼働する
 ネイティブの文字コードはEBCDIC
 SNAのサポート
 S/390アセンブラー、COBOL、C、PL/Iの言語サポート

z/OSやz/VSEとの相違点には以下が挙げられる。
 単体ではなく、z/OSやz/VSEの仮想化OSとして使われる場合が多い
 単体（z/VMおよびCMS）でも使用できるが、オンライン対話型志向が強く、トランザクション処理・データベース・バッチなどには向かない

 備考 
 CMSから生まれたIBMのスクリプト言語であるREXXは、z/OS、OS/2、PC DOSなどに移植された。