tty サブシステム

AIX® は、マルチユーザー・オペレーティング・システムであるため、ローカルまたはリモートに接続されたデバイスからのユーザー・アクセスが可能です。 この機能をサポートするコミュニケーション層は、tty サブシステムです。

端末デバイスと読み取りおよび書き込みを行うプログラムとの間の通信は、tty インターフェースによって制御されます。 tty デバイスの例としては、次のものが挙げられます。

  • モデム
  • ASCII 端末
  • システム・コンソール
  • シリアル・プリンター
  • X Window システム下での Xterms または Aixterms

この概要では、以下のトピックに関する情報を提供します。

TTY サブシステムの目標

tty サブシステムは、次の手順を実行します。

  • 非同期回線上の物理的なデータ・フロー (伝送速度、文字サイズ、および回線の可用性も含む)
  • 特殊文字の認識と各国語対応によるデータの解釈
  • 制御端末の概念を使用することによるジョブおよび端末アクセスの制御

制御端末は、プロセスのグループの入出力操作を管理します。 tty 特殊ファイルは、制御端末インターフェースをサポートします。 実際問題として、 ユーザー・プログラムが dev/tty5 などの 端末ファイルをオープンすることはほとんどありません。 これらのファイルは getty また は rlogind コマンドによってオープンされて、ユーザーの標準入出力デバイスとなります。

tty サブシステム・モジュール

その各タスクを実行するために、tty サブシステムはモジュール、あるいは制御手順で構成されています。 モジュールというのは、コンピューターと非同期デバイス間の 通信用のインターフェースを管理する処理規則の集合です。 モジュールは、各 tty ごとに動的に追加および除去することができます。

tty サブシステムは、以下の 3 つの主要タイプのモジュールをサポートします。

tty ドライバー

tty ドライバーあるいはハードウェア制御手順は、ハードウェア (tty デバイス) または 疑似ハードウェア (pty デバイス) を直接制御します。 これらは、アダプター上のモジュール にサービスを提供することによって、アダプターに対して実際の入出力を実行します。 そのサービスとは、ポートの オープン時におけるフロー制御、および特別なセマンティクスのことです。

提供されている tty ドライバーは、次のとおりです。

ドライバー 説明
cxma 128 ポート非同期コントローラー。
cxpa 8 ポート非同期コントローラー。
lft 低機能端末。 TTY 名は /dev/lftY (Y >= 0) です。
sa 2 ポート非同期 EIA-232 PCI アダプター。
sf システム・プレーナー上の汎用非同期送受信機 (UART)

詳細は、TTY ドライバーのセクションに記載されています。

伝送制御手順

回線制御手順は、編集、ジョブ制御、および特殊文字の変換処理を行います。 これらの規則は、インバウンドおよびアウトバウンドのデータ・ストリーム上で発生するすべての変換を実行します。 また伝送制御手順は、tty ドライバーについての大部分のエラー処理および状況モニターも実行します。

提供されている伝送制御手順は、次のとおりです。

サブルーチン 説明
ldterm 端末デバイス
sptr シリアル・プリンター (splp コマンド)
slip Serial Line Internet Protocol (slattach コマンド)

コンバーター・モジュール

コンバーター・モジュール、すなわちマッピング制御手順 は、 入出力文字の変換 (マッピング) を行います。

提供されているコンバーター・モジュールは、次のとおりです。

コンバーター 説明
nls 端末マッピングのための各国語サポート。 このコンバーターは、データ・ストリーム上の着信文字および発信文字を、ポート用に定義されている入出力マップに基づいて変換します (setmaps コマンドを参照)。
lc_sjis および uc_sjis シフト JIS (SJIS) と拡張日本語 EUC コード (AJEC) 間のマルチバイト文字変換に使用される上方コンバーターおよび下方コンバーター。 これらは ldterm 伝送制御手順によって操作されます。

コンバーター・モジュールでは、 コンバーターの詳細情報を提供します。

TTY サブシステム構成

tty サブシステムは STREAMS を基にしています。 この STREAMS を ベースとした構造により、モジュール性と柔軟性が提供され、次の機能を使用できるようになります。

  • 容易なカスタマイズ。ユーザーは、その選択肢のモジュールを追加し除去することによって、 ユーザーの端末サブシステム環境をカスタマイズすることができます。
  • 再使用可能モジュール。例えば、 構成が異なる多数の tty デバイスで同じ伝送制御手順モジュールを使用することができます。
  • 新規機能の端末サブシステムへの追加が容易。
  • 異機種デバイス上での同種 tty インターフェースの提供。

tty ストリームの構造は、以下のモジュールで構成されます。

  • ストリーム・ヘッド。ユーザーの要求を処理します。 ストリーム・ヘッドは、使用されている伝送制御手順または tty ドライバーが何であるかに関係なく、 すべての tty デバイスに対して同一のものとなります。
  • オプションの上方コンバーター (例えば uc_sjis)。 アップストリーム・データおよびダウンストリーム・データを変換するために伝送制御手順より上にプッシュされるコンバーター・モジュールです。
  • 伝送制御手順。
  • オプションの下方コンバーター (例えば lc_sjis)。 アップストリーム・データおよびダウンストリーム・データを変換するために伝送制御手順より下にプッシュされるコンバーター・モジュールです。
  • オプションの文字マッピング・モジュール (nls)。 入出力端末マッピングをサポートするために tty ドライバーより上にプッシュされるコンバーター・モジュールです。
  • ストリームの終端。tty ドライバーです。

