Рассчитать количество адресуемых ячеек памяти, если ширина адресной шины равна 8

Обновлено: 25.11.2024

Меня смущает так много терминов, о которых говорит мой инструктор, таких как слова, адресация байтов и расположение в памяти.

У меня сложилось впечатление, что для 32-разрядного процессора он может адресовать до 2^32 бит, что составляет 4,29 X 10^9 бит (НЕ БАЙТ).

Сейчас я думаю так:

Память похожа на массив сегментов длиной 1 байт каждый.

когда мы говорим об адресации байтов (что, я думаю, является наиболее распространенным), каждый char равен 1 байту и извлекается из первого сегмента (скажем, например). для int следующие 4 байта объединяются в порядке прямого порядка байтов для вычисления значения Integer.

поэтому каждая память, как я понимаю, имеет размер 8 бит или 1 байт, что может дать до 2^8 адресов, это намного меньше, чем может адресовать процессор.

Здесь есть некоторое очень фундаментальное непонимание с моей стороны, которое, если некоторые эксперты могут объяснить простыми словами, что будущий студент по специальности CS может это сделать один раз навсегда.

Я читал различные страницы, включая эту, и здесь единица разрешения адреса указана как 8b для ARM, что еще больше меня запутало.

2 ответа 2

Процессор использует 32 бита для хранения адреса. Используя 32 бита, вы можете хранить 2^32 различных числа в диапазоне от 0 до 2^32 - 1. "Байтовая адресация" означает, что каждый байт в памяти имеет индивидуальную адресацию, т. е. существует адрес x. который указывает на этот конкретный байт. Поскольку в 32-битный адрес можно поместить 2^32 различных числа, мы можем адресовать до 2^32 байт или 4 ГБ.

У меня сложилось впечатление, что для 32-разрядного процессора он может адресовать до 2^32 бит, что составляет 4,29 X 10^9 бит (НЕ БАЙТ).

Обычно это не так: адресация на уровне битов используется довольно редко. Байтовая адресация встречается гораздо чаще. Однако вы могли разработать ЦП, который работал бы таким образом. В этом случае, как вы сказали, вы сможете адресовать до 2 ^ 32 бит = 2 ^ 29 байт (512 МБ).

Я прочитал это 3 раза и с каждым разом все лучше понимаю. как здесь играет роль размер слова?

@eagertoLearn «Размер слова» — это размер чисел, с которыми работает процессор. Когда он (скажем) складывает два числа вместе, размер слова равен размеру этих чисел. Размер слова обычно но не всегда совпадает с размером адреса.

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

@eagertoLearn Преимуществом будет возможность адресации большего объема памяти. Недостатком является то, что любой код, который должен иметь дело с отдельными байтами, становится намного сложнее, поскольку он должен отделять байты от каждого адресуемого слова. В наши дни, с 64-битными машинами, позволяющими (в настоящее время) до 2^44 = 16 ТБ (текущие 64-битные реализации не используют все биты адреса) и (в конечном итоге) до 2^64 = 16 эксабайт, нет мотивация отказаться от побайтовой адресации.

Несмотря на то, что сам модуль DIMM может адресоваться только по словам, для взаимодействия с ним требуется контроллер памяти. Контроллер памяти/кэш - это то, что обеспечивает байтовую адресацию. (Но разве в DDR DRAM нет линий включения/отключения, которые позволяют сохранять байты без цикла чтения-модификации-записи в контроллере памяти для некэшируемых хранилищ?)

Проблема 2

  1. Сколько страниц находится в виртуальном адресном пространстве?
  2. Каков максимальный размер адресуемой физической памяти в этой системе?
  3. Если средний размер процесса составляет 8 ГБ, вы бы использовали одноуровневую, двухуровневую или трехуровневую таблицу страниц? Почему?
  4. Вычислите средний размер таблицы страниц в ответе на вопрос 3 выше.

    36-битный адрес может адресовать 2 ^ 36 байтов в машине с байтовой адресацией. Поскольку размер страницы составляет 8 КБ (2^13), количество адресуемых страниц равно 2^36 / >2^13 = 2^23

Чтобы принять решение, нам необходимо проанализировать требования к памяти и времени для схем подкачки. В приведенных ниже расчетах учитывается средний размер процесса.

Пейджинг 1 уровня
Поскольку у нас есть 2^23 страницы в каждом виртуальном адресном пространстве, и мы используем 4 байта на запись в таблице страниц, размер таблицы страниц будет 2^23 * 2^2 = 2 ^ 25. Это 1/256 собственного пространства памяти процесса, так что это довольно дорого. (32 МБ)

