0から作るOS開発 Vol.5 カーネル編 物理メモリー管理
価格: ¥0
C言語で0から作るOSを開発について説明していきます。このシリーズではカーネルの開発について説明しています。
今回は、物理メモリーの管理について見ていきます。『0から作るOS開発 Vol.2 カーネルローダー編 0から作るカーネルローダー』を改造して、物理メモリーのサイズや使用可能領域をBIOSのサービス割り込みを利用して取得します。そして、取得したメモリー領域の情報(メモリーマップ)をマルチブート仕様になるべくあった形にしてパラメーターとしてカーネルに渡します。カーネルでは、受け取ったメモリーマップに基づいて簡単なビットマップを使って物理メモリーを管理していきます。
【注意】本書では物理メモリー管理に最低限必要な部分のマルチブート仕様しか見て行きません。マルチブート仕様の詳細について調べたい場合は別途仕様書を参照していく必要があります。
[目次]
前回までの内容
メモリー
アドレッシングモード
メモリーの制御
物理メモリーの管理
メモリー情報の取得
BIOSからメモリー情報を取得する
ローメモリーのサイズ取得 INT 0x12命令
拡張メモリーサイズ取得(0x88機能) INT 0x15命令
拡張メモリーサイズ取得(0xE801、0xE881機能) INT 0x15命令
メモリーマップ取得(0xE820機能) INT 0x15命令
メモリーマップ情報(アドレス範囲ディスクリプター:Address Range Descriptor)
メモリーマップ情報を定義する
メモリーマップ情報の取得
マルチブート仕様
カーネル起動時のCPUのレジスター
ブート情報
カーネルローダーでブート情報を定義する
カーネルローダーでメモリーマップ情報を取得する
カーネルにメモリーマップ情報を渡す
カーネルでメモリーマップ情報を引数として受け取る
物理メモリー管理
メモリー管理
メモリー管理の方法
ビットマップでメモリーを管理する
ビットマップに使用するメモリー領域を確保する
ビットマップを操作する
ビットマップに1をセットする
ビットマップをクリアーする
ビットマップがセットされているか調べる
割り当て可能なメモリーブロックをビットマップから探す
物理メモリーの割り当てと解放