研究日誌。

大規模なグラフ処理に対してメモリ階層構造を考慮した高性能なソフトウェアを開発。

メモリイメージの保存/再利用 その2。

2008-06-23 14:43:39 | Weblog
□保存方法□

1、fd = open(,,) によって保存先を開く。

2、必要サイズを算出する(ページサイズの倍数に切り上げ)

3、ファイルの必要サイズ先にシークし、0 を書き込む

4、open() の際に出力された fd を用いて、mmap() でマップする。

5、通常のポインタのようなアクセス方法で値を書き込む

6、msync() で同期をとった上で、munmap() でアンマップ、close() でファイルを閉じる。





□再利用□
1、fd = open(,,) によって保存先を開く。

2、必要サイズを算出する(ページサイズの倍数に切り上げ)

3、open() の際に出力された fd を用いて、mmap() でマップする。

4、通常のポインタのようなアクセス方法でグラフデータをコピーする。

5、munmap() でアンマップ、close() でファイルを閉じる。





□用いたおもな関数群□

#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
int open(const char *pathname, int flags, mode_t mode);


#include <unistd.h>
int close(int fd);


#include <sys/types.h>
#include <unistd.h>
off_t lseek(int fd, off_t offset, int whence);


#include <unistd.h>
ssize_t read(int fd, void *buf, size_t count);


#include <unistd.h>
ssize_t write(int fd, const void *buf, size_t count);


#include <sys/mman.h>
void *mmap(void *start, size_t length, int prot, int flags, int fd, off_t offset);
int munmap(void *start, size_t length);


#include <sys/mman.h>
int msync(void *start, size_t length, int flags);