uchan note

プログラミングや電子工作の話題を書きます

割り込み「ベクタ」と呼ぶ理由

割り込みハンドラへのポインタを配列状に並べたものを「割り込みベクタテーブル」と呼びます。英語ではInterrupt Vector Table。なぜ「ベクタ(ベクトル)」という語が使われるのか疑問に思い、ツイッターで聞いたりした結果、ベクタはポインタとほぼ同じ意味である、という結論になりました。

「配列だからベクタ」説

割り込みベクタテーブルはx86では256個の要素を持つ配列です。C++で動的配列を意味するクラスがstd::vectorであるように、配列のことをベクタと呼ぶ用法が一般にあります。

しかしIntel SDMには次のように表記されており、どうやら配列全体のことをベクタと呼ぶのではなく、個々の要素をベクタと呼んでいます。

To aid in handling exceptions and interrupts, each architecturally defined exception and each interrupt condition requiring special handling by the processor is assigned a unique identification number, called a vector number.

Intel® 64 and IA-32 Architectures Software Developer’s Manual, Volume 3, "6.2 Exception And Interrupt Vectors" より

Intel SDMで個々の要素をベクタと呼んでいる、と指摘してくれたhikaliumさん、ありがとうございます!)

ベクタを辞書で引く

"Vector"という語は動詞用法でこんな意味がありました。

【動詞】 【他動詞】 〈飛行機・ミサイルなどを〉電波によって誘導する.

https://ejje.weblio.jp/content/vector

割り込みが発生した際、割り込みに対応する小さな処理(割り込みハンドラ)へと誘導するという意味がありそうです。

ベクタの初出

ベクタという語がIntel CPUの仕様書で初めて出てきた瞬間を探すというアプローチを、akachochinさんがしてくださいました。

Intel 8086の仕様書に"vectored"という語が登場しているという指摘: https://twitter.com/akachochin/status/1121984630591148032?s=19

対してIntel 8080の仕様書には"vector"は登場しないという指摘: https://twitter.com/akachochin/status/1121985775996792837?s=19

ベクタの用法

ということで、恐らく「ベクタ」はポインタのような意味で使われていることに間違いは無いでしょう。ベクタもポインタも矢印のイメージで説明されることからも、両者は似ている概念と言えます。ただし、ベクタという語が使われるのは割り込みの文脈のみで、通常のポインタのことをベクタと呼ぶのは聞いたことがありません。

また、ベクタは「割り込みの種類を表す整数」の意味で使われることもあります。Intel SDMでは、整数を「ベクタ番号(vector number)」と呼んでいますが、文脈によっては単に「ベクタ」と言っても番号のことを意味することがあります。

割り込みベクタとは、割り込みの要因を示す番号のことである。

https://www.weblio.jp/content/%E5%89%B2%E3%82%8A%E8%BE%BC%E3%81%BF%E3%83%99%E3%82%AF%E3%82%BF より