Домашнее задание:Ошибка сбоя страниц в двух массивах?
Рассмотрим двумерный массив A:
int A[][] = new int[200][200];
где А [0] [0] находится в месте 500 в страничной системы памяти со страницами размером 500 (чуть нереалистично - не 512). Небольшой процесс, который манипулирует матрицей, находится на странице 0 (местоположения от 0 до 499). Таким образом, каждый выбор команды будет выполняться из инструкции, хранящейся в настоящее время на странице 0.
Предполагая, что существует только пять рамок страницы, включая страницу 0, количество сбоев страниц генерируется следующими циклами инициализации массива с использованием замены LRU и предполагая, что кадр страницы 0 содержит этот процесс, а остальные четыре изначально пустые?
А) для (Int J = 0, J < 200; j ++) для (INT I = 0; я < 200; я ++) А [I] [J] = 0;
В) для (INT I = 0; я < 200; я ++) для (Int J = 0; J < 200; j ++) А [I] [J] = 0;
Вопрос:
Где я начинаю, чтобы понять это? Я прочитал свой текст, но не нашел много полезного. Я бросил некоторые цифры вокруг и я нашел:
40000 = общее количество элементов массива
80 (40к/500) = общее количество страниц
A) 20 000 (80 * 250), потому что каждый другой цикл вызывает ошибку страницы?
B) 80 (по одной на каждую страницу, 40 000/500 = 80)?
Есть ли я на правильном пути? Любой совет? Советы?
http://en.wikipedia.org/wiki/Row-major_order Я использую это как свою точку отсчета для того, как выкладывается память и порядок строк. Это неплохая идея, не так ли? –
A) Прыжки вокруг, после каждых 2,5 внутренних итераций это ошибка страницы ??? B) Только ошибки страниц на странице. –
По этой мысли, A) будет винить 80 раз за каждый внутренний цикл, 200 раз, так что 80 * 200, 16 000 ошибок в общей сложности для A. Я думаю, что это так ?! Должен ли я продолжать изучать это? Надеюсь, я понял! –