ACOS-4

**ACOS-4**（エイコスフォー）は、日本電気のメインフレームおよびそのOSであるACOSの一系列である。

## 概要
ACOS-4は、兄弟分OSであるACOS-2共々、ハネウェル社が当初から開発したOSを基本として開発されたのが起源である。(起源についての詳細は、ACOSの項を参照)

2022年現在の名称は、ACOS-4/XTおよびACOS-4/XS。対象となるハードウェアはi-PX AKATSUKI/Aおよびi-PX9800/Sである。

## バージョン
ACOS-4のバージョンは以下の通りである。

## メモリ管理方式
初期のメモリ管理方式は、ひとつのプログラムへ可変長のセグメントを、必要とされる数だけ割り当てるセグメント方式を採用していた。

セグメントの種類には、
* 最大長64kバイトの小セグメント（最大：8×256=2,048個）
* 最大長4Mバイトの大セグメント（最大：7×4=28個）
の2種類があり、2階層のセグメント管理テーブルにより管理されていた。

後に、プログラムに割り当てられる各セグメントひとつひとつに対して、セグメント内を4kバイトのページに分割するセグメント化ページング方式に移行した。(ACOS-4においてセグメント化ページング方式は、セグメント方式の項で表記されているページ化セグメンテーションと、同義語として使われている)

なお、現在のACOS-4は、使用できるメモリ空間の拡張が施されている（アドレス表現の総ビット数が32bitから64bitに増えている）為、使用できるセグメントの諸元（1セグメントあたりの最大長や最大個数など）が変更されているものと考えられる。

