1. はじめに:z/OSを裏で支える、STCとは何か
z/OSのSDSF画面でD A,Lコマンドを打鍵してアクティブなタスクを見ると、JES2, SDSF, TCPIP, DB2MSTR, CICSといった名前が並んでいます。
これらは、z/OSを支える STC(Started Task) です。STCとは「システムが動き続ける限り、バックグラウンドで特定の仕事をし続ける、専門のプログラム」のことで、Windowsにおける「サービス」やLinuxの「デーモン」に相当します。
この記事では、STCの役割から、STARTコマンドで起動する内部の仕組み、そして必要な定義までを体系的に解説します。
2. STCの役割と、システム内での位置づけ
STCの役割を理解するため、その特徴と、システム全体における立ち位置を見ていきましょう。
STCが持つ3つの重要な特徴
-
常駐性
一度起動されると、オペレーターが明示的に停止するまで動き続けます。常にリクエストを待ち受けるデータベースなどのサービスに不可欠な性質です。 -
サービス提供
DB2のデータアクセスやTCP/IPのネットワーク通信のように、他のプログラムやシステム全体に対して継続的な機能(サービス)を提供することが主な目的です。 -
独立したアドレス空間
各STCは専用のメモリ領域で動作します。これにより、あるSTCに問題が起きても他へ影響が広がりにくく、z/OSの高い信頼性を支える重要な要素となっています。
z/OSタスクの比較とSTCの位置づけ
STCの役割は、z/OSの他のタスク実行形態と比較するとより明確になります。
【図の解説】
この図が示すように、z/OSのタスクは目的別に使い分けられます。TSOユーザーが対話的な作業、バッチジョブが非対話的な大量処理を担うのに対し、STCはそれら全ての活動の基盤となるサービスを提供します。
TSOやバッチジョブは、実はDB2のようなSTCを「利用する側」にいます。つまりSTCは、特定のユーザーや処理に依存せず、システムそのものの一部として機能する存在です。
3. S メンバー名 コマンドの裏側で起きていること
コンソールから実行する S DSN1MSTR といったSTCを起動するためのコマンドですが、一行のコマンドの裏側では、z/OSの複数の主要コンポーネントが一連の流れに沿って連携しています。
その起動プロセスを、ステップバイステップで見ていきましょう。
【図の解説】
上の図は、オペレーターがコマンドを実行してから、実際にSTCが起動するまでの一連の流れを視覚化したものです。各コンポーネントがどのように連携しているか、番号順に見ていきましょう。
登場する主なコンポーネント
- JES2/3: システム全体のジョブやSTCを管理する司令塔です。
- PROCLIB: STC起動時に実行されるJCLが保管されている場所です。
- RACF: システムのセキュリティを守る「門番」の役割を担います。
- イニシエーター: 新しいタスクを実行するための「アドレス空間」を準備します。
処理の流れ
-
起動命令: オペレーターがコンソールから
S DSN1MSTRを実行します。この命令は、システムの中核であるJESに渡されます。 -
JCLの準備: JESは、プロシージャー・ライブラリー(PROCLIB)の中から
DSN1MSTRという名前のJCLメンバーを探し、実行すべき内容を確認します。 - 権限の確認とユーザーIDの特定: JESは、セキュリティ製品であるRACFに「このSTCを起動する権限を持つのはどのユーザーか?」を問い合わせます。RACFは定義を元に、STCに割り当てるべきユーザーID(例:DB2USER)をJESに伝えます。
- アドレス空間の準備: JESはイニシエーターに対し、特定のユーザーIDの権限で新しいタスクを開始するよう指示します。
- アドレス空間の生成: イニシエーターは、STCが他のプログラムから独立して動作するための専用メモリ空間(アドレス空間)を生成します。
-
プログラムの実行: 確保されたアドレス空間内で、JCLに記述されたプログラム(
PGM=DSN1MSTR)が、割り当てられたユーザーIDの権限で実行を開始します。 - サービス開始: これでSTCは正常に起動し、サービスとしての活動を開始します。
まとめ
このように、STARTコマンドを実行すると、JESを中心とした各コンポーネントが連携して動きます。STCは単にプログラムが動くだけでなく、権限が管理された専用のメモリ空間の下で起動されます。
4. STCを動かすために必要な「3つの定義」
STCは、STARTコマンド1つだけで起動するわけではありません。STCを正しく、そして安全に動作させるためには、最低でも以下の3つの要素が定義されている必要があります。それは「設計図」「実体」「許可証」の3要素です。
①設計図:PROCLIBメンバー(JCLプロシージャー)
STCを起動する際の「手順書」や「設計図」にあたるのが、PROCLIBに格納されたJCLプロシージャーです。オペレーターが S MYSTC とコマンドを実行すると、JESはこのPROCLIBからMYSTCという名前のメンバーを探し出し、その内容に従ってタスクを起動します。
このJCLには、STCの振る舞いを決定づける重要な情報が記述されています。
-
EXEC PGM=...: どのプログラムを起動するか(STCの「実体」を指定)。 -
STEPLIB DD ...: そのプログラムが標準ライブラリにない場合、どこに格納されているかを指定。 - 各種
DDステートメント : STCが使用する設定ファイル、ログ出力先、作業用データセットなどを定義。
例えば、ある架空のWebサーバーSTCのJCLは以下のようになります。
//MYWEBSRV PROC
//*
//STEP1 EXEC PGM=MYWEBAP,REGION=0M,TIME=NOLIMIT
//*
//STEPLIB DD DSN=MYAPP.V1R0.LOADLIB,DISP=SHR
//SYSPRINT DD SYSOUT=*
//SYSDUMP DD SYSOUT=*
//CONFIG DD DSN=MYAPP.V1R0.CONF(PROD),DISP=SHR
//LOGDATA DD DSN=MYAPP.V1R0.LOGS,DISP=OLD
このJCLは、「MYAPP.V1R0.LOADLIBにあるMYWEBAPというプログラムを、MYAPP.V1R0.CONF(PROD)を設定ファイルとして起動せよ」という、設計図です。
②実体:実行プログラム(ロードモジュール)
JCLが設計図なら、PGM=で指定されたプログラムは、STCの「実体」です。これは、COBOLやC言語などで書かれたソースコードがコンパイル、リンクエディットという工程を経て作成された、z/OSが直接実行できる形式のファイル(ロードモジュール)です。
これらのプログラムは、SYS1.LINKLIBのようなシステム共通のライブラリか、あるいは前述のSTEPLIB DDステートメントで指定された専用のライブラリに格納されています。
多くのSTCは、データベースやシステム設定など、重要なリソースにアクセスする必要があります。そのため、実行プログラムにはAPF(Authorized Program Facility)許可という特別な権限が付与されることがよくあります。これにより、プログラムは通常よりも高い権限で動作し、OSの深層部の機能を呼び出すことが可能になります。
③許可証:セキュリティ定義(RACF)
STCを動かす上で、最も重要なのが「誰として動くのか」という権限の定義です。STCは独立したタスクとして、特定のユーザーIDに紐付いて動作します。この「許可証」を発行するのが、RACFなどのセキュリティ製品です。
重要な理由は、STCに必要以上の権限を与えないためです。例えば、WebサーバーのSTCには、Webコンテンツのデータセットを読む権限だけを与え、人事データベースへのアクセス権は与えない、といった厳格な管理が可能になります。
この定義には、一般的にRACFのSTARTEDクラスが用いられます。
/* MYWEBSRVというSTCに、ユーザーID WEBUSER を割り当てる定義 */
RDEFINE STARTED MYWEBSRV.* STDATA(USER(WEBUSER) GROUP(WEBGRP))
/* 定義を有効化する */
SETROPTS RACLIST(STARTED) REFRESH
このように定義することで、オペレーターが S MYWEBSRV コマンドを実行すると、z/OSは自動的にこのSTCをWEBUSERというユーザーの権限で起動します。これにより、STCの権限はWEBUSERに付与された権限となり、システムの安全性が保たれます。
「設計図」「実体」「許可証」の3つが揃って初めて、STCは意図通りに、そして安全にその役割を果たすことができます。
5. まとめ
この記事では、z/OSの安定稼働を支える、STC(Started Task) について掘り下げてきました。
STCは、独立したメモリ空間を持ち、権限管理の下で動作する、z/OSのサービス提供の基盤です。STARTコマンドの裏には、JESを中心としたコンポーネントが連携し、「設計図(PROCLIB)」「実体(プログラム)」「許可証(RACF)」という3つの定義に基づいてタスクを起動する、仕組みが存在します。
しかし、z/OSのSTCはこれだけではありません。SSHDやz/OSMFといった最近のSTCのJCLを覗くと、PGM=BPXBATCHという記述や /var/zosmf というディレクトリツリーの記述が登場します。これは、STCがz/OSのもう一つの顔である USS(UNIX System Services) と連携して動いている証です。
次回の記事では、このUSSとは一体何なのか、そしてSTCがどのようにUSSの世界と結びつきサービスを提供しているのか、その仕組みを解説しいきます。
▼ 次回記事
参考文献

