2010-09-15 2 views
2

Домашнее задание:Ошибка сбоя страниц в двух массивах?

Рассмотрим двумерный массив 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)?

Есть ли я на правильном пути? Любой совет? Советы?

ответ

1

Подумайте о том, что инициализация происходит в цикле A против цикла B и как многомерный массив выложен в памяти. Один из них получит доступ к адресам памяти в порядке, другой скачет. После 200 заданий вы будете рассматривать A [199] [0] в одном случае и A [0] [199] в другом. Сколько страниц вы затронули?

+0

http://en.wikipedia.org/wiki/Row-major_order Я использую это как свою точку отсчета для того, как выкладывается память и порядок строк. Это неплохая идея, не так ли? –

+0

A) Прыжки вокруг, после каждых 2,5 внутренних итераций это ошибка страницы ??? B) Только ошибки страниц на странице. –

+1

По этой мысли, A) будет винить 80 раз за каждый внутренний цикл, 200 раз, так что 80 * 200, 16 000 ошибок в общей сложности для A. Я думаю, что это так ?! Должен ли я продолжать изучать это? Надеюсь, я понял! –

Смежные вопросы