### メモリ共有管理
ハードウェア上で実行されている**タスク**（プロセス）同士が同じメモリを共有して読み書きする際の管理は、**型**(英：type）と呼ばれる概念によりセグメントを単位として行なわれている。

型には、型0、型2、型3の3種類があり、それぞれ
* 型0：実行している全タスク（OS自身を含む）で共有されるセグメント（メモリ）
* 型2：同一の実行グループに属するタスク群（プロセスグループ）内で共有されるセグメント（メモリ）
* 型3：実行中の各タスクごとに分離されているセグメント（メモリ）
となっている。

型2、および、型3のセグメントにおいては、同一の実行グループに属するタスク群、もしくは個々のタスクごとに独立した実メモリが割り当てられている上、ハードウェアに装備されている実行命令のメモリ参照指定自体が、当該タスクに割り当てられている実メモリしか参照できない構造となっている。このため、他の実行グループ（プロセスグループ）に属するタスク群、もしくは他のタスクが専用に使用している型2や型3のセグメント（メモリ）を読み書きする実行命令そのものが作成不能である（処理の都合上、どうしても読み書きせざるを得ない場合は型自体を変えるしかないと推測されるが、一般向けの説明書等には記載されていない）。

型0を含む、セグメント（メモリ）の内容そのものを保護する方法は、#メモリ保護機構の項を参照。

### メモリ保護機構
メモリ内容を保護する方法としては、マルチオーソリティキー（略称：MAK）と称する管理値を用いた、リングプロテクション方式を採用している。MAKの取りうる値は0～3の4階層で、値が小さいほどより特権レベルの高い信頼できるタスクとして扱われる。

メモリ保護そのものは、実行中のタスクに与えられているMAKの値（1つ）を、セグメントごとに3つ設定されているMAKの値とそれぞれ比較する手順を介して行なわれる。比較した結果により、
* メモリからの読み取り（Read）
* メモリへの書き込み（Write）
* メモリ内容のプログラムコードとしての実行（Execute）
が許可されるか否かが決まる。

なお、同一のセグメントに対する、メモリへの書き込みとメモリ内容のプログラムコードとしての実行を同一のタスクが同時に実行する事は、OS自身を含めて、原則としてできないハードウェア構造となっている。もっとも特権レベルが高い（MAKの値が0の）タスクであったとしても、一定の手順を踏まない無秩序なメモリ書き込み等はできない。

実行ファイルの内容をメモリへ書き込む動作と、タスクとしての起動を同時に行わなければならないなど、MAKによるメモリ保護を回避してメモリへの参照等を行なわなければならない場合は、**ゲートセグメント記述子**と呼ばれる専用の仕組みを介して行なう。

## 使用文字コード
内部/外部ともに、ACOS-2と共通なEBCDIC-カタカナコードを採用している。(1バイトを8ビットで扱っている)

日本語はJIPS(E)コードを採用。これもACOS-2と共通である。

ACOS-6系で使われるJIPS(J)や、A-VXで使われるNEC内部コード(E)へは変換する手段が用意されている。

## ファイルシステム
ACOS-4のファイルシステム(ハードディスク上のファイル管理方法)は、ACOS-2と同じく、実装しているハードディスクに格納されている全てのファイルが、それぞれのハードディスクごとに存在するVTOCと呼ばれる管理領域に登録される仕組みになっている。(UNIXなどで採用されているディレクトリ(階層構造)と対比した説明は、ACOS-2のファイルシステムの項を参照されたい)

ファイル名は英字大文字と数字、さらに"."(ドット)文字がファイル名の先頭と最後を除く非連続位置に使用できる。ACOS-2とは異なり、"@"は使用できない。

ファイル名の最大長は16文字。ただし、"."(ドット)文字を使って前後のファイル名(英字大文字と数字)を順番に連結させる事により、最大44文字("."(ドット)文字を含む)まで拡張する事ができる。

ACOS-4においては、"."(ドット)文字を用いた拡張を行なっていないファイル名を単純識別名、拡張を行なったファイル名を修飾付ファイル名と呼んでいる。

### 修飾付ファイル名を用いた擬似的な[[ディレクトリ]](階層)構造
ACOS-4には、修飾付ファイル名を構成する各単純識別名が、擬似的にディレクトリ名やファイル名になっているかのように振舞う機能が存在する。

この機能は、修飾付ファイル名を構成する各単純識別名を、カタログファイルと呼ばれる管理ファイルへ登録する事により動作させる事ができ、"."(ドット)文字を用いて最後尾に連結された単純識別名がファイル名、それ以外の単純識別名が連結された順番で上下関係を構成するディレクトリ名であるかのように振舞う。

この擬似的なディレクトリ(階層)構造を正しく機能させるには、ファイルの作成等に一定の規制を掛ける必要がある。なぜなら、ハードディスクごとに存在するVTOCと呼ばれる管理領域には、修飾付ファイル名を構成する先頭の単純識別名から最後尾の単純識別名までを含んだファイル名(これを完全修飾付ファイル名という)が記録されているからである。

ある利用者が所有(もしくは利用)許可を受けている擬似的なディレクトリ名の配下に、別の利用者が勝手にファイルを作成したり読み書きしたりできないよう、カタログファイルには、UNIXでいうパーミッション情報も同時に記録される仕組みとなっている。(カタログファイルによる管理を迂回しようと、操作したいハードディスクを明示してファイル作成等の操作を行なおうとしても、ファイル名を構成する単純識別名そのもので規制が掛かる)

なお、初期のバッチ(一括処理)型システムでのみ使用されていた設置マシンにおいては、カタログファイルによる、擬似的なディレクトリ(階層)構造および所有(もしくは利用)許可を管理する機能が、未実装もしくは未稼働となっていた場合があった。

ネットワークへ接続して使用するのが当たり前になっている現在では、カタログファイル無しでの稼動は皆無と考えられる。ACOS-2へも、何らかの形で所有(もしくは利用)許可を管理する機能が実装されているものと思われる。

### 標準入力および標準出力
ACOS-4には、SYSINと呼ばれる標準入力、およびSYSOUTと呼ばれる標準出力の仕組みが備わっている。ただし、UNIX系OSなどに備わっている標準入力、標準出力とは仕組みが異なる。(リダイレクトに相当する機能はあるが、パイプ等は無い)

SYSINはバッチ(一括処理)型プログラムを実行する為のJCLへ同梱された処理データを読み込む事を想定しているが、他のデータ入力装置(および媒体)から読み込むようにJCLで変更する事もできる。またタイムシェアリング型システム上で実行しているプログラムの場合は、端末に接続されているキーボードから読み込むのが標準設定となる。

SYSOUTはバッチ(一括処理)型プログラムから帳票印字用のプリンタへ出力する事を想定しているが、SYSINと同じく、他のデータ出力装置(および媒体)へJCLで出力先を変更する事もできる。タイムシェアリング型システム上で実行しているプログラムの場合は、端末に接続されているディスプレイ装置に出力するのが標準設定となる。

ACOS-4の特徴として、SYSOUTと呼ばれる標準出力が1つのプログラム当り最大26個まで同時に使用できる事が挙げられる。これは、複数種類の帳票出力を同時に行なうプログラムを作成しやすく為に、設けられた機能であろうと思われる。(ちなみに初期のACOS-4では、最大2個まで同時使用可能)

26個まで使用できるSYSOUT(名称はAPRからZPR)のうち、初期の頃から存在していた2個のSYSOUTについては、特別な意味が与えられている。すなわち、UNIX系OSなどでいう標準出力および標準エラー出力に似た使い分けられ方をされる特定のSYSOUTが、ACOS-4には存在するということである。

例:
* ACOS-4の製造元から提供されるプログラム群(ユーティリティプログラムなど)は、UNIX系OSなどでいう標準出力に似た使われ方をされる特定のSYSOUT(名称:SPR)を用いて、実行結果を報告する帳票を出力する。
* 一部のユーティリティ(プログラムデバッガ等)は、UNIX系OSなどでいう標準エラー出力に似た使われ方をされる特定のSYSOUT(名称:APR)を用いて、二つめの実行結果の報告帳票を出力する。
* タイムシェアリング型システム上で実行しているプログラムが、端末に接続されているディスプレイ装置に出力する際に用いるSYSOUTの名称は、SPRとAPRであり、それぞれ主出力および副出力となる。

SYSINと呼ばれる標準入力については、1つのプログラムにつき通常1個のみ。ただし、JCLに同梱されたデータとそのデータを読み込むプログラムとは、関連付け用の名称をJCL内で定義して関連づける仕組みになっている為、2個以上のSYSINを読み込むプログラムが作成できるのかもしれない。(同梱データを、同一ジョブ内で順次実行される複数のプログラムに共有させる実機実験に、成功した実績はあり)

## 歴史
* ACOS-4 （R3.1（1975年10月）- R11.1）
* ACOS-4/MVP （R1.1（1979年7月）- R4.2）
* ACOS-4/AVP （R1.1（1984年9月）- R4.2）
* ACOS-4/MVP XE （R1.0（1985年7月）- R6.1）
* ACOS-4/AVP XR （R1.1（1988年12月）- R3.1）
* ACOS-4/XVP （R1.1（1991年4月）- R4.1）
* ACOS-4/XVP PX （R1.1（1994年10月）- R4.1）
* ACOS-4/NPX （R1.1（1998年4月）- R3.1）
* ACOS-4/i-PX （R1.1（2000年11月）- R5.1）
* ACOS-4/VX （R1.1（2004年12月）- R6.12（2009年12月18日出荷））
* ACOS-4/MX （R1.1（2010年7月）- R4.1（2013年10月1日出荷））
* ACOS-4/XA （R1.1（2012年9月）- R4.1（2015年10月2日出荷））
* ACOS-4/XS （R1.1（2017年12月） - R3.1（2019年12月3日出荷））
* ACOS-4/XT （R1.1（2022年6月30日出荷））

大型機用にACOS-4/MVP XEがリリースされて以降、中型機用のAVP系と大型機以上用のMVP XE系が並存する時代が続いたが、XVPの時代に統合された。

その後再び、i-PX7600及びi-PX7800用のACOS-4/i-PXと、i-PX9000用のACOS-4/VXの２系統に分かれた。この理由は、搭載しているプロセッサの内部構造が異なる為と考えられる。(i-PX7600及びi-PX7800は、NEC独自のプロセッサ(NOAH-4およびNOAH-5)を使用。i-PX9000はインテル社製のItanium 2 64bitプロセッサを使用)

i-PX7600とi-PX7800の終息以降、Itanium 2を搭載したi-PX9000対応のACOS-4/VXとその後継のACOS-4/MXのみとなったが、2012年6月に発売されたi-PX9800でNEC独自のプロセッサ（NOAH-6）に再転換し対応するACOS-4/XAがリリースされた。

2022年6月、NEC独自のプロセッサ（NOAH-7）を搭載するi-PX AKATSUKIが発売され、これに対応するACOS-4/XTがリリースされた。

## 関連項目
* GCOS

## 参考文献
本項目（ACOS-4）に関する記述は、外部リンクの項に示した情報以外に、実機に付属していた複数の説明書、および、実機を使用する事により得た情報を元に作成している。（特に、ACOS-2やACOS-6と関連付けて記述している部分）

## 出典

## 外部リンク
* ACOS-4 : ACOSシリーズ - NEC
* 【日本電気】 ACOS-4 - コンピュータ博物館（情報処理学会）