答え1
コンピューティングの世界の多くのように、その理由は歴史と以前のバージョンとの互換性によるものです。
Linuxに存在する前の2.4.*カーネルには、ルートファイルシステムの実際のディレクトリにデバイスを配置する「従来のUnixudev
方式」と、最初の仮想ファイルシステムという/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
が、/dev/pts/ptmx
デフォルトでは権限を0に割り当てます。これは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)を作成します。
マスターデバイスの電源が入ると、スレーブデバイスがロックされます。スレーブの名前を取得し、権限などを設定してから、スレーブのロックを解除できます。これにより、スレーブデバイスにアクセスする前に制御できます。
スレーブは実際のテキスト端末デバイスをシミュレートし、ホストはスレーブを制御するための端末エミュレータプロセスの方法を提供します。
スレーブは物理端末の仮想実装であり、マスタはその端末に入力する仮想実装です。コンピュータは、スレーブに送信された文字を人が実際の端末に入力するかのように処理します(権限設定によって異なります)。マスターが作成されました)。