ブロックデバイス/dev/ram0
のように、LinuxRAMDISKで遊んでいます。これらのデバイスの1つに最初に書き込みを開始したときに、いくつかのRAMが割り当てられていることを理解しています。
たとえば、/dev/ram0
によって使用されているメモリを解放するにはどうすればよいですか?別の言い方をすれば、Linuxカーネルに完了したことを示すにはどうすればよいですか。また、/dev/ram0
が保持しているリソースを再利用できますか?
Ramdiskを次の行に沿ってフォーマットしない限り
mke2fs -m 0 /dev/ram0
Ramdisk自体は実際にはメモリスペースを占有しません。
ただし、RAMディスクをフォーマットしてマウントする場合、私が覚えている唯一の方法は freeramdisk を使用することですが、それはずっと前のことです。
あなたがチェックしたいと思うかもしれない他のいくつかのリソース:
http://e2enetworks.com/2008/10/25/linux-in-memory-filesystems-tmpfs-vs-ramdisk/
/ dev/ram0およびその他は、brd linuxカーネルモジュールによって実装されます。ソース- http://elixir.free-electrons.com/linux/latest/source/drivers/block/brd.c 、ドキュメントof modprobe brd
: https://www.novell.com/support/kb/doc.php?id=7012396 。
rmmod brd
を使用してモジュールをアンロード(rmmod)してみてください。これは、brd_del_one
関数を呼び出してramdiskを削除する唯一の方法です。
Freeramはloadlinパッケージの一部です https://launchpad.net/ubuntu/+source/loadlin/1.6f-5 読み取り/書き込み用のオープニングデバイスとして実装され、BLKFLSBUFioctlを実行します
char rname[256]="/dev/ram";
char b[256];
int f;
f=open(rname,O_RDWR))
ioctl(f,BLKFLSBUF);
これは https://elixir.free-electrons.com/linux/latest/source/include/uapi/linux/fs.h で定義されています。
#define BLKFLSBUF _IO(0x12,97) /* flush buffer cache */