Вычислите количество адресуемых ячеек памяти, если ширина адресной шины равна 64 n

Обновлено: 03.07.2024

для каждого процесса существует адрес A; при выполнении вычислений всегда усекайте этот расчет выполняется быстро на компьютере, поскольку размер страницы равен степени 2, например, размер страницы равен 4k 2^12, тогда последние 12 бит дают смещение страницы, а первые 32-12 бит если основная память 512 КБ, то физический адрес 29 бит.

Поэтому, чтобы вычислить объем адресуемой памяти, мы должны умножить количество адресов на их размер. Общая адресуемая память (2^ширина адресной шины) * ширина шины данных. То есть машина с 16-битной шиной данных и 32-битной адресной шиной будет иметь. (2^32)*16 бит доступного хранилища. или 8 ГБ — посчитайте сами, чтобы убедиться

Память можно рассматривать просто как массив байтов. Адреса памяти действуют так же, как индексы обычного массива. Когда вы пишете в t[4], вы на самом деле пишете в u. Поскольку C и C++ не выполняют никакой проверки диапазона при доступе к элементу массива, важно, чтобы вы, как программист,

Как я уже упоминал ранее, это размер машинного слова. Адреса памяти тоже являются числами, поэтому на 32-битном процессоре адрес памяти состоит из 32 бит. Теперь подумайте об этом: если у вас есть один бит, вы можете сохранить на нем два значения: 0 или 1. Итак, отсюда мы можем просто вычислить максимальное количество адресов (т.е. максимальное

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

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

созданная на самых первых ПК, память разбита на следующие четыре основные части (с частью обычной памяти: первые 640 КБ системной памяти — это (не)известная обычная память, которую каждый пользователь ПК со временем узнал и ненавижу. линейный диапазон адресов, диапазон адресов в реальном режиме, тип памяти, использование.

В архитектуре MIPS используются 32-битные адреса памяти и 32-битные слова данных. На рис. 6.1 показан массив памяти с адресацией по словам. Каждая операция внутри ЦП на самом деле представляет собой очень простую задачу, включающую взаимодействие двоичных чисел и логических значений. Выбранный диапазон адресов будет определяться двумя константами:.

(a) Декодирование адресов памяти для восьми микросхем памяти по 16 Кбайт в соответствующем диапазоне адресов для каждой микросхемы памяти с использованием предположения, что A18 A19 A20 0. Аналогичный тип устройства памяти — электрически стираемое только для чтения — использует сигнал в одном контакт, чтобы определить, читает он или пишет.

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

Микросхема памяти содержит T ячеек, где x — количество контактов адреса. Таблица 14-1 служит справочной информацией для расчета характеристик памяти. Флэш-память EEPROM (электрически стираемое программируемое ПЗУ) представляет собой полупроводниковую память со временем доступа в диапазоне 100 нс по сравнению с доступом к диску

Что на самом деле означает это число? Печально известный предел памяти DOS в 640 Кб состоит из адресов памяти от 0 до 655 359, базовая система ввода-вывода BIOS. Если вы изучите этот байт, вы можете найти одно из следующих значений: хотя бы часть памяти находится в диапазоне от 640 Кб до 1 Мб. Ведь им нужна Видеопамять (в

Рассмотрите машину с 64 МБ физической памяти и 32-разрядным виртуальным адресным пространством. Если размер страницы 4 КБ, каков примерный размер таблицы страниц? (GATE 2001) Таким образом, в физической памяти будет 2 ^ (26-12) 2 ^ 14 страниц. Для ясности концепции см. следующий рисунок.

Чтобы действительно чувствовать себя как дома с шестнадцатеричным, вы должны быть в состоянии понять его в более сложном смысле, в том, что вы должны выяснить, сколько частей 4096. Если вы адресуете каждую ячейку памяти в десятичном виде, диапазон адресов составляет от 0 до 1023. скажем, 64 КБ, что в десятичном виде равно 65536, а в шестнадцатеричном - просто 10000 байт.

Проследите состояния выходов 74LS244 для этой комбинации. Затем проследите выходы 74LS138 для этой комбинации. Микросхема памяти, которая получает «0» в своем выборе микросхемы, активируется для этой области памяти. Тогда продолжайте оттуда, скоро вы это поймете.

Наименьший размер, который может быть у AR и PC, — это количество битов, необходимых для адресации каждого слова в памяти; для A имеется 1024 адреса, а для B — 16К адресов.Обратите внимание, что обычно чаще используется адресация по границам байтов (8 бит).

Иными словами, Шаг 1: вычислить длину адреса в битах (n бит) Шаг 2: вычислить количество ячеек памяти 2^n(бит) Шаг 3: взять количество ячеек памяти и умножить по размеру ячеек памяти в байтах.

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

Каков размер таблицы страниц для процесса, который имеет 256 КБ памяти, начиная с Это составляет 1/256 собственного пространства памяти процесса, поэтому это довольно дорого. (32 МБ) Вычислите количество пропусков TLB, если размер страницы равен 4096, а TLB имеет 8

Существующая тенденция к тому, что данные могут производиться и храниться в больших объемах и Путем правильного выбора оценочных уравнений в (4.3) и меры разреженности в (4.5), [17] Бойд Стивен, Парих Нил, Чу Эрик, Пелеато Борха, Экштейн Джонатан.

Регистр адреса памяти (MAR) в простом микропроцессоре требует достаточного количества двоичных слов, которые используются в качестве адреса для доступа к инструкциям в программе. Если программа начинается с инструкции, хранящейся в ячейке памяти 43, ПК

Первый адрес памяти 2 — 2000h + 1000h 3000h (12288). Первый адрес — (4K), вам нужно 12 бит для адресации всех ячеек памяти в микросхеме. Константинос Константинидес, доктор философии. Электротехнический университет

Пожалуйста, предложите некоторых поставщиков микросхем памяти с адресуемой информацией. как и ключ, так называемая полная ассоциативная память обеспечивает обзор этих адресов. Первоначальные идеи для HASE исследовались как проект PhD [1], b.

Ячейки памяти в ОЗУ и ПЗУ, к которым может обращаться процессор, должны соответствовать различным инструкциям для разных размеров данных. Это может произойти, если для доступа к данным используется инструкция неправильного размера данных.

Компьютерная система имеет 36-битное виртуальное адресное пространство с размером страницы 8 КБ и 4 байтами на страницу. Каков максимальный размер адресуемой физической памяти в этой системе? Вычислите средний размер таблицы страниц в вопросе 3 выше.

Компьютер должен иметь инструкции, способные выполнять четыре типа Пример, имена для адресов ячеек памяти могут быть LOC, PLACE, A, три операнда – A, B и C. Эта трехадресная инструкция может быть представлена .

Если вы определяете количество битов памяти, которые o «Длинное целое» (32 бита/4 байта): целые числа примерно от –2 миллиардов до +2. Последнее – это размер любых нетекстовых объектов (таких как как изображения), вставленные в файл.

232 4294967296, что является количеством байтов в 4 гигабайтах, поэтому вам нужно Существующие ответы объяснили, что формула адресации оперативной памяти: 2 ^ БИТ. Адресуемый. Для каждого дополнительного бита мы можем адресовать вдвое больше памяти.

Если вы определяете количество битов памяти, которые o Действительно массивные целые числа (в диапазоне + или – 9 квинтиллионов). Иногда размер файла указывается в пикселях, и никаких дополнительных вычислений не требуется

Вырос из двадцатилетнего опыта профессора Джонатана Экштейна в преподавании курсов по базам данных для читателей, не имеющих опыта работы с информатикой или программированием. Как рассчитываются рейтинги? Неограниченное хранилище фотографий

Диапазон 16-битных адресов этой памяти обычно составляет от 0 до 65535 или FFFF в шестнадцатеричном формате. должно быть очень просто, и добавление 10000 в FFFF должно быть простым. Итак, вам нужно выяснить, как использовать 17 бит адреса памяти для

ОТДЕЛ ЭЛЕКТРИЧЕСКОЙ И ВЫЧИСЛИТЕЛЬНОЙ ТЕХНИКИ, все возможные диапазоны адресов, которые может занимать микросхема памяти объемом 4 МБ. Определите минимальное количество битов, необходимое для представления обоих слагаемых.

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

Память. • Содержит инструкции и данные. • С k битами адреса и n битами на ячейку. • n обычно имеет длину инструкции 3 x 24 бита + код операции (4 бита) 76 бит.

Память. • Содержит инструкции и данные. • С k битами адреса и n битами на ячейку. • n — обычно. Последовательные адреса относятся к последовательным расположениям байтов.

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

Адрес основного хранилища — это индекс в памяти. 32-битный адрес — это адрес одного байта. Тридцать два провода шины содержат адрес (их много

Презентация и ясность очень важны! Это очень простой шаг. Каков диапазон адресов (от меньшего к большему, в шестнадцатеричном формате) пространства памяти для

Однако у CAM есть следующие проблемы. •.Масштабирование плотности: для одного бита в TCAM требуется 10–12 транзисторов, а для SRAM требуется 4–6 транзисторов. Таким образом, TCAM

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

Существующие ответы объясняют, что формула адресации оперативной памяти: Обратите внимание, что «объем оперативной памяти» также не имеет ничего общего с фактическим размером физического адреса или

Во-вторых, из последнего уравнения (3) следует, что Фундаментальное доказательство сходимости метода переменных направлений множителей для слабо выпуклых

система определяется шириной адресной шины процессора, используемого в системе. Фактическая ширина данных, 10-битный адресный чип имеет размер памяти: 2^10.

36-битная x 32-элементная полностью цифровая память с троичной адресацией содержимого (TCAM) с использованием . Затем следует обзор двух основных теоретических проблем, которые

Инструкции — это операции, выполняемые процессором. Операнды — это сущности, над которыми работает инструкция. Адреса — это места в памяти указанных

Во-вторых, возникает путаница при расчете максимального объема ОЗУ для 32/64-битной ОС/микропроцессора. 32-битный/64-битный адрес/компьютер

Практически все современные системы имеют байтовую адресацию, а это означает, что 32-битная адресация может адресовать около 4 гигабайт (если установлено столько оперативной памяти). @DanielRHicks Virtual

Например, компьютер, который считается "32-разрядным", также обычно допускает использование 32-разрядных адресов памяти; 32-битный компьютер с байтовой адресацией может адресовать 232 4 294 967 296

своего рода адресуемые по содержанию или «ассоциативные» функции в хранении и поиске аппаратных запоминающих устройств с адресацией по содержанию (CAM) нашли свое применение

система с 32-битной адресной шиной может адресовать 2^32 (4 294 967 296) ячеек памяти. Если каждый адрес памяти содержит один байт, адресуемое пространство памяти

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

T — адрес временной ячейки памяти, необходимой для хранения промежуточного результата. БЕЗАДРЕСНЫЕ ИНСТРУКЦИИ. Компьютер со стековой организацией

YASAI: еще одна надстройка для обучения. Элементарное моделирование методом Монте-Карло в Excel. Джонатан Экштейн. Отдел МСИС,. Бизнес-школа и РУТКОР.

(4pts) Рассчитайте диапазон адресов памяти каждой микросхемы памяти (Заполните таблицу). Адресная шина Шина данных 74LS138 A12 303 A16 A18 3. (1 балл) Какова сумма

Чтобы определить диапазон адресов, на который сопоставляется устройство: Этот сегмент памяти размером 2 КБ сопоставляется с местом сброса 8086/8088 (FFFF0H). Ворота И-НЕ

Аннотация. Память с адресацией по содержимому (CAM) — это тип памяти, с которым технологии сталкиваются с проблемами из-за технологии Обзор предлагаемой опто-.

Вот моя проблема: компьютер адресуется по словам с 64-битным размером слова и 4 ГБ памяти. Блок управления может выдавать 184 различные команды…

ПК Apple II имеет 16-разрядную адресную шину и максимальный объем оперативной памяти 64 КБ. Ширина адресной шины определяет размер памяти, которую

Это примечание к выпуску и запись с ответами на известные проблемы относятся к CAM v6.1, выпущенному в ISE 10.1 IP Update 3, и содержат следующую информацию: Общие

технологии упаковки памяти высокой плотности [1]. В этом разделе представлен общий обзор тем полупроводниковых запоминающих устройств, которые рассматриваются в нем.

29.01.2007 Расчеты Стр. 1 РАСЧЕТЫ ПАМЯТИ ПРОФЕССОРА Джонатана Экштейна (адаптировано из документа М. Склара и К. Ийгуна) An

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

Поэтому общая формула для определения размера ПЗУ: 2^m * n, где m — строки адреса, а n — строки данных. 17,7 тыс. просмотров ·. Посмотреть плюсы. ·

Краткий ответ на ваш вопрос: 4 294 967 296 уникальных адресов доступны в 32-битной системе адресации. Биты, байты, слова. Слова: Слово это

Проблема 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.

Почему нет шины данных шириной, равной размеру строки кэша? (6)

Но зачем это нужно? Насколько мне известно, это уже реализовано на аппаратном уровне.

Это неверно. В современной многоядерной системе простая инструкция записи в память не обязательно выполняет запись в основную память (разумеется, не сразу), а инструкция чтения в память не гарантирует чтение последнего значения из основной памяти/других кэшей. Если бы инструкции чтения/записи памяти всегда делали это, кэши памяти были бы пустой тратой времени.

Чтобы гарантировать эти вещи, компилятор (собственного кода) должен генерировать инструкции в ключевых точках, которые вызывают сквозную запись в кеш или аннулирование кеша.

Моя единственная теория состоит в том, что на самом деле это вообще не имеет ничего общего с кешем.

Это неверно. Это все, что связано с кэшем. Проблема в вашем непонимании того, как типичные инструкции для типичного современного многоядерного процессора работают с кешем.

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

Но при наличии нескольких потоков два потока могут выполняться с разными кодами и с разными кэшами памяти. Если есть N ядер, может быть N + 1 различных «версий» данной ассоциации адрес-> значение. Это хаотично. В Java есть два способа справиться с этим:

Объявить переменную volatile, что указывает компилятору использовать (дорогостоящие) инструкции по очистке кеша и/или аннулированию кеша для реализации операций чтения и записи.

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

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

Еще нужно отметить, что в типичной скомпилированной программе происходит еще один вид кэширования: кэширование временных переменных в регистрах.

И, наконец, "стек выражений" в абстрактной машине JVM на самом деле является всего лишь уловкой для определения операционной семантики. Когда байт-коды скомпилированы в собственный код, значения сохраняются либо в аппаратных машинных регистрах, либо в ячейках аппаратной памяти. Стек выражений больше не существует. Стек вызовов/локальные фреймы, конечно же, существуют. Но реализованы они как обычная память.

При промахе кэша ЦП извлекает целую строку кэша из основной памяти в иерархию кэша. (обычно 64 байта на x86_64)

Это делается через шину данных, которая в современных 64-битных системах имеет ширину всего 8 байт. (так как размер слова 8 байт)

EDIT: «Шина данных» означает шину между кристаллом ЦП и модулями DRAM в этом контексте. Эта ширина шины данных не обязательно коррелирует с размером слова.

В зависимости от стратегии сначала извлекается фактически запрошенный адрес, а затем последовательно извлекается остальная часть строки кэша.

Казалось бы, намного быстрее, если бы была шина шириной 64 байта, которая позволяла бы получать всю строку кеша сразу. (это будет в восемь раз больше, чем размер слова)

Возможно, может быть две разные ширины шины данных: одна для стандартной выборки строки кэша, а другая для внешнего оборудования (DMA), которое работает только с доступом к памяти размером слова.

Какие ограничения ограничивают размер шины данных?

Во-первых, доступ к основной памяти стоит очень дорого. В настоящее время процессор с частотой 2 ГГц (самый медленный) имеет 2G тактов (циклов) в секунду. ЦП (в настоящее время виртуальное ядро) может извлекать значение из своих регистров один раз за такт. Поскольку виртуальное ядро ​​состоит из нескольких процессорных блоков (ALU — арифметико-логическое устройство, FPU и т. д.), оно может выполнять определенные инструкции параллельно, если это возможно.

Доступ к основной памяти занимает от 70 до 100 нс (DDR4 немного быстрее). На этот раз в основном выполняется поиск кеша L1, L2 и L3, а затем обращение к памяти (отправка команды контроллеру памяти, который отправляет ее в банки памяти), ожидание ответа и готово.

100 нс означает около 200 тиков. Таким образом, в основном, если бы программа всегда пропускала кеши, к которым обращается каждая память, ЦП проводил бы около 99,5% своего времени (если он только читает память) в бездействии, ожидая памяти.

Для ускорения работы есть кэши L1, L2, L3. Они используют память, размещенную непосредственно на микросхеме, и используют различные типы транзисторных схем для хранения заданных битов. Это требует больше места, больше энергии и дороже, чем основная память, поскольку ЦП обычно производится с использованием более продвинутой технологии, а производственный сбой в памяти L1, L2, L3 может сделать ЦП бесполезным (дефектным), поэтому большие кэши L1, L2, L3 увеличивают частоту ошибок, что снижает доходность, что напрямую снижает рентабельность инвестиций. Таким образом, когда речь идет о доступном размере кеша, существует огромный компромисс.

(в настоящее время создается больше кешей L1, L2, L3, чтобы иметь возможность деактивировать определенные части, чтобы уменьшить вероятность того, что фактический производственный дефект заключается в том, что области кэш-памяти отображают дефект ЦП в целом).

  • Кэш L1: от 1 нс до 2 нс (2–4 цикла)
  • Кэш L2: от 3 нс до 5 нс (6–10 циклов)
  • Кэш L3: от 12 нс до 20 нс (24–40 циклов)
  • ОЗУ: 60 нс (120 циклов)

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

Поэтому кеш значительно ускоряет доступ к памяти (60 нс против 1 нс).

Извлечение значения, сохранение его в кеше для возможности повторного считывания хорошо для переменных, к которым часто обращаются, но для операций копирования в память это все равно будет медленным, поскольку вы просто читаете значение, записываете значение куда-то и никогда снова считывает значение. нет попаданий в кеш, очень медленно (кроме того, это может происходить параллельно, так как у нас неупорядоченное выполнение).

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

Но помимо простой копии памяти был распространен и другой последовательный доступ к памяти. Примером является анализ ряда информации. Наличие массива целых чисел и вычисление суммы, среднего, среднего или даже более простого поиска определенного значения (фильтр/поиск) были еще одним очень важным классом алгоритмов, которые каждый раз запускались на любом ЦП общего назначения.

Итак, при анализе схемы доступа к памяти стало очевидно, что данные очень часто считываются последовательно. Существовала высокая вероятность того, что если программа прочитает значение с индексом i, то программа также прочитает значение i+1. Эта вероятность немного выше, чем вероятность того, что та же программа также прочитает значение i+2 и т. д.

Поэтому, учитывая адрес памяти, было (и остается) хорошей идеей читать вперед и извлекать дополнительные значения. По этой причине существует ускоренный режим.

Доступ к памяти в ускоренном режиме означает, что адрес отправляется и последовательно отправляется несколько значений. Каждая отправка дополнительного значения занимает всего около 10 нс (или даже меньше).

Еще одной проблемой был адрес. Отправка адреса занимает время. Для адресации большой части памяти должны быть отправлены большие адреса.Раньше это означало, что адресная шина была недостаточно большой для отправки адреса за один цикл (тик), и для отправки адреса требовалось более одного цикла, добавляющего дополнительную задержку.

Например, строка кэша размером 64 байта означает, что память разделена на отдельные (неперекрывающиеся) блоки памяти размером 64 байта. 64 байта означают, что начальный адрес каждого блока имеет младшие шесть битов адреса, которые всегда равны нулю. Таким образом, отправка этих шести нулевых битов каждый раз не требуется, увеличивая адресное пространство в 64 раза для любого числа ширины адресной шины (эффект приветствия).

Еще одна проблема, которую решает строка кэша (помимо упреждающего чтения и сохранения/освобождения шести битов на адресной шине), заключается в способе организации кэша. Например, если кеш будет разделен на 8-байтовые (64-битные) блоки (ячейки), необходимо сохранить адрес ячейки памяти, эта ячейка кеша содержит значение вместе с ним. Если адрес также будет 64-битным, это означает, что половина размера кеша используется адресом, что приводит к 100% накладным расходам.

Поскольку строка кэша имеет размер 64 байта, а ЦП может использовать 64-битное - 6-битное = 58-битное (нет необходимости слишком правильно хранить нулевые биты), это означает, что мы можем кэшировать 64-байтовые или 512-битные данные с накладными расходами в 58 бит (11% накладных расходов). На самом деле сохраненные адреса еще меньше, чем это, но есть информация о состоянии (например, является ли строка кэша действительной и точной, грязной и требует записи обратно в оперативную память и т. д.).

Другой аспект заключается в том, что у нас есть наборно-ассоциативный кеш. Не каждая ячейка кэша может хранить определенный адрес, а только их подмножество. Это делает необходимые сохраненные биты адреса еще меньше, обеспечивает параллельный доступ к кешу (каждое подмножество может быть доступно один раз, но независимо от других подмножеств).

Это особенно важно, когда речь идет о синхронизации доступа к кешу/памяти между различными виртуальными ядрами, их независимыми несколькими процессорами на ядро ​​и, наконец, несколькими процессорами на одной материнской плате (на которых есть платы, содержащие до 48 процессоров и более) .

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

Размер строки кэша (64) является разумным компромиссом между большими строками кэша, что делает маловероятным чтение последнего байта в ближайшем будущем. полная строка кеша из памяти (и ее запись обратно), а также накладные расходы на организацию кеша и распараллеливание доступа к кешу и памяти.

Я думаю, что это связано с физическими/стоимостными проблемами. кроме строк данных (64) есть строки адреса (15+) и строки bank_select (3). Плюс другие линии (CS, CAS, RAS. ). Например, см. Техническое описание семейства процессоров Intel® Core™ 6-го поколения. В целом около 90 линий только на один автобус и 180 на два. Есть и другие линейки (PCIe, Dysplay.) Следующий аспект — это пакетное чтение. С помощью bank_select мы можем выбрать один из 8 банков. В пакетном режиме с одной записью адреса во все банки мы считываем данные из всех банков по банкам за тик.

Я провел небольшое исследование и пришел к следующему выводу:

На переменную Volatile можно повлиять двумя способами.

Возьмите этот пример Java:

Без volatile JIT выдаст следующие псевдоинструкции в методе приращения:

Почему произвольные инструкции? из-за оптимизации. конвейер будет заполнен инструкциями, не связанными с R1, чтобы избежать остановок конвейера. Другими словами, вы выходите из строя исполнения. Перезапись i в память также будет предотвращена, если это возможно. Если оптимизатор может понять, что это не нужно, он не будет этого делать, он может пропустить тот факт, что доступ к I осуществляется из другого потока, и к тому времени я все еще будет равен 0.

Когда мы меняем i на volatile, мы получаем:

Volatile предотвращает выполнение не по порядку и не будет пытаться заполнить конвейер для устранения опасностей. И никогда не будет хранить i локально, а локально я имею в виду в регистре или кадре стека. Это гарантирует, что любая операция над i будет включать в себя ЗАГРУЗКУ и СОХРАНЕНИЕ, другими словами, выборку и запись в память. Память, однако, не переводится в основную память, ОЗУ или еще что-то, она подразумевает иерархию памяти. LOADS и STORE используются для всех переменных, изменчивых или нет, но не в одинаковой степени. Как с ними обращаться, зависит от разработчиков микросхем.

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

Обратите внимание, что строка java "i++" не является атомарной. Между командами LOAD и STORE могут происходить разные вещи. Вот почему вам обычно нужны явные блокировки, которые реализуются с помощью volatile, чтобы иметь возможность действительно выполнять атомарные операции над i. Возьмем этот пример:

будет давать непредсказуемые результаты многоядерного процессора. И нужно решить так:

Вывод. По мнению Intel и AMD, согласованность кеша управляется аппаратно, поэтому volatile не имеет ничего общего с кешем. А "летучие элементы вынуждены жить в основной памяти" - это миф. Однако это, вероятно, косвенно вызывает дополнительные аннулирования кеша, так как STORE используются чаще.

Однако я согласен с тем, что volatile вызовет сквозную запись на неизвестных архитектурах.

Как работают строки кэша?

Если строка кэша, содержащая байт или слово, которое вы загружаете, еще не присутствует в кэше, ваш ЦП запросит 64 байта, которые начинаются на границе строки кэша (самый большой адрес ниже нужного, который кратен из 64).

Модули памяти современных ПК передают 64 бита (8 байтов) за один раз в пакете из восьми передач, поэтому одна команда запускает чтение или запись полной строки кэша из памяти. (Размер пакетной передачи DDR1/2/3/4 SDRAM можно настроить до 64 Б; процессоры будут выбирать размер пакетной передачи в соответствии с размером строки кэша, но обычно используется значение 64 Б)

Как правило, если процессор не может предсказать доступ к памяти (и выполнить предварительную выборку), процесс извлечения может занять ~90 наносекунд или ~250 тактовых циклов (от того, как ЦП узнает адрес, до того, как ЦП получит его). данные).

Напротив, попадание в кэш L1 имеет задержку загрузки-использования 3 или 4 цикла, а задержка сохранения-перезагрузки — 4-5 циклов на современных процессорах x86. В других архитектурах все аналогично.

Дополнительная литература: Ульрих Дреппер, Что должен знать каждый программист о памяти. Совет по программной предварительной выборке немного устарел: современные аппаратные предварительные выборки умнее, а гиперпоточность намного лучше, чем во времена P4 (поэтому поток предварительной выборки обычно является пустой тратой времени). Кроме того, на вики-сайте тега x86 есть множество ссылок на производительность для этой архитектуры.

действительно ли ключевое слово volatile в java связано с кешем?

Ваши предположения верны для int — фактически для любого типа данных, который помещается в один кадр стека JVM, который имеет ширину 32 бита.

Как вы определяете количество ячеек памяти?

Шаг 1: вычислить длину адреса в битах (n бит) Шаг 2: вычислить количество ячеек памяти 2^n(бит) Шаг 3: взять количество ячеек памяти и умножить его на размер байта ячейки памяти.

Как найти максимальную адресуемую память?

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

  1. Общая адресуемая память = (2^ширина адресной шины) * ширина шины данных.
  2. То есть машина с 16-битной шиной данных и 32-битной адресной шиной будет иметь.
  3. (2^32)*16 бит доступного хранилища.
  4. или 8 ГБ — посчитайте сами, чтобы доказать это.

Какое максимальное количество ячеек памяти?

Микропроцессор может получить доступ к 216=65536 адресам памяти, независимо от размера данных, хранящихся по каждому адресу памяти. Если каждый адрес памяти содержит один байт (8 бит) данных, то общий размер памяти, к которой можно обращаться напрямую, составляет 216 байт, что составляет 26 КиБ = 64 КиБ.

Сколько ячеек памяти в базовом компьютере?

На практике ЦП поддерживал 20 000 ячеек памяти, и можно было добавить до двух дополнительных модулей внешней памяти, каждая из которых поддерживала 20 000 адресов, всего 60 000 (00000–59999).

Насколько велик адрес памяти?

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

Как рассчитывается размер ПЗУ?

Каков максимальный объем оперативной памяти для Windows 10?

Ограничения физической памяти: Windows 10

Версия Ограничение для X86 Ограничение для X64
Windows 10 Education 4 ГБ 2 ТБ
Windows 10 Pro для рабочих станций 4 ГБ 6 ТБ
Windows 10 Pro 4 ГБ 2 ТБ
Windows 10 Home 4 ГБ 128 ГБ

Сколько байт хранится в ячейке памяти?

1 байт.
Одна ячейка памяти хранит 1 байт (8 бит). Основной единицей хранения памяти является 1 байт. Если вам нужно сохранить 4 байта и поместить первый байт в 0001, последний байт будет в 0004.

Сколько ячеек памяти будет доступно в памяти объемом 4 ГБ?

232 = 4294967296 — количество байтов в 4 гигабайтах, поэтому для 4 ГБ памяти требуется 32-битный адрес.

Какой размер ПЗУ?

Таблица различий

Как найти максимальный предел выделения памяти?

Максимальный объем памяти, который вы можете выделить, зависит от нескольких факторов и может меняться со временем. К ним относятся: 1. Аппаратные ограничения 2. Ограничения ОС 3. Системные параметры 4. Квоты процессов 5. Пространство файла подкачки Кроме того, malloc — очень плохой способ выделения больших блоков памяти.

Как рассчитать объем памяти по заданному диапазону адресов?

1 МБ = 1 Мегабайт = 1024 * 1 КБ = 1 048 576 байт. Существует множество онлайн-конвертеров Hex в Decimal. Калькулятор, встроенный в Windows, также может выполнять преобразование. Для других диапазонов вы снова хотите выполнить вычитание, чтобы определить размер диапазона, а затем применить описанные выше шаги, например

Сколько адресов памяти может хранить мой компьютер?

Краткий ответ: Количество доступных адресов равно меньшему из них: Память состоит из байтов (B). Каждый байт состоит из 8 бит (б). 1 ГБ оперативной памяти на самом деле составляет 1 ГБ (гибибайт, а не гигабайт). Разница в следующем:

Как узнать максимальный объем оперативной памяти на моем компьютере?

Шаг 1. Нажмите одновременно клавиши Windows + R. Затем введите cmd в поле поиска и нажмите Enter. Шаг 2: В окне командной строки введите wmic memphysical get maxcapacity и нажмите Enter. Наконец, на экране отображается максимальный объем оперативной памяти (в килобайтах). Затем вы можете конвертировать килобайты в гигабайты. Это максимальный объем ОЗУ, который у вас

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

Тема ПЗУ
Емкость памяти чипы ПЗУ часто имеют память емкостью от 4 до 8 МБ.
Физический размер ROM может варьироваться по размеру от менее дюйма в длину до нескольких дюймов в длину и ширину, в зависимости от их использования.