Блок управления памятью

редактировать
Этот 68451 MMU можно использовать с Motorola 68010.

Блок управления памятью ( MMU), иногда называемый блоком управления страничной памятью ( PMMU), представляет собой аппаратный блок компьютера, в котором все ссылки на память проходят через себя, в первую очередь выполняющий преобразование адресов виртуальной памяти в физические адреса.

MMU эффективно выполняет виртуальную память управления, обработки и в то же время защиты памяти, кэш - контроль, шины арбитража и, в более простых компьютерных архитектур (особенно 8-битные системы), переключения банков.

СОДЕРЖАНИЕ

  • 1 Обзор
    • 1.1 Записи в таблице страниц
    • 1.2 Преимущества
  • 2 Примеры
    • 2.1 VAX
    • 2.2 ARM
    • 2.3 IBM System / 360 Model 67, IBM System / 370 и последующие
    • 2.4 DEC Alpha
    • 2,5 MIPS
    • 2.6 Вс 1
    • 2.7 PowerPC
    • 2,8 IA-32 / x86
    • 2,9 x86-64
    • 2.10 Системы Unisys MCP (Burroughs B5000)
  • 3 См. Также
  • 4 ссылки

Обзор

Схема работы MMU

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

Записи в таблице страниц

Большинство MMU используют находящуюся в памяти таблицу элементов, называемую « таблицей страниц », содержащую одну « запись таблицы страниц » (PTE) на страницу, для сопоставления номеров виртуальных страниц с номерами физических страниц в основной памяти. Ассоциативный кэш PTE называется резервным буфером трансляции (TLB) и используется, чтобы избежать необходимости обращения к основной памяти каждый раз, когда отображается виртуальный адрес. Другие MMU могут иметь частный массив памяти или регистры, которые содержат набор записей таблицы страниц. Номер физической страницы в сочетании со смещением страницы дает полный физический адрес.

PTE может также включать информацию о том, была ли страница записана (« грязный бит »), когда она использовалась в последний раз («доступный бит» для алгоритма замены наименее недавно использованной (LRU) страницы ), какой вид процессы ( пользовательский режим или режим супервизора ) могут читать и записывать его, а также следует ли его кэшировать.

Иногда PTE запрещает доступ к виртуальной странице, возможно, потому, что для этой виртуальной страницы не выделена физическая оперативная память (RAM). В этом случае MMU сообщает CPU об ошибке страницы. Затем операционная система (ОС) обрабатывает ситуацию, возможно, пытаясь найти запасной фрейм ОЗУ и настроить новый PTE, чтобы сопоставить его с запрошенным виртуальным адресом. Если нет свободной оперативной памяти, может потребоваться выбрать существующую страницу (известную как «жертва»), используя некоторый алгоритм замены, и сохранить ее на диск (процесс, называемый « разбиение на страницы »). С некоторыми MMU также может быть нехватка PTE, и в этом случае ОС должна будет освободить один для нового сопоставления.

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

Преимущества

VLSI VI475 MMU "Apple HMMU" из Macintosh II, используемого с Motorola 68020

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

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

В некоторых ранних конструкциях микропроцессоров управление памятью выполнялось отдельной интегральной схемой, такой как VLSI Technology VI475 (1986), Motorola 68851 (1984), используемая с процессором Motorola 68020 в Macintosh II, или Z8010 и Z8015 (1985). используется с процессорами семейства Zilog Z8000. Более поздние микропроцессоры (такие как Motorola 68030 и Zilog Z280 ) размещали MMU вместе с ЦП на той же интегральной схеме, как и микропроцессоры Intel 80286 и более поздние версии x86.

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

Примеры

Большинство современных систем разделяют память на страницы размером 4-64 КБ, часто с возможностью использования так называемых огромных страниц размером 2 МБ или 1 ГБ (часто возможны оба варианта). Переводы страниц кэшируются в резервном буфере перевода (TLB). Некоторые системы, в основном более старые разработки RISC, попадают в ловушку ОС, когда перевод страницы не найден в TLB. В большинстве систем используется аппаратный обходчик деревьев. Большинство систем позволяют отключать MMU, но некоторые отключают MMU при захвате кода ОС.

