Skip to main content.

Weekly "Keyboard World"

週刊「鍵盤世界」

17. Three Finger Salute

Windows を嫌う人間が大抵論うポイントの一つに、 「ログオン開始のキーコンビネーションを再起動のキーコンビネーションに合わせるなんて、Microsoft は頭が悪い」というものがあります。 しかし、少し考えれば、このキーコンビネーションが採用された理由が見えてくるのではないでしょうか。 ― 2001.09.16 掲載

お久しぶりです。

直前の回「Age of "T"」を公開したのが 1998 年 5 月 12 日のことですから、既に 3 年以上が経過してしまいました。 今までキーボードに纏わる様々な雑知識や歴史について書いてきましたが、 キーボードの世界はそれ位では語り尽くすことが出来ません。 ようやく再び筆を取る気になりましたので、暫くの間、再びこの駄文にお付き合い下さいませ。

さて、復活第一弾のネタは、誰もが知っているキーコンビネーション (キーの組み合わせ)である「Ctrl + Alt + Del」について、 その歴史と動作原理について書いてみたいと思います。

Ctrl + Alt + Del」は Windows ユーザや MS-DOS ユーザ(まだいたのですか? 物好きですね)、そして一部の Linux ユーザなら知らない人間はいない程有名なキーコンビネーションです。 このキーコンビネーションは俗に「Windows マシン」 と称されている PC」 で利用されており、

など、その役割は OS や利用環境毎に様々ですが、一般の人にとっては「計算機の強制終了」 というイメージが最も強いのではないでしょうか? 特に Windows 3.1 や Windows 9x 系 OS では必須のキーコンビネーションであり、これなしではこれらの OS はまともに使うことが出来ない…と言っても過言ではありません。

通常、このキーコンビネーションを押す際は「左手で CtrlAlt、 右手で Del」と両手を使います。3 つのキーを押すためには最低 3 本の指が必要ですから、このキーコンビネーションをボーイスカウトの敬礼(私は見たことがありませんが、 親指と小指を曲げ、残りの指は伸ばして敬礼するそうです) に因んで「Three Finger Salute」と称する人もいます。 一部の人々は両手を使わず、右手親指で左 Alt、右手薬指で左 Ctrl、 右手小指で Del を押してこのキーコンビネーションを押しますが、 或いはここから出てきたのかもしれません。

このキーコンビネーションの誕生は遥か昔、PC の元祖である IBM PC の生誕にまで遡ります。 IBM PC には小さな ROM が最初から搭載されており、 PC 及び周辺装置の起動及び操作に必要なプログラムとデータが格納されていました。 具体的には PC のスタートアップルーチン、 「ROM BIOS(Basic Input/Output System)」と呼ばれる小さなソフトウェア、そして ROM BASIC などです。

なぜ ROM が搭載されているかというと、 共通的に使える基本的なハードウェア制御用の仕組みが PC 内部にあることで、 PC を動かし維持することが簡単になるからです。

スタートアップルーチンとは

などといった PC の初期化にあたる仕事を行うソフトウェアで、 ROM BIOS とは

などを行うソフトウェアです。

ROM BIOS の中にはキーボードに関するルーチンも勿論組み込まれており、 このルーチンはキーボードからのスキャンコード (キーボード上のキーを押した際に送られる、 押されたキーを一意に示すための信号)を扱いやすい形に変換します。 例えば、ただ単に Z キーを押した場合は「z」という文字に、 Z キーが Shift キーと共に押されていた場合は「Z」 に変換するといった具合です。

このルーチンは更に、(事前に定義されている) 一部の特別なキーやキーコンビネーションが押されていないかどうかも判別します。 ここで言う「特別なキーやキーコンビネーション」とは、 「そのキー / キーコンビネーションが押された場合、 ROM BIOS 内部で特別な処理をする必要があるもの」を指します。 例えば、Ctrl キーと共に Pause キーが押された場合、ROM BIOS はそれが Break であると判断し、 特別な仕組みを使って相当する処理を行います。

このようなキーとしては他に SysRq (Alt + Print Screen)や Print Screen が定義されていましたが、合わせて「Ctrl + Alt + Del」も 「コンピュータを再起動するための特別なキーコンビネーション」として定義されていました。 つまり PC における「Ctrl + Alt + Del」というキーコンビネーションは、 キーボードの割込みが認識される限り処理されるリセット機能として、PC の設計段階から定義されていたわけです。

