コンピュータ科学

ジャンプテーブル:計算機プログラムの制御方式と応用

計算機プログラムの制御方式であるジャンプテーブルの仕組み、高級言語での実装、OSやデバイスドライバでの応用について解説する百科事典記事です。

📌 主なポイント

  • ジャンプテーブルは、ジャンプ先のメモリアドレスをあらかじめ表の形式で記憶し、参照して分岐する計算機プログラムの制御方式である。
  • Pascalのcase文など、一部の高級言語の構文設計においてジャンプテーブルによる効率的な実装が考慮されている。
  • Unix系OSのダイナミックリンクや仮想ファイルシステムのシステムコール処理において、間接的なルーチン呼び出しの仕組みとして応用されている。

ジャンプテーブルは、計算機プログラムにおける制御フローの分岐処理を実現するための方式の一つである。ジャンプ先のメモリアドレスをあらかじめ表(テーブル)の形式で記憶しておき、処理の際にその表を参照して分岐を行う仕組みを指す。

概要と基本原理

プログラムの実行時に複数の分岐先が存在する場合、条件分岐命令を順次実行する代わりに、インデックスや変数の値をもとにジャンプテーブルの該当エントリを直接参照する。これにより、多数の分岐先がある状況でも効率的な処理が可能となる。

プログラミング言語における実装

一部の高級言語では、ジャンプテーブルによる効率的な実装を前提とした構文設計がなされてきた。例えば、Pascal言語のcase文において、変数の型に順序型のみを許容している仕様はその一例である。

オペレーティングシステムにおける応用

ジャンプテーブルおよびそれに類似した構造は、OSの内部機構やライブラリの動的結合において広く利用されている。

ダイナミックリンク

Unix系オペレーティングシステムのダイナミックリンクライブラリでは、ロードされるアドレスが実行時に固定されないという特徴がある。そのため、一種のテーブルジャンプを介してライブラリ内のサブルーチンへアクセスする仕組みが採られている。プログラム起動当初はローダーへ誘導するよう設定されているジャンプテーブルのエントリは、初回呼び出し時の解決を経て直接ライブラリルーチンを指すよう書き換えられる場合がある。

デバイスドライバと仮想ファイルシステム

カーネルモードで動作するデバイスドライバやファイルシステムでは、カーネル本体とのインターフェイス実装にテーブルジャンプの概念が活用されている。open()read()などのシステムコールは、多様なデバイスやファイルシステムに対応するため、仮想ファイルシステムなどが管理するジャンプテーブルを介して個別の処理ルーチンを呼び出す。これはオブジェクト指向におけるカプセル化やポリモーフィズムの概念と類似した構造を持っている。

よくある質問

ジャンプテーブルとは何ですか?
ジャンプ先のメモリアドレスをあらかじめ表の形式でメモリに記憶しておき、それを参照してプログラムの実行位置を分岐させる制御方式、およびそのために使用する表のことです。
どのような場面で使用されますか?
多数の分岐先があるプログラムの制御、高級言語の条件分岐の実装、Unix系OSにおけるダイナミックリンクライブラリの呼び出し、デバイスドライバや仮想ファイルシステムのインターフェイス実装などに使用されます。

関連記事

機械語スレッデッドコードダイナミックリンクシステムコール

参考文献

ウィキペディア日本語版「ジャンプテーブル」(2021年2月取得の版を基に再構成)