VAX

Страницы VAX имеют размер 512 байт, что очень мало. ОС может обрабатывать несколько страниц как одну большую страницу. Например, Linux на VAX группирует вместе восемь страниц. Таким образом, система рассматривается как имеющая страницы размером 4 КБ. VAX делит память на четыре фиксированных области размером 1 ГБ каждая. Они есть:

P0 пространство
Используется для универсальной памяти для каждого процесса, такой как кучи.
Пространство P1
(Или пространство управления), которое также относится к отдельным процессам и обычно используется для супервизора, исполнительной системы, ядра, пользовательских стеков и других структур управления процессами, которыми управляет операционная система.
S0 пространство
(Или системное пространство), которое является глобальным для всех процессов и хранит код и данные операционной системы, независимо от того, выгружены они или нет, включая таблицы.
S1 пространство
Который не используется и «зарезервирован для цифрового ».

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

РУКА

Процессоры приложений на основе архитектуры ARM реализуют MMU, определенный архитектурой системы виртуальной памяти ARM. Текущая архитектура определяет PTE для описания страниц размером 4 КБ и 64 КБ, разделов 1 МБ и суперсекций 16 МБ ; в старых версиях также была определена крошечная страница размером 1 КБ. ARM использует двухуровневую таблицу страниц при использовании страниц размером 4 КБ и 64 КБ или только одноуровневую таблицу страниц для разделов размером 1 МБ и разделов 16 МБ.

Обновления TLB выполняются автоматически аппаратными средствами перемещения таблицы страниц. PTE включают в себя разрешение доступа для чтения / записи на основе привилегий, информации о кэшируемости, бита NX и незащищенного бита.

IBM System / 360 Model 67, IBM System / 370 и последующие

Системы IBM / 360 Model 67, который был введен августа 1965, включал MMU называется окно перевод динамический адрес (DAT). У него есть необычная особенность хранения используемых и грязных битов вне таблицы страниц (вместе с четырехбитным ключом защиты для всех процессоров S / 360). Они относятся к физической памяти, а не к виртуальной памяти, и доступ к ним осуществляется с помощью специальных инструкций. Это снижает накладные расходы для ОС, которой в противном случае потребовалось бы распространять используемые и грязные биты из таблиц страниц в более физически ориентированную структуру данных. Это упрощает виртуализацию на уровне ОС, позже названную паравиртуализацией.

Начиная с августа 1972 года, IBM System / 370 имеет аналогичный MMU, хотя изначально он поддерживал только 24-битное виртуальное адресное пространство, а не 32-битное виртуальное адресное пространство System / 360 Model 67. Он также сохраняет доступ к и грязные биты за пределами таблицы страниц. В начале 1983 года архитектура System / 370-XA расширила виртуальное адресное пространство до 31 разряда, а в 2000 году была представлена 64-разрядная архитектура z / с расширением адресного пространства до 64 бит; те продолжают хранить использованные и грязные биты за пределами таблицы страниц.

DEC Alpha

Процессор DEC Alpha делит память на страницы по 8 КБ. После промаха TLB низкоуровневый машинный код встроенного ПО (здесь называется PALcode ) просматривает трехуровневую таблицу страниц с древовидной структурой. Адреса разбиты следующим образом: 21 бит не используется, 10 бит для индексации корневого уровня дерева, 10 бит для индексации среднего уровня дерева, 10 бит для индексации конечного уровня дерева и 13 бит, которые проходят через на физический адрес без изменений. Поддерживаются полные биты разрешений на чтение / запись / выполнение.

MIPS

Архитектура MIPS поддерживает от одной до 64 записей в TLB. Количество записей TLB настраивается при конфигурации ЦП перед синтезом. Записи TLB двойные. Каждая запись TLB отображает номер виртуальной страницы (VPN2) на один из двух номеров кадров страницы (PFN0 или PFN1) в зависимости от младшего бита виртуального адреса, который не является частью маски страницы. Этот бит и биты маски страницы не хранятся в VPN2. Каждая запись TLB имеет свой собственный размер страницы, который может быть любым значением от 1 КБ до 256 МБ, кратным четырем. Каждый PFN в записи TLB имеет атрибут кэширования, грязный и действительный бит состояния. VPN2 имеет глобальный бит состояния и идентификатор, назначенный ОС, который участвует в сопоставлении записи TLB виртуального адреса, если глобальный бит состояния установлен в ноль. PFN хранит физический адрес без битов маски страницы.

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

