[論文レビュー] Instruction Sequences with Indirect Jumps
本稿は、リターン命令などの間接ジャンプを含む命令列の形式的意味論を、射影意味論を用いて導入し、スタックやレジスタファイルなどのメモリデバイスを活用して、間接ジャンプを含まない同等のプログラムに翻訳することで、それらを扱う。主な貢献は、有限なメモリ部品との相互作用を通じて、プログラムの振る舞いを保持しつつ間接ジャンプを体系的かつ数学的に根拠づけて排除する方法を提供することであり、実行制約下でも正しさを保証する。
We study sequential programs that are instruction sequences with direct and indirect jump instructions. The intuition is that indirect jump instructions are jump instructions where the position of the instruction to jump to is the content of some memory cell. We consider several kinds of indirect jump instructions. For each kind, we define the meaning of programs with indirect jump instructions of that kind by means of a translation into programs without indirect jump instructions. For each kind, the intended behaviour of a program with indirect jump instructions of that kind under execution is the behaviour of the translated program under execution on interaction with some memory device.
研究の動機と目的
- 再帰的メソッド呼び出しに使用されるリターン命令などの間接ジャンプ命令を含む順序実行プログラムの形式的で意味論に基づく理解を提供すること。
- 複雑な数学的構成に依存せずに、射影意味論を用いて間接ジャンプをプログラム意味論に組み込む挑戦に取り組むこと。
- スタックやレジスタファイルなどの適切なメモリデバイスを組み合わせることで、間接ジャンプが体系的に排除可能であることを示すこと。
- 特に有限なメモリデバイスを含む実行環境の部品とのプログラムの振るまいとの相互作用を形式化し、現実の実行制約をモデル化すること。
提案手法
- 各タイプの間接ジャンプ(例えば、絶対ジャンプのリターン、リターン命令など)に対して、間接ジャンプを含むプログラムを同等の間接ジャンプを含まないプログラムに写像する翻訳関数を定義する。
- 翻訳は、抽象的な振るまいモデルに依存するのではなく、メモリデバイスとの相互作用を通じてプログラムの意味を定義する射影意味論に依存する。
- メモリデバイスは、スタックやレジスタファイルとして、状態ベースのアプローチを用いてその動作を記述することでモデル化される。
- 間接ジャンプを含むプログラムの振るまいは、対応するメモリサービスと連携して実行された翻訳バージョンの振るまいとして定義される。
- この方法により、翻訳されたプログラムが、スタックオーバーフローまたは空のスタック状態がデッドロックの原因となるなど、意図した制御フローを正しくシミュレートすることが保証される。
- このアプローチは、PGLCおよびPGLDという2つのプログラム表記に、間接ジャンプ命令を拡張して適用され、さらにリターンジャンプ命令および二重間接ジャンプに対しても適合されている。
実験結果
リサーチクエスチョン
- RQ1リターン命令などの間接ジャンプ命令を、複雑な振るまいの抽象化に依存せずに、命令列の中で形式的にモデル化する方法は何か?
- RQ2間接ジャンプを含むプログラムを、それと同等の振るまいを保ちつつ、それらを含まないプログラムに翻訳する正しい方法は何か?
- RQ3スタックやレジスタファイルなどの有限なメモリデバイスは、間接ジャンプを含むプログラムの意味論と実行にどのように影響を与えるか?
- RQ4適切なメモリサービスを備えた状況下で、間接ジャンプの使用を体系的に排除可能か? もしそうなら、どのような条件下で可能か?
- RQ5このような翻訳に伴う計算コスト(特に、プログラム長およびステップ数の増加)は何か? そして、それらを最小限に抑えることは可能か?
主な発見
- 本稿は、スタックやレジスタファイルなどの適切なメモリデバイスと連携することで、間接ジャンプ命令を翻訳によって排除可能であることを確立している。
- 間接ジャンプを含むプログラムの振るまいは、対応するメモリサービスと連携して実行された翻訳バージョンの振るまいとして形式的に定義され、意味論的同等性が保証される。
- リターンジャンプ中にスタックオーバーフローが発生するとデッドロックに至るが、これは有限なメモリに起因する正しくモデル化された結果であり、誤った使用とは見なされない。
- リターン命令時にスタックが空である場合もデッドロックに至るが、これは誤った使用を示しており、その点が意味論に形式的に捉え込まれている。
- 翻訳プロセスによりプログラム長およびステップ数が増加するが、探索戦略の最適化(例えば、線形探索の代わりに二分探索を使用)により、増加を軽減できる。
- 翻訳後、最後の命令が基本命令、正のテスト命令、または負のテスト命令である場合、終了シーケンスを追加することで、プログラムが最後の命令後に正しく終了することが保証される。
より良い研究を、今すぐ始めましょう
論文設計から論文執筆まで、研究時間を劇的に削減しましょう。
クレジットカード登録不要
このレビューはAIが作成し、人間の編集者が確認しました。