C言語で0から作るOSを開発について説明していきます。このシリーズではカーネルの開発について説明しています。 今回は動的メモリー確保を行うkmallocとその基盤となるスラブアロケーターについて説明していきます。 [第3版改訂] プログラムソースのフォーマットを変更しました。 [目次] 前回までの内容 ヒープ(Heap) 固定長メモリーブロック バディ(相棒)システム スラブアロケーター(Slab Allocator) オブジェクトとスラブとキャッシュ スラブアロケーターのインターフェイス スラブアロケーターのフロントエンド スラブアロケーターのバックエンド スラブアロケーターのインターフェイス関数 ”キャッシュ”の生成 kmem_cache_create ”キャッシュ”の割り当て kmem_cache_alloc ”キャッシュ”の解放 kmem_cache_free ”キャッシュ”の破壊 kmem_cache_destroy ”キャッシュ”の拡大 kmem_cache_grow ”キャッシュ”の刈り取り kmem_cache_reap スラブアロケーターのインターフェース使用例 スラブ kmem_bufctlの定義 スラブのレイアウト(小さなサイズのオブジェクトの場合) スラブのレイアウト(大きなサイズのオブジェクトの場合) スラブの管理 スラブの定義 キャッシュ キャッシュ kmem_cacheの定義 スラブアロケーターの実装 キャッシュの生成 kmem_cache_create関数の実装 (フロントエンド) 1.kmem_cacheの生成 allocKmemCache関数 2.kmem_cacheの初期化 initKmemCache関数 3.スラブの計算 calcSlabSize 4.キャッシュをキャッシュリストに追加 5.初期化したキャッシュ構造体を返す キャッシュの割り当て kmem_cache_alloc関数の実装 (フロントエンド) 1.”一部割り当て済み”のスラブがあればそこからオブジェクトを割り当てる 2. 1.以外の場合で、”全部が解放済み”のスラブがない場合 3. 1.以外の場合、”全部が解放済み”のスラブがあればそこからオブジェクトを割り当てる キャッシュの解放 kmem_cache_free関数の実装 (フロントエンド) 1.オンスラブであれば、そのままスラブ構造体のアドレスを取得する 2.オフスラブの場合、”一部が割り当て済み”、”全部が割り当て済み”リストのスラブからスラブ構造体のアドレスを取得する。 3.解放するオブジェクトが所属するスラブのkmem_bufctlを更新する キャッシュの破壊 kmem_cache_destory関数の実装 (フロントエンド) キャッシュの拡大 kmem_cache_grow関数の実装 (バックエンド) 1.オフスラブの場合、スラブとkmem_bufctlのメモリーはkmallocから割り当て、オブジェクト専用のページを別途割りてます。 2.オンスラブの場合1ページ丸ごとスラブに割りてます。 3.スラブ構造体とキャッシュの一部を初期化します。 キャッシュの刈り取り kmem_cache_reap関数の実装 (バックエンド) 1.スラブ構造体のアドレスを取得します。 2.オンスラブの場合、スラブに割り当てていた1ページを解放します。 3.オフスラブの場合、オブジェクトに割り当てていたページとkfreeでスラブ管理情報を解放します。 kmallocとkfree スラブアロケーターの活用 汎用オブジェクトの作成とスラブアロケーターの初期化 kmem_cacheキャッシュの確保 汎用オブジェクトの確保 スラブアロケーターの初期化 kmallocの実装 kfreeの実装 ここまででで実装してきたスラブアロケーターの改良 ページとの対応付け オブジェクトのアライメント カラーリング ハードウェアキャッシュの概略 スラブアロケーターのカラーリング 不要となったスラブの解放
Populaire auteurs
Cram101 Textbook Reviews (948) J.S. Bach (447) Wolfgang Amadeus Mozart (305) Collectif (268) Schrijf als eerste een recensie over dit item (259) Doug Gelbert (238) Princess of Patterns (211) Charles Dickens (209) R.B. Grimm (197) Carolyn Keene (187) Jules Verne (183) Philipp Winterberg (180) William Shakespeare (174) Youscribe (172) Lucas Nicolato (169) Edgar Allan Poe (166) Herman Melville (166) Anonymous (165) Gilad Soffer (164) Robert Louis Stevenson (159)Populaire gewichtsboeken
418 KB 425 KB 435 KB 459 KB 445 KB 439 KB 386 KB 413 KB 493 KB 432 KB 455 KB 471 KB 421 KB 451 KB 485 KB 472 KB 416 KB 369 KB 419 KB 427 KB