MIPS32 и MIPS32r2 поддерживают 32 бита виртуального адресного пространства и до 36 бит физического адресного пространства. MIPS64 поддерживает до 64 бит виртуального адресного пространства и до 59 бит физического адресного пространства.

Вс 1

Первоначальный Sun 1 - это одноплатный компьютер, построенный на микропроцессоре Motorola 68000 и представленный в 1982 году. Он включает в себя оригинальный блок управления памятью Sun 1, который обеспечивает преобразование адресов, защиту памяти, совместное использование памяти и распределение памяти для нескольких процессов, запущенных на ЦП.. Весь доступ процессора к частной бортовой памяти, внешние Multibus памяти, на борту I / O и работает Multibus ввода / вывода через MMU, где перевод и защита адресов выполняются в единой форме. MMU аппаратно реализован на плате ЦП.

MMU состоит из регистра контекста, карты сегментов и карты страниц. Виртуальные адреса ЦП преобразуются в промежуточные адреса картой сегментов, которые, в свою очередь, преобразуются в физические адреса картой страниц. Размер страницы составляет 2 КБ, а размер сегмента - 32 КБ, что дает 16 страниц на сегмент. Одновременно можно отображать до 16 контекстов. Максимальное логическое адресное пространство для контекста составляет 1024 страницы или 2 МБ. Максимальный физический адрес, который может быть отображен одновременно, также составляет 2 МБ.

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

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

PowerPC

В PowerPC G1, G2, G3 и G4 страницы обычно имеют размер 4 КБ. После промаха TLB стандартный MMU PowerPC начинает два одновременных поиска. Один поиск пытается сопоставить адрес с одним из четырех или восьми регистров трансляции адреса блока данных (DBAT) или четырех или восьми регистров трансляции адреса блока инструкций (IBAT), в зависимости от ситуации. Регистры BAT могут отображать линейные блоки памяти размером до 256 МБ и обычно используются ОС для отображения больших частей адресного пространства для собственного использования ядром ОС. Если поиск BAT завершается успешно, другой поиск останавливается и игнорируется.

Другой поиск, не поддерживаемый напрямую всеми процессорами в этом семействе, осуществляется через так называемую « инвертированную таблицу страниц », которая действует как хешированное внешнее расширение TLB. Сначала четыре верхних бита адреса используются для выбора одного из 16 сегментных регистров. Затем 24 бита из сегментного регистра заменяют эти четыре бита, создавая 52-битный адрес. Использование сегментных регистров позволяет нескольким процессам совместно использовать одну и ту же хеш-таблицу.

52-битный адрес хешируется, а затем используется в качестве индекса во внекристальной таблице. Там группа записей таблицы на восьми страницах сканируется на предмет соответствия. Если совпадений нет из-за чрезмерного количества хеш-коллизий, процессор снова пытается использовать немного другую хеш-функцию. Если это тоже не удается, ЦП переходит в ОС (с отключенным MMU), чтобы проблема могла быть решена. ОС необходимо удалить запись из хеш-таблицы, чтобы освободить место для новой записи. ОС может сгенерировать новую запись из более нормальной древовидной таблицы страниц или из структур данных для каждого отображения, которые, вероятно, будут медленнее и эффективнее по пространству. Поддержка запрета на выполнение находится в сегментных регистрах, что обеспечивает гранулярность 256 МБ.

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

Также несколько медленно удаляются записи таблицы страниц процесса. ОС может избежать повторного использования значений сегментов, чтобы отложить решение этой проблемы, или она может решить нести трату памяти, связанную с хеш-таблицами для каждого процесса. Микросхемы G1 не ищут записи в таблице страниц, но они генерируют хэш, ожидая, что ОС будет искать стандартную хеш-таблицу с помощью программного обеспечения. ОС может писать в TLB. Чипы G2, G3 и ранние G4 используют оборудование для поиска в хеш-таблице. Последние чипы позволяют ОС выбирать любой метод. На микросхемах, которые делают это необязательным или не поддерживают его вообще, ОС может использовать исключительно древовидную таблицу страниц.

