PGSER(仮想ページサービス)
MVS,MSP,VOS3:OSの互換性:API,インターネルの違い – 仮想ページサービス
GETMAINによって獲得済みの仮想記憶域のページに対してさまざまな機能を提供するのが仮想ページサービスである。代表的なものにページ固定がある。これは仮想記憶域のページを実記憶に固定してページアウトされないようにするものである。一般のアプリケーションではページを固定する必要などないが、チャネル・プログラムによって直接デバイスにI/Oを発行するプログラムなどでは、I/O中にデータ領域がページアウトされないよう対象ページを固定した上で使用するI/O用APIを使うものもある。この場合、関連領域のページ固定はOSではなくAPIを呼び出すプログラム側の責任となる。
仮想ページサービスAPI
仮想ページサービスのAPIには、ページの固定と解除、ページインとページアウト、ページ割当ての解除などがある。MVS/SPの時代までは、APIも機能別のマクロ命令に分かれていて16MB未満の仮想記憶域にのみ使用可能となっている。16MBを超える仮想記憶域についてはPGSERというマクロに統合され、16MB上下いずれの領域にも対応できるようになった。
16MB未満の領域に対するマクロ命令については基本的にMVS、MSPおよびVOS3間で互換がある。16MBを超える領域をサポートするマクロ命令PGSERは、パラメーターとSVCインターフェースにおいてMVSとVOS3でほぼ互換であるが、VOS3ではECBを指定した非同期指定のページ固定やページインはサポートされていない。なお、MSPにおいてはGETMAIN同様にAE=YESオプションによって16MBを超える領域のページサービスが提供され、MVSとVOS3と同じPGSERマクロは提供されていない。
機能 | MVS(z/OS) | MSP | VOS3 | |||
16MB未満の領域 | 16MB超の領域 | 16MB未満の領域 | 16MB超の領域 | 16MB未満の領域 | 16MB超の領域 | |
ページを実記憶に固定する | PGFIX | PGSER FIX 16MB未満の領域にも使用可 | PGFIX | PGFIX AE=YES 16MB未満の領域にも使用可 | PGFIX | PGSER FIX 16MB未満の領域にも使用可 |
ページを実記憶から解放する | PGFREE | PGSER FREE 16MB未満の領域にも使用可 | PGFREE | PGFREE AE=YES 16MB未満の領域にも使用可 | PGFREE | PGSER FREE 16MB未満の領域にも使用可 |
ページインの要求 | PGLOAD | PGSER LOAD 16MB未満の領域にも使用可 | PGLOAD | PGLOAD AE=YES 16MB未満の領域にも使用可 | PGLOAD | PGSER LOAD 16MB未満の領域にも使用可 |
ページアウトの要求 | PGOUT | PGSER OUT 16MB未満の領域にも使用可 | PGOUT | PGOUT AE=YES 16MB未満の領域にも使用可 | PGOUT | PGSER OUT 16MB未満の領域にも使用可 |
ページ割当ての解除 (実記憶と補助記憶の解放) | PGRLSE | PGSER RELEASE 16MB未満の領域にも使用可 | PGRLSE | PGRLSE AE=YES 16MB未満の領域にも使用可 | PGRLSE | PGSER RELEASE 16MB未満の領域にも使用可 |
VOS3にはマニュアルには解説されていない#PGSERマクロもある。機能的にはPGSERと同じであるが領域アドレスの指定方法に一部違いがある。古くからVOS3をサポートしているベンダー製ソフトウェア対応には#PGSERマクロを使用したものもある。
記憶保護キーの変更
オンライン・システム制御用のプログラム製品の中には、自空間内の仮想記憶域の記憶保護キーを変更して管理する機能を持つものがある。(CICSのストレージ保護やトランザクション・アイソレーション、SAG社COM-PLETEのスレッド・プロテクションなど)これは主に、アプリケーションが使用するプログラムの領域を他の端末処理のプログラムによって破壊されないようにする仕組みを構築するためである。MVS系OSでは、特別なキーである0を除けば、同じ記憶保護キーでないと書き込みができないことを利用したものである。
MVS系OSでは、通常プログラムは記憶保護キー8が割り当てられる。プログラムがGETMAINなどで獲得した領域を、いくつかの区画にわけてそれぞれの領域の記憶保護キーに9やAなど8とは異なるキーを割り当てれば、アプリケーション同士、さらにアプリケーションとオンラインの制御プログラム間で破壊を防止することが可能となる。
また、メインフレームのメモリー保護機能にはキーの一致/不一致による書き込み保護の他に、取り出し保護というものもある。取り出し保護(Fetch Protection)は、記憶保護キーと同じPSWキーもしくは0のキーを持つプログラムでなければメモリーからの読み込みすら許可しないものである。アプリケーション・プログラムを異なる記憶保護キーで管理する場合、書き込みは認めないが読み込みだけは許すのであれば取り出し保護の対象からはずす必要が出てくる。
仮想記憶域の記憶保護キーの変更や取り出し保護の対象からはずすことはCHANGKEYマクロによって行うことができる。CHANGKEYマクロそのものはMVSとMSPで互換があるが、MSPでは領域の終了アドレスが、領域の最終ページの先頭アドレスではなく最終ページの次のページの先頭アドレスになること、CHANGKEYマクロ発行前にローカルロックを保持する必要がある、の2点が大きく違う点となる。なお、VOS3ではCHANGKEYではなくCPROTECTマクロが同等機能のAPIとなる。ただし、マニュアルでは解説されない非公開機能となっているため必要に応じてAPIの開示を個別にメーカーに問い合わせる必要がある。
またMVSのみ、PGSERマクロによって獲得済みの仮想記憶域のページにページ・プロテクトを掛けることができ、これによって記憶保護キーが一致しても書き込みできない読み取り専用領域を作ることができる(PSWキー0でも書き込み不可となる)。