Количество неисправности страницы в течение двух массивов?
-
03-10-2019 - |
Вопрос
Домашнее задание:
Рассмотрим двумерный массив A:
int A[][] = new int[200][200];
где [0] [0] находится на месте 500 в системе памяти в грунтах со страницами размером 500 (немного нереально - не 512). Небольшой процесс, который манипулирует матрицу, находится на странице 0 (места от 0 до 499). Таким образом, каждая инструкция Fetch будет из инструкции, в данный момент хранятся на странице 0.
Предполагая, что существует только пять страниц, в том числе страница 0, сколько неисправностей страниц генерируются следующими циклами инициализации массива, используя замену LRU и предполагая, что кадра страниц 0 содержит процесс, а остальные четыре изначально пустыются?
А) для (int j = 0; j <200; j ++) для (int i = 0; i <200; i ++) a [i] [j] = 0;
Б) для (int i = 0; i <200; i ++) для (int j = 0; j <200; j ++) a [i] [j] = 0;
Вопрос:
Где я начинаю выяснить это? Я прошел через мой текст, но не нашел многое из этого, чтобы быть полезным. Я бросил несколько номеров, и я нашел:
40 000 = общее количество предметов массива
80 (40k / 500) = Общее количество страниц
А) 20 000 (80 * 250), потому что каждая другая петля вызывает ошибку страницы?
Б) 80 (один для каждой страницы, 40 000/500 = 80)?
Я на правильном пути? Любой совет? Подсказки?
Решение
Подумайте о том, чтобы инициализация происходит в цикле A VS Loop B, и как проложен многомерный массив в памяти. Один из них будет получать доступ к адресам памяти по порядку, другой прыгнет. После 200 заданий вы смотрите на [199] [0] в одном случае, а [0] [199] в другом. Сколько страниц вы затронули?