IA-32 / x86

Архитектура x86 развивалась в течение очень долгого времени при сохранении полной совместимости программного обеспечения, даже для кода ОС. Таким образом, MMU чрезвычайно сложен с множеством различных возможных режимов работы. Здесь описывается нормальная работа традиционного процессора 80386 и его преемников ( IA-32 ).

ЦП в основном делит память на страницы по 4 КБ. Сегментные регистры, лежащие в основе старых конструкций MMU 8088 и 80286, не используются в современных операционных системах, за одним важным исключением: доступ к данным, зависящим от потока, для приложений или данным, зависящим от процессора, для ядер ОС, который осуществляется с явным использованием Сегментные регистры FS и GS. Весь доступ к памяти включает в себя сегментный регистр, выбираемый в соответствии с выполняемым кодом. Сегментный регистр действует как индекс в таблице, который обеспечивает смещение, добавляемое к виртуальному адресу. За исключением случаев использования FS или GS, ОС гарантирует, что смещение будет нулевым.

После добавления смещения адрес маскируется, чтобы его длина не превышала 32 бита. Результат можно найти с помощью древовидной таблицы страниц, при этом биты адреса разделяются следующим образом: 10 бит для ветви дерева, 10 бит для листьев ветви и 12 младших битов непосредственно скопировал в результат. Некоторые операционные системы, такие как OpenBSD с его функцией W ^ X и Linux с патчами Exec Shield или PaX, также могут ограничивать длину сегмента кода, как указано в регистре CS, чтобы запретить выполнение кода в изменяемых областях адресное пространство.

Незначительные изменения MMU, представленные с Pentium, позволили получить очень большие страницы размером 4 МБ, пропустив нижний уровень дерева (это оставляет 10 бит для индексации первого уровня иерархии страниц, а оставшиеся 10 + 12 бит непосредственно копируются в результат.). Незначительные изменения MMU, представленные с Pentium Pro, представили функцию расширения физического адреса (PAE), позволяющую 36-битным физическим адресам с 2 + 9 + 9 битами для трехуровневых таблиц страниц и 12 младшими битами, непосредственно копируемыми в результат. Большие страницы ( 2 МБ) также доступны при пропуске нижнего уровня дерева (в результате 2 + 9 бит для двухуровневой иерархии таблиц, а оставшиеся 9 + 12 младших битов копируются напрямую). Кроме того, таблица атрибутов страницы позволяла определять кэшируемость, просматривая несколько старших битов в небольшой таблице на процессоре.

Первоначально поддержка без выполнения была предоставлена ​​только для отдельных сегментов, что делало ее очень неудобной в использовании. Более поздние чипы x86 предоставляют бит неисполнения для каждой страницы в режиме PAE. Механизмы W ^ X, Exec Shield и PaX, описанные выше, имитируют постраничную поддержку неисполнения на машинах с процессорами x86, в которых отсутствует бит NX, путем установки длины сегмента кода с потерей производительности и уменьшением доступного адресного пространства..

x86-64

Гетерогенная системная архитектура (HSA) создает единое виртуальное адресное пространство для процессоров, графических процессоров и DSP, устраняя трюки сопоставления и копирования данных.

x86-64 - это 64-битное расширение x86, которое почти полностью устраняет сегментацию в пользу плоской модели памяти, используемой почти во всех операционных системах для процессоров 386 или новее. В длинном режиме игнорируются все смещения сегментов, кроме сегментов FS и GS. При использовании страниц размером 4 КБ дерево таблицы страниц имеет четыре уровня вместо трех.

