
一般的なコンピューティングの意味で、オーバーレイとは「プログラムコードやその他のデータのブロックをメインメモリに転送し、すでに格納されているものを置き換えるプロセス」を意味します。[1]オーバーレイは、プログラムをコンピュータのメインメモリよりも大きくすることができるプログラミング方法です。[2]組み込みシステムでは、システムオンチップの内部メモリである物理メモリの制限と仮想メモリ機能の欠如のため、通常オーバーレイが使用されます。
使用法
オーバーレイ プログラムを構築するには、プログラムをオーバーレイまたはリンクと呼ばれる自己完結型のオブジェクト コードブロックに手動で分割し、通常はツリー構造で配置します。[b]同じ深さレベルにある兄弟セグメントは、オーバーレイ領域[c]または宛先領域と呼ばれる同じメモリを共有します。オーバーレイ マネージャーは、オペレーティング システムの一部またはオーバーレイ プログラムの一部であり、必要なときに外部メモリから必要なオーバーレイを宛先領域に読み込みます。これは自動または明示的なコードによって行われます。多くの場合、リンカーはオーバーレイをサポートします。[3]
例
次の例は、構造を示すためにインデントされた単一の領域を含むオーバーレイ プログラムをリンクするように OS/360 リンケージ エディターに指示する制御ステートメントを示しています(セグメント名は任意です)。
SYSLIB(MOD1) をインクルードする
SYSLIB(MOD2) をインクルードする
オーバーレイA
SYSLIB(MOD3) をインクルードする
オーバーレイAA
SYSLIB(MOD4) をインクルードする
SYSLIB(MOD5) をインクルードする
オーバーレイAB
SYSLIB(MOD6) をインクルードする
オーバーレイB
SYSLIB(MOD7) をインクルードする
+--------------+
| ルートセグメント |
| MOD1、MOD2 |
+--------------+
|
+----------+-----------+
| |
+---------------+ +---------------+
| オーバーレイ A | | オーバーレイ B |
| MOD3 | | MOD7 |
+---------------+ +---------------+
|
+--------+--------+
| |
+---------------+ +---------------+
| オーバーレイ AA | | オーバーレイ AB |
| MOD4、MOD5 | | MOD6 |
+---------------+ +---------------+
これらのステートメントは、ルートと呼ばれる永続的に常駐するセグメントと、MOD2 の終了後にロードされる 2 つのオーバーレイ A と B で構成されるツリーを定義します。オーバーレイ A 自体は、AA と AB という 2 つのオーバーレイ セグメントで構成されます。実行時には、オーバーレイ A と B は両方とも同じメモリ位置を使用します。AA と AB は両方とも、MOD3 の終了後に同じ位置を使用します。
ルートと特定のオーバーレイ セグメント間のすべてのセグメントは、パスと呼ばれます。
アプリケーション
2015 年現在、ほとんどのビジネス アプリケーションは、仮想メモリ[アップデート]を備えたプラットフォームで実行することを想定しています。このようなプラットフォームの開発者は、プログラムのワーキング セットが使用可能な物理メモリを超えない限り、メモリ制約が存在しないかのようにプログラムを設計できます。最も重要なことは、オーバーレイ サイズによって制約されたステップに処理を強制するという設計上の困難さを回避して、アーキテクトが解決すべき問題に集中できることです。したがって、設計者は、プログラマがサイズをあまり制御できない高水準プログラミング言語 (例: Java、C++、Smalltalk ) を使用できます。
それでも、オーバーレイは組み込みシステムでは有用である。[4]組み込みシステムで使用される一部の低コストプロセッサは、メモリ管理ユニット(MMU)を提供しない。さらに、多くの組み込みシステムはリアルタイムシステムであり、オーバーレイはページングよりも確実な応答時間を提供する。たとえば、スペースシャトル プライマリアビオニクスシステムソフトウェア(PASS)はプログラムされたオーバーレイを使用している。[5]
仮想メモリを備えたプラットフォームでも、コーデックなどのソフトウェア コンポーネントは、必要に応じてロードおよびロードできる程度まで分離される場合があります。
歴史的使用
IBMはFORTRAN II でチェーンジョブ[6]の概念を導入しました。プログラムは新しいリンクをロードするためにCHAINサブルーチンを明示的に呼び出す必要があり、新しいリンクはFortran COMMON領域を除く古いリンクのストレージをすべて置き換えました。
IBMはIBSYS / IBJOBに、ツリー構造やCALL処理の一部としてのリンクの自動ロードなど、 より一般的なオーバーレイ処理[7]を導入しました。
OS/360 では、IBM は IBLDR のオーバーレイ機能を拡張し、オーバーレイ プログラムがそれぞれ独自のオーバーレイ ツリーを持つ独立したオーバーレイ領域を持つことができるようにしました。また、OS/360 には、1024 バイトの SVC 一時領域を使用する、 一時SVCルーチン用のよりシンプルなオーバーレイ システムもありました。
家庭用コンピュータの時代には、オペレーティングシステムとそれが動作するコンピュータシステムの多くに仮想メモリがなく、現在の標準からするとRAMが非常に少なかったため、オーバーレイが人気でした。オリジナルのIBM PCは、構成に応じて16Kから64Kでした。オーバーレイは、コモドールBASICでグラフィック画面をロードするための一般的な手法でした。[2]
「1980 年代のいくつかのDOSリンカーは、25 年前のメインフレーム コンピュータで使用されていたものとほぼ同じ形式で [オーバーレイ] をサポートしていました。」[4] [8]メモリ オーバーレイを含む バイナリ ファイルの拡張子は、事実上の標準である.OVL [8]または.OVR [9]でした (ただし、後続のファイルには.000、.001などの数値のファイル拡張子も使用されました[10] )。このファイル タイプは、WordStar [11] (メインの実行可能ファイルWS.COMとオーバーレイ モジュールWSMSGS.OVR、WSOVLY1.OVR、で構成さMAILMERGE.OVRれ、SPELSTAR.OVR" fat " オーバーレイ ファイルはCP/M-86および MS-DOSへの移植でもバイナリが同一でした[12] )、dBase、[13]、Enable SoftwareのEnable DOS オフィス オートメーション ソフトウェア パッケージなどで使用されていました。BorlandのTurbo Pascal [14] [15]およびGFA BASICコンパイラは、.OVL ファイルを生成できました。
参照
注記
- ^これは、 MVTストレージ管理における「領域」という用語とは関係ありません。
- ^ OS/360および後継機種では、それぞれが完全なオーバーレイツリーを含む複数の領域[a]が存在する場合があります。
- ^ 命名法はシステムによって異なります。たとえば、OS/360では、 リージョンはオーバーレイ ツリー全体を指します。
参考文献
- ^ “Oxford Dictionaries”. 2015-11-26. 2022-07-10時点のオリジナルよりアーカイブ。2022-07-10閲覧。
- ^ ab Butterfield, James "Jim"編 (1986 年 6 月)。「パート 4: オーバーレイ」。Commodore プログラムのロードとリンク。p. 74。2022 年 7 月 10 日のオリジナルからアーカイブ。2022年 7 月 10 日に取得。
これにより、実際にはコンピューターのメモリ量よりもはるかに大きなプログラムを実行できます。
{{cite book}}:|magazine=無視されました (ヘルプ) - ^ 「GNU リンカーのドキュメント: オーバーレイの説明」 2008 年 6 月 3 日。2022 年 6 月 23 日時点のオリジナルよりアーカイブ。2022年 7 月 10 日閲覧。[1]
- ^ ab Levine, John R. (2000). Linkers & Loaders. Morgan Kaufmann Publishers . p. 177. ISBN 1-55860-496-0. 2022年4月6日時点のオリジナルよりアーカイブ。2022年7月10日閲覧。[2]
- ^ National Research Council (1993 年 11 月) [1993 年 6 月]。スペースシャトル飛行ソフトウェア開発プロセスの評価 (第 2 版)。ワシントン DC、米国:全米科学アカデミー、全米アカデミー出版。doi :10.17226/2222。hdl : 2060 /19930019745。ISBN 978-0-309-04880-4. LCCN 93-84549 . 2012年10月29日閲覧。(208ページ)
- ^ 「第12章:チェーンジョブ」(PDF)。IBM 7090/7094プログラミングシステム–FORTRAN IIプログラミング(PDF)。米国ニューヨーク州ポキプシー:IBMコーポレーション。1963年8月。pp.34–35。フォームC28-6054-4ファイル番号7090-25。2022年3月15日にオリジナルからアーカイブ(PDF)。2022年7月10日閲覧。
{{cite book}}:|work=無視されました (ヘルプ) (52 ページ) - ^ IBM 7090/7094プログラミング・システム – IBJOBプロセッサー – IBLDRのオーバーレイ機能(PDF) (第1版)。米国ニューヨーク州ポキプシー:IBMコーポレーション。1963年5月。フォームC28-6331、ファイル番号7090-27。 2022年3月15日時点のオリジナルからアーカイブ(PDF) 。 2021年12月26日閲覧。
{{cite book}}:|work=無視されました (ヘルプ) (8 ページ) - ^ ab Elliott, John C. (2012-06-05) [2000-01-02]. 「PRL ファイル形式」. seasip.info . 2020-01-26 にオリジナルからアーカイブ。 2020-01-26に取得。
[…] PRL ファイルは
、
MP/M
および
CP/M Plusで
.COM ファイル
以外のさまざまなモジュールに使用される
再配置可能な
バイナリ ファイルです。このファイル形式は、
Amstrad PCW
の FID ファイルにも使用されます。PRL のバージョンを使用するファイル形式には、SPR (System PRL)、RSP (Resident System Process) などがあります。LINK-80 は、PRL ヘッダーを持つが再配置可能ではない OVL (オーバーレイ) ファイルも生成できます。GSXドライバー
はPRL 形式であり、
Resident System Extensions
(.RSX)も同様です
。 […]
[3]
- ^ ドーメン、ノーバート (1990)。 「Platz schaffen durch Überlagern - Turbo Pascal のオーバーレイ Strukturen」。mc(ドイツ語)。 Vol. 90、いいえ。 12. 124–130 ページ。 2022-08-04 のオリジナルからアーカイブされました。2022-08-04に取得。[4]
- ^ Gavin, Bruce. 「プログラムオーバーレイの作成」。Pearson, Dave (編)。Turbo Pascal - Norton ガイド。v3. p. 149。2022-08-04 のオリジナルからアーカイブ。2022-08-04に取得。
- ^ Mabbett, Alan (1985). WordStar、MailMerge + SpellStarを使い始める。ケンブリッジ大学出版局。ISBN 0-521-31805-X。
- ^ Necasek, Michal (2018-01-30) [2018-01-28, 2018-01-26]. 「WordStar Again」. OS/2 Museum . 2019-07-28 にオリジナルからアーカイブ。2019-07-28に取得。
[…] このような違いが疑われる理由は、バージョン 3.2x が
CP/M-86もサポートしていたためです (オーバーレイは
DOS
と CP/M-86で同一で
、メインの実行ファイルのみが異なります) […] .OVR ファイルは DOS と CP/M-86 で 100% 同一で、
実行時にフラグ (
WordStar 3.20 の
マニュアルに明確に示されています) で切り替えます
[…] WordStar の OS インターフェイスは非常に狭く、抽象化されています […] WordStar 3.2x のオーバーレイは、DOS バージョンと CP/M-86 バージョンで 100% 同一です。 INT 21h (DOS) と INT E0h (CP/M-86) の呼び出しを選択するランタイム スイッチがあります。WS.COM は DOS と CP/M-86 で同じではありませんが、それほど大きな違いはないと思われます。[…]
- ^ Sidnam-Wright, Liz; Stevens, Brad, eds. (1990-07-31). 「Ashton-Tate が dBASE IV バージョン 1.1 を出荷」(PDF)。米国カリフォルニア州トーランス: Ashton Tate。p. 2-2-2。2017-04-04にオリジナル(PDF)からアーカイブ。2014-02-13に取得。バージョン
1.1 には、オーバーレイをより効率的に処理する新しい動的メモリ管理システム (dMMS) があります。製品に必要なメモリが少なくなり、アプリケーションの空き領域が増えます。[…] 製品のメモリ要件が 450K RAM のみに低下したため、ネットワークのサポートにハードウェア メモリを追加する必要がなくなり、ネットワーク サポートが向上しました。[…] オーバーレイに依存する dBASE IV の領域を高速化することで、新しい dMMS は、コントロール センターでの作業や、メニューやウィンドウを使用するプログラムでのパフォーマンスを向上させます。
(5ページ) - ^ ハーシェル、ルドルフ;ディーテリッヒ、エルンスト=ヴォルフガング (2000)。Turbo Pascal 7.0 (ドイツ語) (第 2 版)。 R. オルデンブール フェルラーク。 p. 249.ISBN 3-486-25499-5。
- ^ ハンス・ゲオルグ、エッセル (2009 年 6 月)。 「第6章。Speicherverwaltung und Dateisysteme - Teil 5: Nicht-zusammenhängende Speicherzuordnung」。 Betriebssysteme I (PDF) (ドイツ語)。ミュンヘン、ドイツ: Hochschule München。2022-05-08 にオリジナルからアーカイブ(PDF)されました。2014 年 2 月 13 日に取得。(9ページ)
さらに読む
- IBM OS リンケージ エディターおよびローダー - プログラム番号 360S-ED-510、360S-ED-521、360S-LD-547 (PDF)。リリース 21 (第 10 版)。米国ニューヨーク州ホワイト プレーンズ: IBM Corporation。1972年 3 月 [1972 年 1 月]。注文番号 GC28-6538-9、ファイル番号 S360-31。2022年 7 月 10 日にオリジナルからアーカイブ(PDF)されました。
{{cite book}}:|work=無視されました (ヘルプ) (2+244+4 ページ) - Groeber, Marcus; Di Geronimo, Jr., Edward "Ed"; Paul, Matthias R. (2002-03-02) [2002-02-24]. 「RBIL62 の GEOS/NDO 情報?」.ニュースグループ: comp.os.geos.programmer. 2019-04-20 にオリジナルからアーカイブ。2019-04-20に取得。 […]
Geos が
16 の割り込みを必要とする理由は、コードのサイズを変更せずに、セグメント間 ("far") 関数呼び出しを割り込みに変換するスキームが使用されるためです。これを行う理由は、"何か" (カーネル) が Geos アプリケーションによって行われたすべてのセグメント間呼び出しにフックし、適切なコード セグメントが仮想メモリからロードされ、ロックダウンされるようにするためです。DOS用語で言えば、これはオーバーレイ ローダーに相当しますが、コンパイラやアプリケーションからの明示的なサポートを必要とせずに追加できます。次のようなことが起こります: […] 1. リアル モード コンパイラは次のような命令を生成します: CALL <segment>:<offset> -> 9A <oflow><offhigh><seglow><seghigh> ここで、<seglow><seghigh> は通常、コードが配置されているアドレスに応じてロード時に修正する必要があるアドレスとして定義されます。 […] 2. Geos リンカーはこれを別のものに変換します: INT 8xh -> CD 8x […] DB <seghigh>,<oflow>,<offhigh> […] これも 5 バイトなので、「インプレース」で修正できることに注意してください。ここで問題となるのは、割り込みには 2 バイトが必要ですが、CALL FAR 命令には 1 バイトしか必要ないことです。その結果、32 ビット ベクター (<seg><ofs>) を24 ビットに圧縮する必要があります。 […] これは 2 つの方法で実現されます。まず、<seg> アドレスはセグメントへの「ハンドル」としてエンコードされ、その最下位ニブルは常に 0 です。これにより 4 ビットが節約されます。さらに […] 残りの 4 ビットは割り込みベクターの下位ニブルに入り、INT 80h から 8Fh までのいずれかが作成されます。 […] これらすべてのベクターの割り込みハンドラーは同じです。3.5 バイト表記からアドレスを「アンパック」し、セグメントの絶対アドレスを検索し、仮想メモリのロード処理を行った後に呼び出しを転送します。呼び出しからの戻りも、対応するロック解除コードを通過します。 […] 割り込みベクターの下位ニブル (80h~8Fh) には、セグメント ハンドルのビット 4 から 7 が保持されます。セグメント ハンドルのビット 0 から 3 は (Geos ハンドルの定義により) 常に 0 です。[…] すべての Geos API は「オーバーレイ」スキームを通じて実行されます […]: Geos アプリケーションがメモリにロードされると、ローダーはシステム ライブラリ内の関数の呼び出しを対応する INT ベースの呼び出しに自動的に置き換えます。いずれにしても、これらは一定ではなく、ライブラリのコード セグメントに割り当てられたハンドルに依存します。[…] Geosは当初、非常に早い段階で保護モードに変換することを意図していました[…]、リアルモードで「レガシー オプション」のみであるため […] アセンブリ コードのほぼすべての行がこれに対応しています […]
外部リンク
- http://computer-programming-forum.com/29-pascal/45df7513ab22cf7e.htm
