Я пытаюсь продемонстрировать пейджинг в Linux. Я написал небольшую программу, которая отображает файл в виртуальную память с помощью mmap (), ожидает ввода, получает доступ к выделенной памяти и снова ждет ввода.
Я проверяю незначительные и существенные ошибки процесса после сопоставления файлав память и после доступа к этой памяти.
Я ожидал увидеть серьезную ошибку, но я вижу только незначительную ошибку. Количество основных неисправностей остается 0 до завершения программы. Это очень странно, потому что ядро должно выполнить ввод / вывод, чтобы перенести содержимое файла в память.
Может кто-нибудь объяснить это?
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <sys/mman.h>
#include <unistd.h>
#include <sys/mman.h>
#include <stdio.h>
int main (int argc, char *argv[]) {
char *mblk;
int fd, fsize, n;
struct stat fs;
fd = open ( argv[1], O_RDONLY );
if ( fd == -1 ) {
printf ( "Failed to open %s\n", argv[1] );
return (-1);
}
fstat ( fd, &fs );
fsize = fs.st_size;
mblk = mmap ( NULL, fsize, PROT_READ, MAP_PRIVATE, fd, 0 );
close ( fd );
printf ( "\n %s is maped to virtual memory at %llx\n", argv[1], (unsigned long long) mblk );
printf ( " Press Enter to continue\n");
getchar ();
n = (unsigned) *mblk;
printf ( "%d\n", n);
printf ( " %llx accessed\n", (unsigned long long) mblk );
printf ( " Press any Enter exit\n");
getchar ();
}