Пейджинг 2 уровня
Адрес будет разделен на 12 | 11 | 13, так как мы хотим, чтобы страницы таблицы страниц умещались на одной странице, и мы также хотим разделить биты примерно поровну.

Поскольку размер процесса составляет 8 ГБ = 2^33 Б, я предполагаю, что это означает, что общий размер всех отдельных страниц, к которым обращается процесс, составляет 2^33 Б. Следовательно, этот процесс обращается к 2^33 / 2^13 = 2^20 страниц. Нижний уровень таблицы страниц содержит 2^20 ссылок. Мы знаем, что размер каждого фрагмента нижнего уровня таблицы страниц составляет 2 ^ 11 записей. Таким образом, нам нужно 2^20 / 2^11 = 2^9 фрагментов нижнего уровня.

Тогда общий размер таблицы страниц равен:

//размер внешней таблицы страниц //общий размер внутренних страниц< /td>
1 * 2^12 * 4 + 2^9 * 2^11 * 4 = 2^20 * ( 2^-6 + 4) ~4 МБ

3 уровня пейджинга
Для 3 уровня пейджинга мы можем разделить адрес следующим образом:
8 | 8 | 7 | 13

Опять же, используя те же рассуждения, что и выше, нам нужно 2 ^ 20/2 ^ 7 = 2 ^ 13 фрагментов таблицы страниц уровня 3. Каждый фрагмент таблицы страниц уровня 2 ссылается на 2^8 фрагментов таблицы страниц уровня 3. Итак, нам нужно 2^13/2^8 = 2^5 таблиц уровня 2. И, конечно же, одна таблица уровня 1.

Общий размер таблицы страниц равен:

//размер внешней таблицы страниц //общий размер таблиц уровня 2 //общий размер самых внутренних таблиц
1 * 2^8 * 4 2^5 * 2^8 *4 2^13 * 2^7 * 4 ~4MB
Как легко заметить, двухуровневая и трехуровневая подкачка требуют гораздо меньше места, чем подкачка уровня 1. схема. А поскольку наше адресное пространство недостаточно велико, 3-уровневая подкачка работает не лучше, чем 2-уровневая. Из-за стоимости доступа к памяти гораздо логичнее выбрать двухуровневую схему подкачки для этого процесса.

Проблема 3

  1. Каков размер страницы в такой системе? Объясните свой ответ (число без обоснования не будет засчитано).

    4К. Последние 12 бит виртуального адреса представляют собой смещение на странице, которое варьируется от 0 до 4095. Таким образом, размер страницы равен 4096, то есть 4 КБ.

Поскольку физические адреса имеют длину 44 бита, а размер страницы — 4 КБ, номер кадра страницы занимает 32 бита. Принимая во внимание 4 защитных бита, каждая запись таблицы страниц уровня 3 занимает (32+4) = 36 бит. Округление для выравнивания записей по байтам (словам) приведет к тому, что каждая запись будет потреблять 40 (64) бит или 5 (8) байтов. Для таблицы из 256 записей нам потребуется 1280 (2048) байт.

Таблица страниц верхнего уровня не должна предполагать, что таблицы страниц 2-го уровня выровнены по страницам. Итак, мы храним там полные физические адреса. К счастью, нам не нужны управляющие биты. Таким образом, каждая запись занимает не менее 44 бит (6 байтов для выравнивания по байтам, 8 байтов для выравнивания по словам). Таким образом, каждая таблица страниц верхнего уровня имеет размер 256*6 = 1536 байт (256 * 8 = 2048 байт).

Попытка воспользоваться выравниванием по 256 элементам для уменьшения размера элемента, вероятно, не стоит усилий. Сделать это было бы сложно; вам нужно будет написать новый распределитель памяти, который гарантирует такое выравнивание. Кроме того, мы не можем полностью уместить таблицу в выровненную область размером 1024 байта (44-10 = 34 бита на адрес, что потребовало бы более 4 байтов на запись), и округление размера до следующей степени двойки не спасло бы использовать любой размер, а не просто хранить указатели и использовать обычный распределитель.