かつて PC 上の OS としては標準の地位を占めていた MS-DOS は積極的に ROM BIOS 内部のルーチンを利用していたので、 「Ctrl + Alt + Del」が押された場合は当然のように PC を再起動していました。しかし時代は流れ、 PC 上で動作する最近の OS は ROM BIOS を利用せず、 ROM BIOS で行われていた処理を OS が引き受けるようになってきました。 Linux や Windows NT がその代表として挙げられますが、 「Ctrl + Alt + Del」はこのような OS ではどのように処理されているのでしょう。

まず、Linux の場合について考えてみましょう。 Linux が稼動する PC 上で「Ctrl + Alt + Del」をタイプすると、 通常は PC が再起動するようになっています。 しかしこの再起動は先程述べたような ROM BIOS の力によるものではありません。何故なら、マルチユーザ / マルチプロセスの OS である Linux では、適切な後始末なしにリセットを行うことは危険だからです。

Linux では「Ctrl + Alt + Del」をカーネル内部で処理しています。 厳密に言えば、キーボードドライバは「Ctrl + Alt + Del」 というキーコンビネーションを検出すると、カーネル内部で定義された ctrl_alt_del() という関数を呼び出すという仕組みになっています。

この ctrl_alt_del() という関数は、通常は init に対してシグナル SIGINT を送出します。 init はシグナル SIGINT を受け取ると、 /etc/inittab 中のアクション ctrlaltdel に定義されたプロセスを実行します。 通常、ctrlaltdel に対して定義されるアクションは、 「/sbin/shutdown -r」 (実際はもっと複雑なオプションが定義されていますが) になっていますので、これで計算機が再起動することになります。

init というのは、UNIX 系 OS における全てのプロセスの祖先となるプロセスであり、 設定ファイル /etc/inittab を監視して個々の状態に応じた処理を行います。

続いて、Windows NT の場合を見てみましょう。 Windows NT では、いかなるアプリケーションでもこのキーコンビネーション をトラップすることは出来ません。 「Ctrl + Alt + Del」は OS にしかハンドリング出来ないようになっており、 「Ctrl + Alt + Del」を検知した場合、OS がその局面に応じた処理を行うようになっています。 例えばログオン待機状態ではログオンダイアログを表示し、 ログオン後は計算機のロックやタスクマネージャの起動を行うといった、特別なウィンドウを表示させます。

Windows NT にログオンするために「Ctrl + Alt + Del」 を押すのには訳があります。 もし仮に「Ctrl + Alt + Del」を押さずにログオンすることが可能… つまり最初からログオン用のダイアログが出ているような設計であれば、 ログオン画面に見せかけた悪意のアプリケーションを画面上に出しておくような、不逞の輩が出てくるからです。 何が問題かよくわからない人は、この「悪意のアプリケーション」 の動作が「入力されたユーザ名とパスワードを保存して、別の人間にこのユーザ名とパスワードを通知する」 というものであることを想像してみて下さい。 この悪意のアプリケーションに対してユーザ名とパスワードをタイプしてしまえば、 その不幸なユーザのパスワードは他人に知られてしまうことになるのです。

しかしログオンの開始に「Ctrl + Alt + Del」が必要であれば、 その心配はありません。このキーコンビネーションは OS にしかハンドリング出来ませんから、 仮に先のような悪意のアプリケーションが存在していたとしても、 「Ctrl + Alt + Del」を押すことで OS の管理下にあるログオン用ダイアログを呼び出すことが可能になるのです。

勿論、「OS にしかハンドリング出来ない」というキーコンビネーションが 「Ctrl + Alt + Del」である必要は全くありません。しかしそれでも 「OS にしかハンドリング出来ない」キーコンビネーションが 「Ctrl + Alt + Del」として設定されているというのは、 「過去及び未来の如何なる時点において、 どのアプリケーションも独自の用途で利用していないと思われる」 ただ一つのキーコンビネーションだったからではないかと想像します。 一部の人間は「ログオン開始のキーコンビネーションを再起動のキーコンビネーションに合わせるなんて、Microsoft は頭が悪いぜ、HaHaHa!」 などと言っていますが、このキーコンビネーションが選ばれた背景には、 恐らくこのような理由があったのでしょう。

さて、今回は PC 上における「Ctrl + Alt + Del」 について長々と説明してきましたが、 このような特別なキーコンビネーションの存在は別に PC に限った話ではありません。次回は、 他の計算機におけるこのような特別なキーコンビネーションについて書いてみましょう。