カーネル内でメモリを動的に確保するために使う kmalloc と vmalloc.
あれ,これの違いはなんだろう?と思い調べる.
●kmalloc:確保するメモリをスラブから取得している
-割り当てられたアドレス空間には物理ページがマッピング済みなのでページフォルトは起きない
-アドレス空間にマッピングされているページは連続
●vmalloc:vmalloc用の領域からアドレス空間を割り当て(kmallocの拡張版)
-割り当てられたアドレス空間には物理ページがマッピングされていない場合がある
-アドレス空間にマッピングされるページは非連続
という違いがあるよう.
kmalloc により確保した領域(というかスラブが確保した領域)は /proc/slabinfo で見られるようです.
vmallocの仕組みが未だにしっくりこない…(@_@)
ということで参考ページは以下.メモメモ.
スラブアロケータ - Linuxカーネルメモ
kmalloc,vmalloc - Linuxカーネルメモ
Omicron Linux/vmalloc
2010年1月6日水曜日
メモリの扱いで行き詰まり..
DATA型のbufのメモリを確保し,初期化し,ごにゃごにゃし,解放するという流れを作りたいのですが…
なんかかたまってしまう…(@_@)
#define MAXNUM 10
typedef struct
{
int now_pid;
u64 now_pmc0;
u64 now_tsc;
} DATA;
static DATA *buf;
…
buf = (DATA *)vmalloc(sizeof(DATA) * MAXNUM);
memset(buf, 0, sizeof(DATA) * MAXNUM);
…
vfree(buf);
きっと何かこのへんがおかしいんだろう….
WHERE?!?!
早く抜け出したい(>_<;)
1/7***
ちなみに
memset(buf, 0, sizeof(DATA) * MAXNUM);
の直前に
printk("buf add is 0x%08x\n",(ulong)buf);
をいれると動くっていう…(@_@)
1/8***
vmalloc ではなく kmalloc を用いれば printk を挟まなくてもうまく動きました..
vmalloc 領域の変なとこをさわっていたのかな?原因不明です..
が,とりあえず vmalloc 使うのはこわいんでやめておきます.
なんかかたまってしまう…(@_@)
#define MAXNUM 10
typedef struct
{
int now_pid;
u64 now_pmc0;
u64 now_tsc;
} DATA;
static DATA *buf;
…
buf = (DATA *)vmalloc(sizeof(DATA) * MAXNUM);
memset(buf, 0, sizeof(DATA) * MAXNUM);
…
vfree(buf);
きっと何かこのへんがおかしいんだろう….
WHERE?!?!
早く抜け出したい(>_<;)
1/7***
ちなみに
memset(buf, 0, sizeof(DATA) * MAXNUM);
の直前に
printk("buf add is 0x%08x\n",(ulong)buf);
をいれると動くっていう…(@_@)
1/8***
vmalloc ではなく kmalloc を用いれば printk を挟まなくてもうまく動きました..
vmalloc 領域の変なとこをさわっていたのかな?原因不明です..
が,とりあえず vmalloc 使うのはこわいんでやめておきます.
2008年12月16日火曜日
メモリ使用量の制限
/boot/grub/grub.conf に追記することで簡単に可能でした.
title Fedora (2.6.25)
root (hd0,0)
kernel /vmlinuz-2.6.25 ro root=/dev/VolGroup00/LogVol00 rhgb quiet mem=1000M
initrd /initrd-2.6.25.img
これでメモリを1000MBに制限したことになります.
reboot してから
% cat /proc/meminfo
で確認できます.
参照ページ:
Linux 関係:grub.conf 起動時のメモリ - livedoor Blog(ブログ)
title Fedora (2.6.25)
root (hd0,0)
kernel /vmlinuz-2.6.25 ro root=/dev/VolGroup00/LogVol00 rhgb quiet mem=1000M
initrd /initrd-2.6.25.img
これでメモリを1000MBに制限したことになります.
reboot してから
% cat /proc/meminfo
で確認できます.
参照ページ:
Linux 関係:grub.conf 起動時のメモリ - livedoor Blog(ブログ)
登録:
投稿 (Atom)