Аналогично каждая запись в таблице страниц 2-го уровня представляет собой 44-битный физический указатель, 6 байтов (8 байтов) при выравнивании по байтам (словам). Таким образом, таблица с 16 элементами занимает 96 (128) байт. Таким образом, требуемое пространство составляет 1536 (2048) байт для таблицы страниц верхнего уровня + 96 (128) байт для одной таблицы страниц второго уровня + 1280 (2048) байт для одной таблицы страниц третьего уровня = 2912 (4224) байт. Поскольку процесс может уместиться ровно на 16 страницах, внутренняя фрагментация не тратит память впустую.

Таким образом, требуемое пространство составляет 1536 (2048) байт для таблицы страниц верхнего уровня + 3 * 96 (3 * 128) байт для 3 таблиц страниц второго уровня + 3 * 1280 (3 * 2048) для 3 таблиц страниц третьего уровня. таблица страниц = 5664 (8576) байт.

Проблема 4

В соответствии с философией проектирования процессоров RISC, заключающейся в перемещении аппаратной функциональности в программное обеспечение, вы видите предложение о том, чтобы разработчики процессоров удаляли MMU (блок управления памятью) из аппаратного обеспечения. Чтобы заменить MMU, компиляторы генерируют так называемый позиционно-независимый код (PIC). PIC может быть загружен и запущен по любому адресу без выполнения какого-либо перемещения. Если предположить, что код PIC работает так же быстро, как код без PIC, в чем будет недостаток этой схемы по сравнению со страничным MMU, используемым в современных микропроцессорах?

Решение:
Нужно решение.

Проблема 5

Опишите преимущества использования MMU, включающего сегментацию и пейджинг, по сравнению с теми, которые используют только пейджинг или только сегментацию. Представьте свой ответ в виде отдельных списков преимуществ перед каждой из чистых схем.

Решение:
Нужно решение.

Проблема 6

Рассмотрите следующий фрагмент кода, который умножает две матрицы. Предположим, что двоичный файл для выполнения этой функции умещается на одной странице, и стек также умещается на одной странице. Предположим далее, что для хранения целого числа требуется 4 байта. Вычислите количество промахов TLB, если размер страницы равен 4096, а TLB имеет 8 записей с замещающей политикой, состоящей из LRU.

Решение:
1024*(2+1024*1024) = 1073743872
Двоичный файл и стек умещаются на одной странице, поэтому каждый занимает одну запись в TLB. Пока функция работает, она постоянно обращается к двоичной странице и странице стека.Таким образом, две записи TLB для этих двух страниц будут все время находиться в TLB, а данные могут занимать только оставшиеся 6 записей TLB.

Мы предполагаем, что две записи уже находятся в TLB, когда функция начинает выполняться. Затем нам нужно рассмотреть только эти страницы данных.

Поскольку для хранения целого числа требуется 4 байта, а размер страницы составляет 4096 байт, для каждого массива требуется 1024 страницы. Предположим, что каждая строка массива хранится на одной странице. Тогда эти страницы можно представить в виде a[0..1023], b[0..1023], c[0..1023]: Страница a[0] содержит элементы a[0][0..1023], страница a[1] содержит элементы a[1][0..1023] и т. д.

Для фиксированного значения i, скажем, 0, функция выполняет цикл по j и k, у нас есть следующая ссылочная строка:

Для ссылочной строки (всего 1024 строки) a[0], c[0] приведут к двум промахам TLB. Поскольку доступ к a[0] и b[0] будет осуществляться через каждые четыре обращения к памяти, эти две страницы не будут заменены алгоритмом LRU. Для каждой страницы в b[0..1023] каждый раз при доступе к ней будет происходить один промах TLB. Таким образом, количество промахов TLB для второго внутреннего цикла равно
2+1024*1024 = 1048578.

Я готовлюсь к экзамену в конце семестра, и меня смущает следующий вопрос. Если ЦП имеет 16-битную адресную шину и 8-битные слова, сколько памяти в КБ он может адресовать? Насколько я понимаю, он может адресовать 64 КБ, однако для этого я просто использовал 2 ^ 16 = 65 536. В этом расчете никогда не учитывались 8-битные слова, поэтому я не уверен, что он правильный. И что означают 8-битные слова?

Вы использовали его косвенно: общий объем адресуемой памяти 2^16*8 бит. Поскольку один байт = 8 битам, это 2 ^ 16 байтов, то есть 65536 байтов или 64 КиБ. Обратите внимание, что K — это префикс SI для 1000. Если вы имеете в виду 1024, используйте Ki.

