Количество ошибок страниц в двух массивах? - PullRequest
2 голосов
/ 15 сентября 2010

Домашнее задание:

Рассмотрим двумерный массив A:

      int A[][] = new int[200][200];

, где A [0] [0] находится в местоположении 500 в выгружаемой памятиСистема со страницами размером 500 (немного нереально - не 512).Небольшой процесс, который управляет матрицей, находится на странице 0 (местоположения от 0 до 499).Таким образом, каждая выборка команды будет происходить из инструкции, которая в настоящее время хранится на странице 0.

Если предположить, что имеется только пять кадров страницы, включая страницу 0, сколько ошибок страниц генерируется следующими циклами инициализации массива с использованием LRUзамена и предполагая, что фрейм страницы 0 содержит процесс, а остальные четыре изначально пустые?

A) для (int j = 0; j <200; j ++) для (int i = 0; i <200;i ++) A [i] [j] = 0; </p>

B) для (int i = 0; i <200; i ++) для (int j = 0; j <200; j ++) A [i][j] = 0; </p>

Вопрос:

Где я могу это выяснить?Я просмотрел свой текст, но не нашел в нем много полезного.Я набросал несколько цифр и нашел:

40 000 = общее количество элементов массива

80 (40k / 500) = общее количество страниц

A) 20 000 (80)* 250) потому что каждый второй цикл вызывает ошибку страницы?

B) 80 (по одному на каждую страницу, 40000/500 = 80)?

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

1 Ответ

0 голосов
/ 15 сентября 2010

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

...