はじめに
z/OSエンジニアであれば、システムの起動メッセージを目にしたりしたことがあると思います。この記事では、z/OSのIPL(Initial Program Load)について、その内部で何が起きているのか、そしてシステムの挙動を司るPARMLIBがどのように関わってくるのかを体系的に解説します。
私たちが日常的に使うPCの電源ONからOSが起動するまでの一連の処理。z/OSにおけるIPLは、このプロセスに相当します。コンソールからのLOADコマンドが電源スイッチとなり、ハードウェアの初期化、OSのロード、そして各種設定ファイルの読み込みを経て、巨大なシステムが静かに起動していきます。
この起動の流れを理解することは、システム全体の動きを深く把握し、安定運用や障害対応の精度を高めるための重要な一歩となると思います。
第1章 IPLの全体像:4つのフェーズで理解する起動の流れ
z/OSのIPLは、多くのモジュールが連携し複雑な処理です。全体像を掴むために、一連の流れを大きく4つのフェーズに分けて捉えると考えやすくなります。
IPLは、以下の4つのステップに分けられます。
- ハードウェアによる起動の開始
- NIPによるOS基盤の構築
- PARMLIBによるシステムのカスタマイズ
- 主要サブシステムの起動とサービス開始
ここでは詳細に入る前の準備として、各フェーズがどのような役割を持つのか、その概要を先に確認しておきましょう。
フェーズ1:ハードウェアによる起動の開始
オペレーターがHMCからLOAD操作を行うことで、IPLプロセスが開始されます。ハードウェアは指定されたIPLボリュームを読み込み、OSを起動するための最初のプログラム(ブートストラップ)を実行します。ここから、システムの制御はハードウェアからソフトウェアへと渡されます。
フェーズ2:NIPによるOS基盤の構築
次に、NIP(核初期設定プログラム)がOSの基盤を構築します。NIPは、OSが動作するための最も基本的な環境を作り上げる役割を担います。メモリ空間の初期化や、システムが管理するI/Oデバイスの構成情報を読み込むなど、この後の処理に必要な土台を準備します。
フェーズ3:PARMLIBによるシステムのカスタマイズ
このフェーズでは、ユーザー(システム管理者)があらかじめカスタマイズしておいた定義がシステムに読み込まれ、反映されます。その定義が格納されているのがSYS1.PARMLIBです。この中にある多数の設定メンバーに基づき、システムのタイムゾーン、各種メモリサイズ、導入されている製品の動作パラメータまで、システムの挙動が決定されます。
フェーズ4:主要サブシステムの起動とサービス開始
最後に、システムの中心的な機能であるマスター・スケジューラーが起動します。そして、その指示のもとでJES(Job Entry Subsystem)を始めとする主要なサブシステムが、開始タスク(STC)として起動されます。JESが利用可能になることで、初めてバッチジョブの実行やTSOユーザーのログオンが可能となります。
第2章 【詳細解説】IPL内部の具体的なステップ
第1章で確認した4つのフェーズについて、ここからは内部でどのようなプログラムが動き、どのデータセットが読み込まれているのか、具体的に解説していきます。
2-1. フェーズ1:ハードウェアによる起動の開始
IPLの最初のトリガーは、システムコンソール(HMC)から投入されるLOADコマンドです。
L IPLVOL,LP(xx),CL
-
IPLVOL: IPLに使用するSYSRESボリュームの装置アドレスを指定します。 -
LP(xx): この後のフェーズで読み込むSYS1.PARMLIBのメンバーLOADxxのサフィックスxxを指定します。このLOADPARMは、IPLの挙動を決定づける重要な入力情報となります。 -
CL(Clear Storage): 実記憶をクリアしてからIPLを開始するオプションです。
このコマンドを受け取ると、プロセッサーは指定されたIPLボリュームのシリンダー0、トラック0に記録されている「ブートストラップ」と呼ばれる小さなプログラムを実記憶の固定領域(アドレス0番地)にロードして実行します。ブートストラップの役目は、OSのIPLを制御する中核プログラムであるIEAIPL00(IPLテキストとも呼ばれます)を同じく実記憶にロードし、システムの制御を完全にソフトウェアに引き渡すことです。
2-2. フェーズ2:NIPによるOS基盤の構築
IEAIPL00から処理を引き継いだNIP(Nucleus Initialization Program)は、z/OSが稼働するための基盤(Nucleus)を構築します。このフェーズは、ユーザーからは見えにくい部分ですが、OSの安定稼働に不可欠な多数の初期化処理が集中的に実行されます。
-
基本モジュールのロードとIRIMの実行:
NIPはまずSYS1.NUCLEUSデータセットから、IPLリソース初期化モジュール群(IRIM)をロードします。これらのIRIMが連携して動作し、OSの基本的な制御ブロックやテーブルを作成していきます。 -
I/O構成のロード:
LOADxxメンバーに記述されたIODF(I/O Definition File)データセット名を特定し、その情報を読み込みます。これにより、システムは自身に接続されているI/Oデバイス(ディスク、テープ、通信装置など)の物理的・論理的な構成を正確に認識します。 -
システム共通領域の確保と初期化:
SQA(System Queue Area)やPLPA(Pageable Link Pack Area)といった、システム全体で共有される非常に重要なメモリ領域を確保・初期化します。SQAはシステム関連の制御ブロック、PLPAは共通的に利用されるプログラムが格納される領域で、これらのサイズはシステムのパフォーマンスにも影響を与えます。
この段階は、アプリケーションが動作する前の、OS自身の環境セットアップが主目的であり、この後のカスタマイズフェーズに向けた土台がここで完成します。
2-3. フェーズ3:PARMLIBによるシステムのカスタマイズ
OSの基盤が整うと、NIPはSYS1.PARMLIBを読み込み、ユーザー(システム管理者)が定義した設定をシステムに反映させていきます。
まず、LOADPARMで指定されたLOADxxメンバーが読み込まれます。このメンバーはIPLプロセス全体の司令塔とも言える役割を持ち、以下のようなIPLの方向性を決定づける重要な情報をNIPに伝えます。
- 読み込むべきシステムパラメータメンバー (
IEASYSxx) の指定 - マスターカタログの所在 (
SYSCAT) - 複数のPARMLIBデータセットを連結する定義 (
PARMLIBステートメント)
次に、LOADxxの指示に基づき、IEASYSxxメンバーが読み込まれます(オペレーターがSYSP=で上書き指定することも可能です)。IEASYS00が最初に処理され、その後IEASYSxxで指定されたメンバーが順次読み込まれます。これらのメンバーには、システムの挙動を定義する多数のパラメータが記述されており、ここからさらに以下のような機能ごとの詳細な設定メンバーが連鎖的に読み込まれていきます。
-
CLOCKxx(時刻関連) -
COMMNDxx(IPL完了後に自動実行するコマンド) -
IEFSSNxx(サブシステムの定義) -
PROGxx(APF許可ライブラリやLNKLSTの定義) -
SMFPRMxx(SMFの動作定義)
この一連の処理を経て、ユーザーの要件に合わせてカスタマイズされます。
2-4. フェーズ4:主要サブシステムの起動とサービス開始
PARMLIBの処理が完了し、システムの構成が確定すると、いよいよシステムの主要機能が動き始めます。
NIPは、システムの中核となるマスター・スケジューラーのアドレス空間を生成し、その制御を渡します。マスター・スケジューラーは自身のJCL(MSTJCLxxメンバーで定義)を使って初期化を行い、システム全体のタスク管理を開始します。
そして、IEFSSNxxメンバーの定義に従い、JES2やJES3といったJob Entry Subsystem(JES)を始めとする主要なサブシステムを、開始タスク(STC)として順次起動していきます。
特にJESの起動は、IPLにおける大きなマイルストーンです。JESが起動することで、ジョブの投入、スプーリング、実行管理、出力管理といった機能が利用可能になります。JESが自身の初期化を完了し、起動完了メッセージ(例: JES2なら$HASP426 - JES2 IS EXECUTING)をシステムログに出力した時点をもって、バッチジョブの受付やTSOユーザーのログオンが可能となります。
これにより、一連の長くIPLプロセスは完了し、システムはユーザーからの要求を受け付ける通常の状態へ移行します。
おわりに
本記事では、z/OSのIPLについて、一連のプロセスを解説しました。
HMCでのLOAD操作を起点とするハードウェアの起動から、NIPによるOS基盤の構築、そしてPARMLIBによるシステムのカスタマイズを経て、JESなどの主要サブシステムが起動するまで。この4つのフェーズを理解することで、「システムの起動」の一連の流れが見えてきたのではないでしょうか。
このIPLの知識は、日々の業務において以下のような場面で役立ちます。
-
障害対応時: IPLが途中で停止してしまった場合、コンソールの最終メッセージとIPLのフェーズを照らし合わせることで、問題が
PARMLIBの構文エラーなのか、特定のサービスの初期化で失敗しているのか、といった原因切り分けの精度が向上します。 -
構成変更時: システムパラメータを変更する際、
LOADxxからIEASYSxxの順に読み込まれるという読み込み順序を意識することで、「設定が正しく反映されない」といったトラブルを防ぎ、変更の影響範囲を予測できるようになります。
もしご自身の環境にアクセスできるのであれば、ぜひ一度SYS1.PARMLIBデータセットを参照し、LOADxxやIEASYSxxにどのようなメンバーが指定されているかを確認してみてください。この記事で解説した内容と実際の定義を見比べることで、知識はより確かなものになると思います。