Обратите внимание на разницу между килобайтами префикса SI (1000 байт) и кибибайтами двоичного префикса (1024 байта). 2^16 = 65 536 = 64 киби ~ 65,5 кг. Искомый ответ вероятно тот, где килограмм понимается как киби, но бывают случаи, когда разница действительно имеет значение. Если вы хотите быть полностью уверенным, выберите безопасный путь и укажите количество байтов и предложите перевод в более удобные единицы, такие как килобайты или кибибайты, для удобства вашего учителя. Сравните Википедию: двоичный префикс. Микросхемы памяти обычно указывают, например, 65 536x8 бит.

Я полагаю, вы не предполагаете обмена банками. Большинство 16-битных процессоров используют ту или иную форму подкачки банков, что затрудняет ответ на этот вопрос.

5 ответов 5

Слово в большинстве архитектур — это самый большой фрагмент данных, который можно передать в рабочую память и из нее за одну операцию.

Максимально возможный размер адреса, используемый для обозначения местоположения в памяти, обычно называется аппаратным словом.

Таким образом, ваш ЦП сможет адресовать 64 КБ (2^16), но сможет передать за одну операцию только 8 бит.

Я уверен, что именно этот ответ и нужен учителю, но действительно ли он правильный? Не могли бы вы использовать что-то вроде PAE, чтобы разрешить трехуровневую иерархию (или даже больше), чтобы разрешить процессору доступ к более чем 64 КБ? Я не эксперт по оборудованию, но разве Commodore 128 не смог сделать что-то подобное на 8-битном слове и 16-битной шине, разрешив переключение банков ОЗУ?

Не совсем уверен, что понял ваше предложение "за одну операцию можно будет передать только 256Б (2^8)"? Он может передавать только 1 слово = 1 байт = 8 бит за одну операцию.

@davidgo по-прежнему PAE требует соответствующего размера адресной шины. ЦП Intel, поддерживающие PAE, имеют 36-битную адресную шину.

PAE — это более или менее торговая марка/функция, характерная для современных процессоров x86. Да, схемы для косвенной адресации больших объемов памяти были реализованы на протяжении веков (например, XMS), они, в конце концов, рассматривают подсистему памяти как периферийное устройство, которое можно постоянно перенастраивать для предоставления другой памяти в меньшее адресное пространство. Также см. модель сегментированной памяти старой школы x86.

Машинное слово, или обычно просто слово, — это самая большая единица данных, с которой ЦП может работать как единое целое, используя общие инструкции. Это не имеет ничего общего с адресацией памяти.

Но я использовал машины, где единица разрешения адреса составляла 16 бит. (Поэтому концепция имеет смысл.)

@glglgl — это очень похоже. Я не верю, что существуют какие-либо архитектуры, в которых не используется адресная единица либо 8 бит, или их размер слова.

Я не согласен с утверждением, что слово — это самая большая единица, которой процессор может манипулировать в целом. Intel i7 имеет 64-битную шину данных и может использовать 256-битные инструкции SIMD. Если Википедия верна, то слово относится к ширине шины данных, а не к внутренним ресурсам процессора.

@ThomasWeller: 8088 имеет 8-битную шину данных, но все же 16-битные инструкции. Фактически это 8086 с меньшей шиной данных.Примечание: ширина шины данных и фактическая передача также различаются (подумайте о смещенных данных).

Кроме того, что означают 8-битные слова?

В контексте размер слова соответствует размеру адреса для описания шины памяти. В памяти есть 16 бит, поэтому она может выбирать 64-килобайтные ячейки. Затем каждое местоположение содержит 8 бит.

Размер слова здесь может соответствовать или не соответствовать размеру вычислительной единицы ЦП, а также может соответствовать или не соответствовать логической гранулярности адресации.

Например, ЦП может объявить 16-битную шину (для этой цели). Он использует в своих инструкциях 16-битные адреса, и как в вашем примере имеет 64ки. Но у него 15 бит адресной шины и 16 бит шины данных. Ему нужно только 32k адресов, и он всегда получает 2 байта для каждого местоположения. (Если инструкции требуется 1 байт, она отправит адрес с отсутствующим наименьшим битом, выберет оба байта на этом шаге, а затем просмотрит наименьший бит желаемого адреса, чтобы решить, какую половину использовать.)

Обратите внимание, что переключение банков, PAE и т. д., упомянутые другими, здесь неуместны. Блок управления памятью может использовать 16-битные адреса и иметь 20-битный аппаратный адрес, поэтому ЦП должен переключаться и сопоставлять вещи, чтобы использовать реальный диапазон 20-битных адресов микросхем ОЗУ, к которым можно обращаться.

