Генерировать основные ошибки страницы

Возможно ли генерировать основные ошибки страницы в ядре Linux по своему усмотрению? Может ли программа быть написана так, чтобы она гарантировала серьезную ошибку страницы при ее выполнении.

2 Solutions collect form web for “Генерировать основные ошибки страницы”

Чтобы произвести основные ошибки страницы, вам необходимо принудительно считывать данные с диска. Следующий код отображает файл, указанный в командной строке, сообщая ядру, что он ему не нужен; если файл достаточно большой (выберите большой файл в /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 основных сбоя страницы.

Эта программа C заставляет график давления памяти на моем Mac шипить PDQ:

 #include <stdlib.h> int main(void) { while (1) { char* p = malloc(1 * 1024 * 1024 * 1024); for (int i = 0; i < 1024; ++i) { p[i * 1024 * 1024] = 0; /* touch the pages */ } } return 0; } 

Важна внутренняя петля. Если вы не коснетесь хотя бы некоторых страниц памяти, которые вы выделяете, подсистема управления памятью достаточно умна, чтобы понять, что вы просто запрашиваете память, которую вы никогда не используете. Тем не менее, это может быть специфическая для реализации OS X.

  • Что такое дескрипторы файлов, кроме 0, 1 и 2
  • Fedora 26 на USB-накопителе обновил ядро ​​4.11.8 до 4.11.9 больше не загружается
  • уменьшить уровень детализации журнала загрузки ядра
  • Генерировать прерывания для целей стресс-тестирования
  • Может ли grub загружать ядро ​​из HTTP?
  • Перекомпилировать ядро ​​для изменения размера стека
  • В чем разница между всеми параметрами и значением по умолчанию в настройках ядра?
  • Подписание модуля для предварительно созданного ядра
  • Некоторые основные вопросы о безопасности ядра Linux
  • Зачем мне нужен ntfs-3g, когда я уже включил поддержку NTFS в ядре?
  • Длительность Ftrace
  • Linux и Unix - лучшая ОС в мире.