3.4 リンカのデマンドページングファイルの作成に対するサポート

リンカにはメモリマップされたファイルを作成できる機能が用意されています。

仮想メモリをサポートするオペレーティングシステムでは、ELF ファイルをファイルのロード処理を行うアドレス空間にマップすることで、ELF ファイルをロードできます。ファイルにマップされているページ内の仮想アドレスにアクセスすると、オペレーティングシステムによって、そのページがディスクからロードされます。この方法で使用する ELF ファイルは、特定の形式に準拠している必要があります。
デマンドページングモードを有効にするには、--paged コマンドラインオプションを使用します。これにより、効率的にデマンドページングを行うことができる ELF ファイルが生成されます。

--sysv オプションで生成された ELF ファイルは、既にデマンドページングに準拠しています。--arm_linux を使用しても、--sysv を指定したことになります。
デマンドページング ELF ファイルの基本的な制約を以下に示します。
  • 出力セクションのロードアドレスと実行アドレスに違いがない。
  • すべての PT_LOAD プログラムヘッダーには、オペレーティングシステムのページサイズの最小境界整列 pt_align が存在する。
  • すべての PT_LOAD プログラムヘッダには、pt_align を法(モジュロ)として仮想アドレス(pt_addr)と合同であるファイルオフセット align が存在する。
--paged を指定する場合は、以下のような状態になります。
  • リンカによって、実行領域のベースアドレスからプログラムヘッダが自動的に生成される。1 つのロード領域に 1 つのプログラムヘッダが生成されるという通常の状態は維持されなくなる。
  • オペレーティングシステムのページサイズが --pagesize コマンドラインオプションによって制御される。
  • リンカが、最初の PT_LOAD プログラムヘッダに ELF ヘッダとプログラムヘッダを配置しようとする(空間が使用できる場合)。

これは、デマンドページングを行うスキャッタファイルの例です。
LR1 GetPageSize() + SizeOfHeaders()
{
    ER_RO +0
    {
        *(+RO)
    }
    ER_RW +GetPageSize()
    {
        *(+RW)
    }
    ER_ZI +0
    {
        *(+ZI)
    }
}
関連する概念
7.9 ページ境界での領域の作成
7.1 スキャッタロードメカニズム
関連する参考文書
12.7 --arm_linux
12.125 --scatter=filename
8.6.9 GetPageSize() 関数
8.6.10 SizeOfHeaders() 関数
12.104 --paged
12.105 --pagesize=pagesize
12.151 --sysv
非機密扱いPDF file icon PDF 版ARM DUI0474LJ
Copyright © 2010-2015 ARM.All rights reserved.