国際化対応モジュールが必要がない場合は、tty ストリーム内に入っていません。

シリアル・プリンターの場合は、通常はストリームに国際化対応モジュールが入っていないため、 構造はこれよりも単純です。

共通サービス

/usr/include/sys/ioctl.h および /usr/include/termios.h の 各ファイルでは、tty サブシステムが提供している共通サービスへのインターフェースについて記述しています。 すべてのモジュールが使用する ioctl.h ファイルには、 いくつかの ioctl コマンドだけでなく、winsize 構造体も 組み込まれています。 termios.h ファイルには、POSIX 準拠のサブルーチンとデータ型が含まれています。

提供されるサービスを、その特定の機能に従ってグループに分け、ここで説明します。

ハードウェア制御サービス

ハードウェア制御用として、以下のサブルーチンが提供されています。

サブルーチン 説明
cfgetispeed 入力ボー・レートを取得します。
cfgetospeed 出力ボー・レートを取得します。
cfsetispeed 入力ボー・レートを設定します。
cfsetospeed 出力ボー・レートを設定します。
tcsendbreak 非同期のシリアル・データ回線でブレークを送信します。

フロー制御サービス

フロー制御用として、以下のサブルーチンが提供されています。

サブルーチン 説明
tcdrain 出力の完了を待ちます。
tcflow フロー制御機能を実行します。
tcflush 指定されたキューからデータを廃棄します。

端末の情報および制御

端末の情報および制御用として、以下のサブルーチンが提供されています。

サブルーチン 説明
isatty デバイスが端末かどうかを判別します。
setcsmap コード・セット・マップ・ファイルを読み取り、それを標準入力デバイスに割り当てます。
tcgetattr 端末の状態を取得します。
tcsetattr 端末の状態を設定します。
ttylockttywaitttyunlock、または ttylocked tty ロック機能を制御します。
ttyname 端末の名前を取得します。

ウィンドウおよび端末のサイズ・サービス

カーネルは、現在の端末またはウィンドウのサイズに矛盾のないインターフェースを 提供するために、winsize 構造体を保管しています。 winsize 構造体には、以下のフィールドがあります。

フィールド 説明
ws_row ウィンドウまたは端末上の行数を (文字数で) 示します。
ws_col ウィンドウまたは端末上のカラム数を (文字数で) 示します。
ws_xpixel ウィンドウまたは端末の横のサイズを (ピクセル数で) 示します。
ws_ypixel ウィンドウまたは端末の縦のサイズを (ピクセル数で) 示します。

規則により、winsize 構造体のすべてのフィールドにおいて、0 という値は、 その構造体がまだセットアップされていないということを示します。

サブルーチン 説明
termdef 端末特性を照会します。
TIOCGWINSZ ウィンドウのサイズを取得します。 この ioctl 操作への引数は、端末またはウィンドウの 現在のサイズが入っている、winsize 構造体を指すポインターです。
TIOCSWINSZ ウィンドウのサイズを設定します。 この ioctl 操作への引数は、端末またはウィンドウの現在のサイズ情報を 設定する際に使用される、winsize 構造体を指すポインターです。 新しい情報が以前のものと異なる場合は、 端末プロセス・グループに SIGWINCH シグナルが送信されます。

プロセス・グループ管理サービス

プロセス・グループの管理用として、以下のサブルーチンが提供されています。

サブルーチン 説明
tcgetpgrp フォアグラウンド・プロセス・グループ ID を取得します。
tcsetpgrp フォアグラウンド・プロセス・グループ ID を設定します。

バッファー・サイズ操作

以下の ioctl 操作は、端末の入出力バッファーのサイズを設定するために用いられます。 これらの操作への引数は、バッファーのサイズを指定している整数を指すポインターです。

操作 説明
TXSETIHOG プロセスが読み取る前に受け取って内部バッファーに保管することができる、 入力文字数に対するホグ制限を設定します。 デフォルトのホグ制限は 8192 文字です。 ホグ制限より 1 文字多い文字数に達すると、エラーがエラー・ログに記録され、 入力バッファーはフラッシュされます。 ホグの数値は大きすぎないように気を付けてください。 大きすぎると、システム・ピン (固定) メモリーからバッファーが割り当てられることになります。
TXSETOHOG エコー入力に対してバッファーとして働く、出力文字の数についてのホグ制限を設定します。 デフォルトのホグ制限は 8192 文字です。 ホグ出力制限に達すると、それ以降の入力文字はエコーされません。 ホグの数値は大きすぎないように気を付けてください。大きすぎると、システム・ピン (固定) メモリーからバッファーが割り当てられることになります。

同期

tty サブシステムは、STREAMS が提供する同期を利用します。 tty ストリーム・モジュールは、キュー・ペア・レベルの同期を用いて構成されます。 この同期により、異なる 2 つのストリームの処理を並行して行うことが可能になります。