4ae0a12bcb
Makefile yet as John needs to figure out ${LANG}-based doc building. Please put this in 2.2, or the translators are going to kill me. ;) Submitted by: doc-jp@jp.freebsd.org (The FreeBSD Japanese Doc Team) Reviewed by: doc-jp@jp.freebsd.org (mutual review)
62 lines
2.5 KiB
Plaintext
62 lines
2.5 KiB
Plaintext
<!-- $Id$ -->
|
|
<!-- The FreeBSD Japanese Documentation Project -->
|
|
<!-- Original revision: 1.7 -->
|
|
|
|
<sect><heading>PC におけるメモリの利用<label id="memoryuse"></heading>
|
|
|
|
<p><em>原作: &a.joerg;.<newline>
|
|
16 Apr 1995.</em>
|
|
<p><em>訳: &a.tomo;. <newline>
|
|
29 Oct 1996.</em>
|
|
|
|
<em>FreeBSDがi386プラットフォーム上でどのようにメモリを使うかに
|
|
ついての説明です. </em>
|
|
|
|
ブート部分は<tt>0:0x7c00</tt>にロードされ, すぐに自分自身を
|
|
<tt>0x7c0:0</tt>に移します. (これは手品ではなく, 単なる<tt>%cs</tt>
|
|
セレクタのための調節であり, <tt>ljmp</tt>により行われます. )
|
|
|
|
それから最初の15セクタを<tt>0x10000</tt>(biosbootのMakefileのなかの
|
|
BOOTSEG部分)にロードし, 作業領域のスタックを<tt>0x1fff0</tt>以下に
|
|
セットします. このあと, boot2 に飛びます. つまり, boot1 自身と
|
|
(ダミーの) DOS パーティションテーブルを飛び越えて, %csセレクタを
|
|
調節します---この時点ではまだ16ビットモードです.
|
|
|
|
boot2はブートファイルを要求し, <tt>a.out</tt>ヘッダを調べます.
|
|
<tt>0x00ffffff</tt>によってファイルエントリポイントを
|
|
(通常は<tt>0xf0100000</tt>に)マスクし, ロードします.
|
|
このため, 通常のロードポイントは1MB(<tt>0x00100000</tt>)になります.
|
|
ロードしている間, リアルモードでBIOSを使うため, ブートコードは,
|
|
リアルモードとプロテクトモードの間を行ったり来たりします
|
|
(訳注: これは, BIOSがリアルモード用に書かれていて,
|
|
ロードすべき領域がリアルモードではアクセスできない1MBより上位の
|
|
アドレスであることから, ブートコードがリアルモードと
|
|
プロテクトモードを切り替えながら動作するためです).
|
|
|
|
ブートコード自身はプロテクトモードで<tt>%cs</tt>と<tt>%ds/%es</tt>用に
|
|
セグメントセレクタ<tt>0x18</tt>と<tt>0x20</tt>を使い,
|
|
リアルモードに戻るのに<tt>0x28</tt>を使います.
|
|
最終的にカーネルはアドレス空間全体をカバーできるようなダミーの
|
|
ディスクリプタを参照して<tt>%cs</tt> <tt>0x08</tt>と
|
|
<tt>%ds/%es/%ss</tt> <tt>0x10</tt>でスタートします.
|
|
|
|
カーネルはそのロードポイントで起動されます.
|
|
別の(高位)アドレスにリンクされるので,
|
|
ページテーブルやページディレクトリなどが適切に設定され,
|
|
ページングが有効になり, カーネルがリンクされたアドレスで
|
|
動作するようになるまでは, カーネルはロードアドレスからの
|
|
相対アドレス (PIC: position independent code) を用いて
|
|
実行されなければなりません.
|
|
|
|
<em>寄贈: &a.davidg;.<newline>
|
|
16 Apr 1995.</em>
|
|
|
|
カーネルの BSS セグメントの直後の物理ページ (実メモリ) に
|
|
proc0 (訳注: プロセス番号 0, swapper) のページディレクトリや
|
|
ページテーブル, Uページが配置されます.
|
|
仮想記憶機構が初期化された少しあと,
|
|
<tt>0x1000-0x9ffff</tt>の実メモリとカーネル
|
|
(text + data + bss + 上記の proc0 に関わるもの + その他)
|
|
の後ろの実メモリは, 通常の仮想記憶ページの形で利用可能となり,
|
|
グローバルな空きページリストに追加されます.
|