Проблема 2

  1. Сколько страниц находится в виртуальном адресном пространстве?
  2. Каков максимальный размер адресуемой физической памяти в этой системе?
  3. Если средний размер процесса составляет 8 ГБ, вы бы использовали одноуровневую, двухуровневую или трехуровневую таблицу страниц? Почему?
  4. Вычислите средний размер таблицы страниц в ответе на вопрос 3 выше.

    36-битный адрес может адресовать 2 ^ 36 байтов в машине с байтовой адресацией. Поскольку размер страницы составляет 8 КБ (2^13), количество адресуемых страниц равно 2^36 / >2^13 = 2^23

Чтобы принять решение, нам необходимо проанализировать требования к памяти и времени для схем подкачки. В приведенных ниже расчетах учитывается средний размер процесса.

Пейджинг 1 уровня
Поскольку у нас есть 2^23 страницы в каждом виртуальном адресном пространстве, и мы используем 4 байта на запись в таблице страниц, размер таблицы страниц будет 2^23 * 2^2 = 2 ^ 25. Это 1/256 собственного пространства памяти процесса, так что это довольно дорого. (32 МБ)

Пейджинг 2 уровня
Адрес будет разделен на 12 | 11 | 13, так как мы хотим, чтобы страницы таблицы страниц умещались на одной странице, и мы также хотим разделить биты примерно поровну.

Поскольку размер процесса составляет 8 ГБ = 2^33 Б, я предполагаю, что это означает, что общий размер всех отдельных страниц, к которым обращается процесс, составляет 2^33 Б. Следовательно, этот процесс обращается к 2^33 / 2^13 = 2^20 страниц. Нижний уровень таблицы страниц содержит 2^20 ссылок. Мы знаем, что размер каждого фрагмента нижнего уровня таблицы страниц составляет 2 ^ 11 записей. Таким образом, нам нужно 2^20 / 2^11 = 2^9 фрагментов нижнего уровня.

Тогда общий размер таблицы страниц равен:

//размер внешней таблицы страниц //общий размер внутренних страниц< /td>
1 * 2^12 * 4 + 2^9 * 2^11 * 4 = 2^20 * ( 2^-6 + 4) ~4 МБ

3 уровня пейджинга
Для 3 уровня пейджинга мы можем разделить адрес следующим образом:
8 | 8 | 7 | 13

Опять же, используя те же рассуждения, что и выше, нам нужно 2 ^ 20/2 ^ 7 = 2 ^ 13 фрагментов таблицы страниц уровня 3. Каждый фрагмент таблицы страниц уровня 2 ссылается на 2^8 фрагментов таблицы страниц уровня 3. Итак, нам нужно 2^13/2^8 = 2^5 таблиц уровня 2. И, конечно же, одна таблица уровня 1.

Общий размер таблицы страниц равен:

//размер внешней таблицы страниц //общий размер таблиц уровня 2 //общий размер самых внутренних таблиц
1 * 2^8 * 4 2^5 * 2^8 *4 2^13 * 2^7 * 4 ~4MB
Как легко заметить, двухуровневая и трехуровневая подкачка требуют гораздо меньше места, чем подкачка уровня 1. схема. А поскольку наше адресное пространство недостаточно велико, 3-уровневая подкачка работает не лучше, чем 2-уровневая. Из-за стоимости доступа к памяти гораздо логичнее выбрать двухуровневую схему подкачки для этого процесса.

Проблема 3

  1. Каков размер страницы в такой системе? Объясните свой ответ (число без обоснования не будет засчитано).

    4К. Последние 12 бит виртуального адреса представляют собой смещение на странице, которое варьируется от 0 до 4095. Таким образом, размер страницы равен 4096, то есть 4 КБ.

Поскольку физические адреса имеют длину 44 бита, а размер страницы — 4 КБ, номер кадра страницы занимает 32 бита. Принимая во внимание 4 защитных бита, каждая запись таблицы страниц уровня 3 занимает (32+4) = 36 бит. Округление для выравнивания записей по байтам (словам) приведет к тому, что каждая запись будет потреблять 40 (64) бит или 5 (8) байтов. Для таблицы из 256 записей нам потребуется 1280 (2048) байт.

Таблица страниц верхнего уровня не должна предполагать, что таблицы страниц 2-го уровня выровнены по страницам. Итак, мы храним там полные физические адреса. К счастью, нам не нужны управляющие биты.Таким образом, каждая запись занимает не менее 44 бит (6 байтов для выравнивания по байтам, 8 байтов для выравнивания по словам). Таким образом, каждая таблица страниц верхнего уровня имеет размер 256*6 = 1536 байт (256 * 8 = 2048 байт).

