私はLinuxのターミナルサブシステム、特にttyドライバとライン規律を理解しようとしています。明らかに、このサブシステムのアーキテクチャは、テレタイプマシン(tty)がコンピュータに接続され、コンピュータにデータを入力し、プロセスから応答を受けた時代に由来しました。
私は実際の歴史的なttyを研究したことがなく、そのようなttyがどのように機能するかを理解すると、ttyドライバの内部動作をよりよく理解できると信じています。
特に興味があります。エコそしてライン編集。
したがって、ttyのオペレータがテキストを入力すると、テキストはttyにエコーされます(紙に1行を印刷することによって)。個々のキー/文字を入力するときにエコーするか、改行/エンターキーを押したときにのみエコーするかどうか。
彼が入力したキー(文字)はすぐにコンピュータに送信されますか(ラインルール?)、またはttyのローカルバッファに保存され、新しいラインキーを押すと送信されます。
オペレータは間違ったテキストをどのように編集できますか(バックスペース、ctrl-h)?バックスペース情報はそれに応じて行が編集されるコンピュータに送信されますか、それともこれはttyの機能ですか(コンピュータはそれを認識しません)。
最後に、オペレータがテキストを入力するとどうなりますか?しかし、ttyはコンピュータからデータを受信していますか?
答え1
もともとttyは次のようになりました。ASR33テレタイププライタモデル33.彼らは「愚かな」キーを押すとモデムまたはコンピュータに文字を送信します。その後、コンピュータは文字を再送信して印刷できます。
これはまた、伝送がどれだけうまく機能するかに関するフィードバックを提供する。また、1 つだけ入力すると、コンピューターは 2 つ以上の文字を再送信できます。たとえば、Enter を入力すると、キャリッジリターンが再送され、プリントヘッドが左マージンに移動し、改行が用紙を次の行に移動します。そのため、今日もこのオプションが表示されますstty onlcr
。出力改行をキャリッジリターンと改行に変換。
これがキャリッジリターン(プリントヘッドを戻る)を印刷した後に遅延オプションがある理由です。
エディタを使用して、バックスペースキー、X、および将来のスペースを使用してバックスペースキーをエコーして、最後の文字を削除できます。重複している場合、エディタはさらにコンテンツを削除するために後ろに移動し、新しい文字を入力するとプリントヘッドをもう一度端に配置できます。
stty cooked
エディタにない場合、行ルールはバックスペースキーを使用して行の末尾から文字を削除し、これまで入力された現在の行(したがってパターン)を保持します。stty rprnt
この機能を使用すると、入力したバックスペースキーが適用されるまで、行全体を再印刷する文字を入力できます。
答え2
ttyデバイスの機能は、接続されている場合と接続されない場合がある一部のドットマトリックスラインプリンタの動作に常に依存するわけではありません。 DECなどのシンクライアントもttyを使用していることに注意してください。VT220それは次のように使用することができましたピクチャーチューブ次のパラレルポートを介して外部モデムに接続します。US Robotics 9600bps Expressたとえば、モデル。
非常に少ない帯域幅(当時は9600bpsが比較的「高速」と見なされていましたが)を処理してPOTSモデムを介してファイルを送信する場合は、待機してファイルを2回アップロードしたくありません。すべてをあなたに送り返すリモートシステム。同様に、リモートシステムの内容が何であるか既に知っているときに書き換えを待っている間、リモートシステムのCPUサイクルを無駄にしたくありません。
これは、インターネット上のTelnet接続を処理するときにも同様です。 リモートログインはいいいえ生のTCP接続!実際のインターネット仕様です(RFC854)とIAC(「コマンドとして解釈」)プロトコルデータを使用してttyの動作を制御するのに役立ちます。 ttyデバイス(例えばsetserial、gettyなど)で動作するプログラムは、ヘッダファイルがプリプロセッサ定数を定義するioctl
システムコール(「I / O制御」)を利用します。termios.h
$ whatis ioctl tty_ioctl
ioctl (2) - control device
tty_ioctl (4) - ioctls for terminals and serial lines
同様に、POTSモデムも以下を使用します。Hayes "AT"コマンドセットローカルエコーを制御するために使用されます。次の端末エミュレータプログラムミニコンピュータ他の人は自分の観点からターミナルアクティビティを制御する設定を持っています。したがって、他のすべてのテクノロジと調和して動作するようにtty設定を調整する必要があります。同じ理由で、帯域幅と印刷用紙を節約するためにライン編集が行われた。あなたが望むものであるかどうかわからない場合は、処理のために別のシステムにラインを送信するのか、紙にインクを印刷するためにプリンタにラインを送信するのですか?