
devptsは、 Linuxカーネルバージョン2.1.93(1998年4月)以降で利用可能な仮想ファイルシステムディレクトリです。通常は にマウントされ、にある多重化マスターのスレーブ/dev/ptsを表すデバイスファイルのみが格納されます。このデバイスファイルは、端末エミュレータ(X11のxtermなど)の実装に使用されます。 [1] [2]/dev/ptmx
端末エミュレーション
擬似端末( 「擬似TTY」または「PTY」)は、スレーブとマスターの2つの擬似デバイスで構成され、特殊な通信チャネルを提供します。スレーブ擬似デバイスは、物理的なコンピュータテキスト端末(例えばDEC VT100など)をエミュレートし、実際の端末と同様にテキストの読み書きが可能です。マスター擬似デバイスは、テキストベースのユーザーインターフェースを提供するプログラムがスレーブと連携して制御するための手段を提供します。
テキストベースのユーザーインターフェースを持つ一般的なプログラムとしては、ターミナルエミュレータ(例:xterm、gnome-terminal、Konsole)や、SSHまたはtelnet を使用するプログラムなどがあります。マスターへの書き込みはターミナルへの入力と全く同じなので、マスター疑似デバイスは、実際のコンピュータのテキストターミナルの前に座っている人のように動作します。
擬似端末ペアは双方向パイプに似ています。マスターに書き込まれたものはすべてスレーブに入力として表示され、スレーブに書き込まれたものはすべてマスターに入力として表示されます。[3] POSIXで定義された端末デバイス(ファイル)は、全二重モードで動作する場合があります。[4]パイプと同様に、擬似端末にも容量の制限があります。Linuxでは、擬似端末の容量は各方向で約4KiBです。
一般的な Linux カーネルベースのオペレーティング システムは、ターミナル エミュレータ (xterm や gnome-terminal など) や SSH などのリモート アクセス インターフェイスによって提供されるテキストベースのインターフェイスをサポートするために、多数の PTY を提供します。
devpts は、 setuidヘルパー プログラム (例: )の必要性をなくしたいという思いから生まれました/usr/libexec/pt_chown。これは擬似端末の概念を独自に実装したものです。以前の実装では、固定数のマスター/スレーブ ペアが提供され、それらのペアには永続的なデバイス ノード (例: マスター/スレーブ ペア/dev/ptyp63と) がありました。Linuxプログラミング インターフェイスの/dev/ttyp63第 62 章「端末」および第 64 章「擬似端末」を参照してください。
実装履歴
/dev/ptmx1998年2月、Linux 2.1.87は多重化マスターデバイスのサポートを導入しました。 [5]このデバイスを開くと、未使用の疑似TTYマスターへのアクセスが可能になり、対応するスレーブを を使用して識別できるようになりますioctl()。同年4月、Linux 2.1.93は、通常 にマウントされるdevptsと呼ばれる新しい仮想ファイルシステムを追加しました/dev/pts。新しいマスター/スレーブペアが作成されるたびに、その仮想ファイルシステム内にスレーブのデバイスノードが作成されます。
TTYサブシステム(セッション管理と回線制御)をそのまま維持しながら、端末エミュレーションをユーザーランドに移行しやすくするために、疑似端末が発明されました。[6]
ラインディシプリンがカーネル内部にある理由は、各文字の受信時に発生するコンテキストスイッチを回避するためです(初期の小さなコアメモリでは、スワップアウトとスワップインが発生していました)。ラインディシプリンは入力行をカーネルバッファに保持します。特定のバイトをテストし、カウンタをデクリメントすることでバックスペース「編集」(およびその他のいくつかの簡単な編集機能)を実装するのは簡単なので、カーネルバッファで処理されます。
代替案としては、文字を受信するとすぐにアプリケーションに転送されるrawモードを使う方法があります。これは、当時有名だったEmacsのような、より高度なエディタで必要でした。実際、Emacsはこのrawモードを使う必要があったため、入力された文字ごとにコンテキストスイッチが発生するため、コンピュータのメモリが不足し、Emacsやその他のプログラムをコアに保持できない場合、コンテキストスイッチが頻繁に発生していました。
擬似端末(PTY)の追加により、TTYコードはTTYのセマンティクスをすべて保持した、一種のプロセス間通信メカニズムにもなりました。TTYコードは、パフォーマンスのボトルネックを生じさせることなく、PPPなどのネットワークプロトコルをサポートする必要もあります。[7]
参照
参考文献
- ^ Neil Brown (2016年6月1日). 「コンテナ、疑似TTY、そして後方互換性」. LWN.net .
- ^ "pts(4) - Linuxマニュアルページ". man7.org . 2021年7月22日閲覧。
- ^ 「定義」. pubs.opengrouhwsp.org . 2021年7月22日閲覧。
- ^ 「General Terminal Interface」. pubs.opengroup.org . 2021年7月22日閲覧。
- ^ "/drivers/char/pty.c の diff"。
- ^ Linus Akesson. 「TTYの謎を解く」
- ^ Jonathan Corbet (2009年7月29日). 「TTYポットの中の嵐」LWN.net .