
答え1
その理由は、コンピューティングの世界の多くのことと同様に、歴史と下位互換性にあります。
2.4.* カーネルでは、 Linux にudev
( の現在の仮想ファイルシステム ソリューション) が存在する前に、ルート ファイルシステム上の実際のディレクトリにデバイスを配置する「従来の Unix 方式」と、 の最初の仮想ファイルシステム ソリューション/dev
である という 2 つの競合するソリューションがありました。devfs
/dev
問題は、 の作者がdevfs
さまざまなデバイスに対してまったく新しい命名スキームを構築したことで、人々はそれに対してかなり強い不満を抱いていました。新しいスキームに移行して古いスキームを廃止したい人もいれば、移行の必要性を感じない人もいました。一部のディストリビューションは古い静的デバイスを使用し、他のディストリビューションは を選択しましたdevfs
。
その時点では、インストール時に作成された疑似 TTY デバイスの数が固定されていました。(ちなみに、CONFIG_LEGACY_PTYS
カーネルのコンパイル時にオプションが設定されている場合は、これはまだ可能です。)
その後、Unix98 スタイルの動的に割り当てられた PTY デバイスが導入されました。静的/dev
ディレクトリにそれらを実装するには、 の仮想ファイルシステムが必要となり/dev/pts
、これが ファイルシステムとして知られるようになりましたdevpts
。また、これを別のファイルシステムとして持つことで、コードを重複させることなく、動的にも適用することができたでしょうdevfs
。
動的に割り当てられた PTY デバイスは、すぐに好まれる選択肢になりました。なぜなら、/dev
システムの存続期間中にほとんど使用されることのない、静的に割り当てられた PTY デバイスを何百も雑然と配置するのは明らかに無意味だったからです。
その後、Linux 2.6 が登場しましたudev
。これにより、静的ソリューション/dev
とdevfs
ソリューションの両方がすぐに時代遅れになりました。下位互換性の理由から、ファイルシステムは引き続き存在していましたが、完全に RAM ベースになったため、devpts
同じ機能をメイン ファイルシステムに戻すことができました。/dev
たとえば、現在、Debian 9 はレガシー互換性のためにdevpts
ファイルシステムをマウントしています/dev/pts
が、デフォルトでは 0 の権限を割り当てています。これは、ファイルシステムがおそらく非推奨になり、将来のある時点で削除されることを/dev/pts/ptmx
示しています。devpts
# ls -l /dev/ptmx /dev/pts/ptmx
crw-rw-rw- 1 root tty 5, 2 Nov 22 11:47 /dev/ptmx
c--------- 1 root root 5, 2 Nov 12 14:59 /dev/pts/ptmx
一部のプログラムでまだ が必要な場合は/dev/pts/ptmx
、デフォルトの権限を調整することで許可できますが、これにより、どのプログラムが古い非推奨のデバイス名をまだ使用しているかがわかります。
答え2
プロセスが/dev/ptmxを開くと(posix_openpt()) を実行すると、擬似端末マスター (PTM) のファイル記述子が取得され、/dev/pts ディレクトリに擬似端末スレーブ (PTS) デバイスが作成されます。
マスターが開かれると、スレーブはロックされます。スレーブの名前を取得し、その権限などを設定してから、スレーブのロックを解除できます。これにより、スレーブがアクセス可能になる前にスレーブを制御できるようになります。
スレーブは実際のテキスト端末デバイスをエミュレートし、マスターは端末エミュレーター プロセスがスレーブを制御する手段を提供します。
スレーブは物理端末の仮想実装であり、マスターはその端末での人間の入力の仮想実装です。コンピューターはスレーブに送信された文字を、人間が実際の端末で入力した場合と同じように扱います (マスターの作成時に設定された権限によって制限されます)。