タグ

Kernelとmemoryに関するmogwaingのブックマーク (3)

  • メモリ管理のお勉強 - 書きとめておきたいことたち

    HEAP領域とSTACK領域の間の未使用領域は、下記の領域に使われる 共有ライブラリのロード領域 メモリ・マップト・ファイル用領域 プロセス間共有メモリ用領域 メモリ・マップト・I/O用領域 メモリ・マップトによる追加HEAP領域 小さなサイズをmallocをしたときはHEAP領域に確保されるが、大きなサイズのメモリをmallocしたときはメモリマップ領域に確保される(glibcの場合) すべてmmapにするとメモリのフラグメンテーションがおきないが、mmapは重いしページサイズ単位しか扱えない。 32bit環境では論理メモリが2^32=4GBまでしか確保できない。このうちOSがメモリの上位1or2GBを使うので、実際にはアプリは3or2GBまでしかメモリは使えない。64bit環境になると、もっと使えるようになる。 HEAP領域は下に(上位アドレス方向)、STACK領域は上に(下位アドレス

    メモリ管理のお勉強 - 書きとめておきたいことたち
    mogwaing
    mogwaing 2009/01/30
    よくまとまっている
  • アジアのペンギン: Linuxのメモリアロケータ

    昨年、Linuxカーネルメモリ管理についての社内勉強会がありました。そういえば、2002年頃の春頃(随分昔だなあ。。。)に2.4.17を対象にメモリアロケータに関する技術資料を作ったことを思い出しました。当時は、その資料を使って社内勉強会やYLUGで発表したりしていました。今回はその資料の一部の内容を、若干手直しして紹介します。 Linux のメモリアロケータは下図のように3つのコンポーネント(ページアロケータ、スラブアロケータ、vmalloc) によって構成されています。 ◎ページアロケータ メモリアロケータのベースとなる 物理メモリをページ(4KB)単位で管理。 効率的にメモリを管理するために、バディシステムによって実装され、 ページ間フラグメンテーションの発生を抑制している。 インタフェースは、__get_free_pages()/alloc_pages()/__free_pages

  • x86 Linux のメモリモデル、プロセス空間切り替え、カーネルスタック - naoyaのはてなダイアリー

    ひとつ前のエントリ id:naoya:20070924:1190653790 では Linux のコンテキストスイッチにおける、主にハードウェアコンテキストの退避/復帰の処理を追ってみました。その中で カーネルスタック (switch_to() 内で pushl %ebp とかして値が積まれるスタック)とはそのときの実行コンテキストに紐づくカーネルプロセススタックという理解でよいか。 という疑問がもやもや湧いて出てきました。ここ数日 はじめて読む486―32ビットコンピュータをやさしく語る を読んでいたのですが、その中にこの疑問への答えへの入り口が載っていまして、そこを糸口に調べてみました。で、結果としては 答え: 良い でした。 x86 は特権レベルの移行と連動してスタックポインタを切り替える仕組みを持っています。Linux の場合モードはカーネルモード(特権レベル0) とユーザーモード

    x86 Linux のメモリモデル、プロセス空間切り替え、カーネルスタック - naoyaのはてなダイアリー
  • 1