メインページエラーを生成します。

メインページエラーを生成します。

Linuxカーネルは意図的に重要なページエラーを生成できますか?実行時に主なページエラーが発生することを保証するプログラムを書くことは可能ですか?

ベストアンサー1

主なページエラーを生成するには、ディスクから強制的に読み取る必要があります。次のコードは、コマンドラインに提供されているファイルをマップし、ファイルが不要であることをカーネルに通知します。ファイルが十分に大きい場合(から大きなファイルを選択/usr/bin)、常に主要ページエラーが発生します。

#include <fcntl.h>
#include <stdio.h>
#include <sys/mman.h>
#include <sys/stat.h>

int main(int argc, char ** argv) {
  int fd = open(argv[1], O_RDONLY);
  struct stat stats;
  fstat(fd, &stats);
  posix_fadvise(fd, 0, stats.st_size, POSIX_FADV_DONTNEED);
  char * map = (char *) mmap(NULL, stats.st_size, PROT_READ, MAP_SHARED, fd, 0);
  if (map == MAP_FAILED) {
    perror("Failed to mmap");
    return 1;
  }
  int result = 0;
  int i;
  for (i = 0; i < stats.st_size; i++) {
    result += map[i];
  }
  munmap(map, stats.st_size);
  return result;
}

エラー処理方法はあまりありません。これは単にアイデアを示すためのものです。私のシステムでは

gcc majorfault.c -o majorfault && /usr/bin/time -v ./majorfault /usr/bin/git-annex

常に154の主要ページエラーを生成します。

おすすめ記事