Виртуальные адреса делятся следующим образом: 16 битов не используются, по девять бит для четырех уровней дерева (всего 36 бит) и 12 младших битов напрямую копируются в результат. Для страниц размером 2 МБ имеется только три уровня таблицы страниц, всего 27 бит, используемых при подкачке страниц, и 21 бит смещения. Некоторые новые процессоры также поддерживают страницу размером 1 ГБ с двумя уровнями подкачки страниц и 30 битами смещения.

CPUID можно использовать, чтобы определить, поддерживаются ли страницы размером 1 ГБ. Во всех трех случаях требуется, чтобы 16 старших битов были равны 48-му биту, или, другими словами, младшие 48 битов имеют знаковое расширение до старших битов. Это сделано для обеспечения возможности расширения адресуемого диапазона в будущем без ущерба для обратной совместимости. На всех уровнях таблицы страниц запись в таблице страниц включает бит неисполнения.

Системы Unisys MCP (Burroughs B5000)

Burroughs B5000 с 1961 был первой коммерческой системой для поддержки виртуальной памяти (после Атласа ), даже если он не имеет MMU Это обеспечивает две функции в MMU - виртуальные адреса памяти и защиту памяти - с другой архитектурным подходом.

Во-первых, при отображении адресов виртуальной памяти вместо MMU системы MCP основаны на дескрипторах. Каждому выделенному блоку памяти дается главный дескриптор со свойствами блока (т. Е. Размером, адресом и наличием в памяти). Когда делается запрос на доступ к блоку для чтения или записи, оборудование проверяет его присутствие через бит присутствия (pbit) в дескрипторе.

Бит 1 указывает на наличие блока. В этом случае доступ к блоку можно получить через физический адрес в дескрипторе. Если бит pbit равен нулю, для MCP (операционной системы) генерируется прерывание, чтобы обеспечить наличие блока. Если поле адреса равно нулю, это первый доступ к этому блоку, и он выделяется (бит инициализации). Если адресное поле не равно нулю, это дисковый адрес блока, который был ранее развернут, поэтому блок извлекается с диска, бит устанавливается в единицу, а адрес физической памяти обновляется, чтобы указывать на блок. в памяти (еще pbit). Это делает дескрипторы эквивалентными записи в таблице страниц в системе MMU. Производительность системы можно контролировать по количеству битов в битах. Начальные биты указывают на начальные распределения, но высокий уровень других битов указывает на то, что система может перегружаться.

Таким образом, все распределение памяти полностью автоматическое (одна из особенностей современных систем), и нет другого способа выделить блоки, кроме этого механизма. Нет таких вызовов, как malloc или dealloc, поскольку блоки памяти также автоматически отбрасываются. Эта схема также является ленивой, поскольку блок не будет выделен до тех пор, пока на него не будет ссылаться. Когда память почти заполнена, MCP проверяет рабочий набор, пытаясь выполнить сжатие (поскольку система сегментирована, а не выгружена на страницы), освобождая сегменты только для чтения (например, сегменты кода, которые могут быть восстановлены из их исходной копии) и, как в крайнем случае, выкатывание сегментов грязных данных на диск.

Другой способ, которым B5000 выполняет функцию MMU, - это защита. Поскольку все обращения осуществляются через дескриптор, оборудование может проверять, что все обращения находятся в установленных пределах, а в случае записи - что процесс имеет разрешение на запись. Система MCP изначально безопасна и, следовательно, не требует MMU для обеспечения такого уровня защиты памяти. Дескрипторы доступны только для чтения пользовательским процессам и могут обновляться только системой (аппаратным обеспечением или MCP). (Слова, тег которых является нечетным числом, доступны только для чтения; дескрипторы имеют тег 5, а кодовые слова имеют тег 3.)

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

Единственный другой аспект - производительность - обеспечивают ли системы на основе MMU или не на основе MMU более высокую производительность? Системы MCP могут быть реализованы поверх стандартного оборудования, у которого есть MMU (например, стандартный ПК). Даже если реализация системы каким-то образом использует MMU, это вообще не будет видно на уровне MCP.

Смотрите также

использованная литература

Последняя правка сделана 2024-01-02 06:55:39
Содержание доступно по лицензии CC BY-SA 3.0 (если не указано иное).
Обратная связь: support@alphapedia.ru
Соглашение
О проекте