Попытка воспользоваться выравниванием по 256 элементам для уменьшения размера элемента, вероятно, не стоит усилий. Сделать это было бы сложно; вам нужно будет написать новый распределитель памяти, который гарантирует такое выравнивание. Кроме того, мы не можем полностью уместить таблицу в выровненную область размером 1024 байта (44-10 = 34 бита на адрес, что потребовало бы более 4 байтов на запись), и округление размера до следующей степени двойки не спасло бы использовать любой размер, а не просто хранить указатели и использовать обычный распределитель.

Аналогично каждая запись в таблице страниц 2-го уровня представляет собой 44-битный физический указатель, 6 байтов (8 байтов) при выравнивании по байтам (словам). Таким образом, таблица с 16 элементами занимает 96 (128) байт. Таким образом, требуемое пространство составляет 1536 (2048) байт для таблицы страниц верхнего уровня + 96 (128) байт для одной таблицы страниц второго уровня + 1280 (2048) байт для одной таблицы страниц третьего уровня = 2912 (4224) байт. Поскольку процесс может уместиться ровно на 16 страницах, внутренняя фрагментация не тратит память впустую.

Таким образом, требуемое пространство составляет 1536 (2048) байт для таблицы страниц верхнего уровня + 3 * 96 (3 * 128) байт для 3 таблиц страниц второго уровня + 3 * 1280 (3 * 2048) для 3 таблиц страниц третьего уровня. таблица страниц = 5664 (8576) байт.

Проблема 4

В соответствии с философией проектирования процессоров RISC, заключающейся в перемещении аппаратной функциональности в программное обеспечение, вы видите предложение о том, чтобы разработчики процессоров удаляли MMU (блок управления памятью) из аппаратного обеспечения. Чтобы заменить MMU, компиляторы генерируют так называемый позиционно-независимый код (PIC). PIC может быть загружен и запущен по любому адресу без выполнения какого-либо перемещения. Если предположить, что код PIC работает так же быстро, как код без PIC, в чем будет недостаток этой схемы по сравнению со страничным MMU, используемым в современных микропроцессорах?

Решение:
Нужно решение.

Проблема 5

Опишите преимущества использования MMU, включающего сегментацию и пейджинг, по сравнению с теми, которые используют только пейджинг или только сегментацию. Представьте свой ответ в виде отдельных списков преимуществ перед каждой из чистых схем.

Решение:
Нужно решение.

Проблема 6

Рассмотрите следующий фрагмент кода, который умножает две матрицы. Предположим, что двоичный файл для выполнения этой функции умещается на одной странице, и стек также умещается на одной странице. Предположим далее, что для хранения целого числа требуется 4 байта. Вычислите количество промахов TLB, если размер страницы равен 4096, а TLB имеет 8 записей с замещающей политикой, состоящей из LRU.

Решение:
1024*(2+1024*1024) = 1073743872
Двоичный файл и стек умещаются на одной странице, поэтому каждый занимает одну запись в TLB. Пока функция работает, она постоянно обращается к двоичной странице и странице стека. Таким образом, две записи TLB для этих двух страниц будут все время находиться в TLB, а данные могут занимать только оставшиеся 6 записей TLB.

Мы предполагаем, что две записи уже находятся в TLB, когда функция начинает выполняться. Затем нам нужно рассмотреть только эти страницы данных.

Поскольку для хранения целого числа требуется 4 байта, а размер страницы составляет 4096 байт, для каждого массива требуется 1024 страницы. Предположим, что каждая строка массива хранится на одной странице. Тогда эти страницы можно представить в виде a[0..1023], b[0..1023], c[0..1023]: Страница a[0] содержит элементы a[0][0..1023], страница a[1] содержит элементы a[1][0..1023] и т. д.

Для фиксированного значения i, скажем, 0, функция выполняет цикл по j и k, у нас есть следующая ссылочная строка:

Для ссылочной строки (всего 1024 строки) a[0], c[0] приведут к двум промахам TLB. Поскольку доступ к a[0] и b[0] будет осуществляться через каждые четыре обращения к памяти, эти две страницы не будут заменены алгоритмом LRU. Для каждой страницы в b[0..1023] каждый раз при доступе к ней будет происходить один промах TLB. Таким образом, количество промахов TLB для второго внутреннего цикла равно
2+1024*1024 = 1048578.

Читайте также: