Jump to content

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

MMU 68451 , который можно использовать с Motorola 68010.

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

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

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

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

До того, как системы VM получили широкое распространение в 1990-х годах, более ранние конструкции MMU были более разнообразными. Распространенным среди них была постраничная трансляция, которая была похожа на современную подкачку по запросу тем, что использовала блоки фиксированного размера, но имела список страниц фиксированного размера, которые делили память; это означало, что размер блока зависел от количества страниц и установленной памяти. Другой распространенный метод, встречающийся в основном на более крупных машинах, — это сегментированная трансляция, которая позволяла использовать блоки памяти переменного размера, которые лучше отображались на программных запросах. Это было эффективно, но не очень хорошо отображалось в виртуальной памяти. Некоторые ранние системы, особенно 8-битные , использовали очень простые MMU для переключения банков .

Схема работы MMU [2] : 186 и далее.

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

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

Другие MMU могут иметь собственный массив памяти. [5] регистры, [6] или статическая оперативная память [7] который содержит набор картографической информации.

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

Номер физической страницы объединяется со смещением страницы, чтобы получить полный физический адрес. [3]

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

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

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

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

[ редактировать ]
VLSI VI475 MMU Apple HMMU от Macintosh II, используемый с Motorola 68020

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

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

Однако постраничное сопоставление вызывает еще одну проблему — внутреннюю фрагментацию . Это происходит, когда программа запрашивает блок памяти, который некорректно отображается на странице, например, если программа запрашивает буфер размером 1 КБ для выполнения работы с файлом. В этом случае запрос приводит к тому, что вся страница выделяется, даже если когда-либо будет использоваться только 1 КБ страницы; если страницы больше 1 КБ, оставшаяся часть страницы теряется. Если выполняется много небольших выделений такого типа, память может быть израсходована, даже если большая часть ее остается пустой. [4]

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

Старые концепции

[ редактировать ]

Хотя эта статья посвящена современным MMU, обычно основанным на подкачке по запросу, ранние системы использовали базовую и граничную адресацию, которая в дальнейшем превратилась в сегментацию , или использовали фиксированный набор блоков вместо их загрузки по требованию. Разница между этими двумя подходами заключается в размере непрерывного блока памяти; страничные системы разбивают основную память на ряд блоков одинакового размера, тогда как сегментированные системы обычно допускают переменный размер. [4]

Сегментированный перевод

[ редактировать ]

Ранние системы управления памятью, часто реализованные в программном обеспечении, выделяли часть памяти для хранения серии отображений. Они состояли из пар значений « база» и « предел» , хотя использовалось много других терминов. Когда операционная система запрашивала память для загрузки программы или программа запрашивала больше памяти, например, для хранения данных из файла, она вызывала библиотеку обработки памяти . При этом проверялись сопоставления для поиска области в основной памяти, достаточно большой для размещения запроса. Если такой блок был найден, в таблицу вносилась новая запись. С этого момента, когда эта программа обращалась к памяти, все ее адреса компенсировались базовым значением. Когда программа завершает работу с запрошенной ею памятью и освобождает ее или программа завершает работу, связанные с ней записи освобождаются. [4]

Этот стиль доступа со временем стал обычным явлением на мэйнфреймов . рынке [ нужна ссылка ] и был известен как сегментированный перевод , хотя и здесь используются различные термины. Преимущество этого стиля заключается в простоте; блоки памяти являются непрерывными, поэтому необходимо хранить только два значения: базовое и предельное. Каждая запись соответствует блоку памяти, используемому одной программой, и трансляция невидима для программы, которая видит, что основная память начинается с нулевого адреса и расширяется до некоторого фиксированного значения. [4]

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

Сегментация широко использовалась на микрокомпьютерных платформах 1980-х годов. Среди MMU, в которых использовалась эта концепция, были Motorola 68451 и Signetics 68905. [4] но существует множество других примеров. Он также поддерживался в реализациях программного обеспечения; Одним из примеров является MultiFinder от Apple , выпущенный в 1987 году для платформы Macintosh . Каждой программе был выделен объем памяти, который был предварительно выбран в Finder , и перевод из виртуальной в физическую выполнялся внутри программ с помощью дескрипторов . [12]

Более распространенным примером является процессор Intel 8088, используемый в IBM PC . Это реализовало очень простой MMU внутри ЦП с четырьмя регистрами процессора, хранящими базовые значения, к которым программа обращается напрямую. Они отображали только верхние 4 бита 20-битного адреса, и не было эквивалента предела, который представлял собой просто нижние 16 бит адреса и, следовательно, фиксированные 64 КБ. [13] В более поздних статьях серии об архитектуре x86 использовались другие подходы.

Сегментация плюс пейджинг

[ редактировать ]

Некоторые системы, такие как GE 645 и его преемники, использовали как сегментацию, так и пейджинг. Таблица сегментов вместо записей для каждого сегмента, дающих физический базовый адрес и длину сегмента, содержит записи, дающие физический базовый адрес таблицы страниц для сегмента, в дополнение к длине сегмента. Физическая память разделена на страницы фиксированного размера, и для пейджинга по требованию на основе сегментов и страниц используются те же методы, что и для подкачки по требованию.

Постраничный перевод

[ редактировать ]

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

Рассмотрим конструкцию процессора с 24-битной адресацией, как у оригинального Motorola 68000 . В такой системе MMU разбивает виртуальный адрес на части, например, 13 младших битов индекса страницы и оставшиеся 11 старших битов номера сегмента. В результате получается список из 2048 страниц по 8 КБ каждая. [4] В этом подходе запросы памяти приводят к тому, что этой программе предоставляется одна или несколько страниц, которые могут не быть смежными в основной памяти. MMU хранит в основной памяти список номеров страниц, первоначально выраженных программой, и фактический номер страницы. Когда он пытается получить доступ к памяти, MMU считывает номер сегмента из шины памяти процессора, находит соответствующую запись для этой программы в своей внутренней памяти и выражает отображаемую версию значения на шине памяти, в то время как младшие биты исходного значения адрес передаются без изменений. Как и в случае с сегментацией, программы рассматривают свою память как один непрерывный блок. [4]

У этого подхода есть два недостатка. Во-первых, по мере расширения виртуального адресного пространства увеличивается и объем памяти, необходимой для хранения сопоставлений. Например, в 68020 адреса имеют ширину 32 бита, что означает, что номер сегмента для той же страницы размером 8 КБ теперь составляет старшие 19 бит, а размер таблицы сопоставления увеличивается до 512 КБ. [4] намного превосходит то, что можно было реализовать на аппаратном уровне по разумной цене в 1980-х годах. Эту проблему можно решить, увеличив размер страниц, скажем, 64 КБ вместо 8. Теперь индекс страницы использует 16 бит, а результирующая таблица страниц составляет 64 КБ, что более удобно. Переход к большему размеру страницы приводит ко второй проблеме — повышенной внутренней фрагментации. Программа, которая генерирует серию запросов на малые блоки, будет назначать большие блоки и тем самым тратить большие объемы памяти. [4]

Постраничный подход к трансляции широко использовался микропроцессорами MMU в 1970-х и начале 80-х годов, включая Signetics 68905 (который мог работать в любом режиме). И Signetics, и Philips выпустили версию 68000, которая объединила 68905 на одном физическом чипе 68070. [4]

Другое использование этого метода — увеличение размера физического адреса, когда виртуальный адрес слишком мал. Например, PDP-11 изначально имел 16-битный адрес, что сделало его слишком маленьким по мере увеличения размеров памяти в 1970-х годах. Проблема была решена путем расширения шины физической памяти до 18 бит и использования MMU для добавления еще двух битов на основе других выводов процессорной шины, чтобы указать, какая программа обращается к памяти. [14]

Другое использование этой же техники, хотя и называлось не пейджингом, а переключением банков , широко использовалось в ранних 8-битных микропроцессорах , таких как MOS 6502 . Например, Atari MMU будет выражать дополнительные биты на адресной шине для выбора между несколькими банками памяти DRAM в зависимости от того, какой из чипов в данный момент активен, обычно ЦП или ANTIC . Это было использовано для расширения доступной памяти Atari 130XE до 128 КБ. [15] Commodore 128 использовал аналогичный подход.

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

IBM System/360 Model 67, IBM System/370 и его преемники

[ редактировать ]

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

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

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

P0 пространство
Используется для памяти общего назначения для каждого процесса, например кучи.
Место P1
(Или пространство управления), которое также предназначено для каждого процесса и обычно используется для супервизора, исполнительной власти, ядра , пользовательских стеков и других структур управления каждым процессом, управляемых операционной системой.
S0 пространство
(Или системное пространство), которое является глобальным для всех процессов и хранит код и данные операционной системы, независимо от того, подкачиваемые они или нет, включая таблицы страниц.
пространство S1
Который не используется и «Зарезервирован для цифровых технологий ». [18] : 200–201 

Таблицы страниц представляют собой большие линейные массивы. [18] : 209–215  Обычно это было бы очень расточительно, если адреса используются на обоих концах возможного диапазона, но таблицы страниц для пространств P0 и P1 хранятся в выгружаемом пространстве S0. [18] : 211–212  Таким образом, фактически существует двухуровневое дерево , позволяющее приложениям иметь разреженную структуру памяти, не тратя много места на неиспользуемые записи таблицы страниц. В отличие от записей таблицы страниц в большинстве MMU, в записях таблицы страниц в VAX MMU отсутствует бит доступа . [18] : 203–205  Операционные системы, реализующие подкачку, должны найти какой-то способ эмулировать бит, к которому осуществляется доступ, если они хотят работать эффективно. Как правило, ОС периодически отменяет сопоставление страниц, чтобы можно было использовать ошибки отсутствия страницы, чтобы позволить ОС установить бит доступа.

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

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

ДЕК Альфа

[ редактировать ]

Процессоры DEC Alpha делят память на 8 КБ , 16 КБ , 32 КБ или 64 КБ ; размер страницы зависит от процессора. [20] : 3–2  [21] : 3–2  страницы. После промаха TLB низкоуровневый машинный код прошивки (здесь называемый PALcode ) проходит по таблице страниц.

AXP Коды OpenVMS PALcode и DEC OSF/1 PALcode используют трехуровневую таблицу страниц с древовидной структурой. Адреса разбиваются на неиспользуемый набор битов (содержащий то же значение, что и самый верхний бит индекса корневого уровня дерева), набор битов для индексации корневого уровня дерева, набор битов для индексации. средний уровень дерева, набор битов для индексации конечного уровня дерева и оставшиеся биты, которые передаются по физическому адресу без изменений, индексируя байт внутри страницы. Размеры полей зависят от размера страницы; все три поля индекса дерева имеют одинаковый размер. [20] : 3-2–3-3  [21] : 3-1–3-2  OpenVMS AXP PALcode поддерживает полные биты разрешений на чтение и запись для режимов пользователя, супервизора, руководителя и ядра, а также поддерживает биты ошибок чтения/записи/выполнения. [20] : 3-3–3-6  Код DEC OSF/1 PALcode поддерживает полные биты разрешения на чтение и запись для пользовательского режима и режима ядра, а также поддерживает биты ошибок чтения/записи/выполнения. [21] : (II-Б) 3-3-3-6

Код Windows NT AXP PALcode может проходить либо по одноуровневой таблице страниц в виртуальном адресном пространстве, либо по двухуровневой таблице страниц в физическом адресном пространстве. Старшие 32 бита адреса игнорируются. Для одноуровневой таблицы страниц адреса разбиваются на набор битов для индексации таблицы страниц и оставшиеся биты, которые передаются по физическому адресу без изменений, индексируя байт внутри страницы. Для двухуровневой таблицы страниц адреса разбиваются на набор битов для индексации корневого уровня дерева, набор битов для индексации верхнего уровня дерева, набор битов для индексации конечного уровня дерева. дерево, а оставшиеся биты, которые передаются по физическому адресу без изменений, индексируют байт на странице. Размеры полей зависят от размера страницы. [22] : 3-2–3-4  PAL-код Windows NT AXP поддерживает доступ к странице только из режима ядра или из режима пользователя и ядра, а также поддерживает ошибку при записи бита. [22] : 3-5 

Архитектура 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 бит физического адресного пространства.

Солнце ММУ

[ редактировать ]

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

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

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

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

Рабочие станции Sun -2 аналогичны; они построены на базе микропроцессора Motorola 68010 и имеют аналогичный блок управления памятью со страницами по 2 КБ и по 32 КБ сегментами . Регистр контекста содержит 3-битный системный контекст, используемый в состоянии супервизора, и 3-битный пользовательский контекст, используемый в состоянии пользователя. [24]

Рабочие станции Sun-3 , за исключением Sun-3/80, Sun-3/460, Sun-3/470 и Sun-3/480, построены на базе Motorola 68020 и имеют аналогичный блок управления памятью. Размер страницы увеличен до 8 КБ . (Поздние модели построены на базе Motorola 68030 и используют встроенный MMU 68030.)

Рабочие станции Sun-4 построены на базе различных микропроцессоров SPARC и имеют блок управления памятью, аналогичный блоку управления рабочей памятью Sun-3.

В 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 используют аппаратное обеспечение для поиска в хеш-таблице. Новейшие чипы позволяют ОС выбирать любой метод. На чипах, которые делают это необязательным или не поддерживают его вообще, ОС может использовать исключительно древовидную таблицу страниц.

Архитектура 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, путем установки длины сегмента кода с потерей производительности и сокращением доступного адресного пространства. .

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

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

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

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

Альтернативы

[ редактировать ]

Серия Burroughs B5000, системы B6500/Unisys MCP

[ редактировать ]

Burroughs B5000 1961 года была первой коммерческой системой, поддерживающей виртуальную память (после Atlas ), хотя у нее нет MMU. [26] Он, его преемники, а также Burroughs B6500 и его преемники обеспечивают две функции MMU — адреса виртуальной памяти и защиту памяти — с другим архитектурным подходом.

Во-первых, при отображении адресов виртуальной памяти вместо использования MMU эти машины основаны на дескрипторах . Самый верхний бит 48-битного слова памяти в системах Burroughs B5000/B5500/B5700 указывает, является ли слово операндом (числовым или логическим значением) или дескриптором/управляющим словом; дескрипторы доступны только для чтения пользовательским процессам и могут обновляться только системой (аппаратным обеспечением или операционной системой). Слова памяти в системе Burroughs B6500 и ее преемниках имеют 48 битов данных и 3 бита тегов; слова, тегом которых является нечетное число, доступны пользовательским процессам только для чтения: дескрипторы имеют тег 5, а кодовые слова имеют тег 3.

Каждому выделенному блоку памяти присваивается главный дескриптор со свойствами блока (т. е. его физическим адресом, его размером и наличием его в памяти). Все ссылки на код и данные выполняются с использованием дескриптора; когда делается запрос на доступ к блоку для чтения или записи, аппаратное обеспечение проверяет его наличие через бит присутствия (pbit) в дескрипторе.

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

Таким образом, все распределение памяти происходит полностью автоматически (одна из особенностей современных систем). [27] ) и нет другого способа выделить блоки, кроме этого механизма. Здесь нет таких вызовов, как malloc или Dealloc, поскольку блоки памяти также автоматически отбрасываются. Схема также является ленивой , поскольку блок не будет выделен до тех пор, пока на него не будет сделана ссылка. Когда память почти заполнена, MCP проверяет рабочий набор, пытаясь уплотнить (поскольку система сегментирована, а не подкачивается), освобождая сегменты, доступные только для чтения (например, сегменты кода, которые можно восстановить из исходной копии) и, в качестве В крайнем случае, выкатываем грязные сегменты данных на диск.

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

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

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

См. также

[ редактировать ]
  1. ^ Блок управления памятью в Бесплатном онлайн-словаре по вычислительной технике
  2. ^ Таненбаум, Эндрю С. (2009). Современные операционные системы . Река Аппер-Сэддл (Нью-Джерси): Прентис-Холл. ISBN  978-0-13-600663-3 .
  3. ^ Перейти обратно: а б с д и Фрэнк Уеда (2009). «Лекция 7: Управление памятью» (PDF) . CSE 120: Принципы операционных систем . Калифорнийский университет в Сан-Диего . Проверено 4 декабря 2013 г.
  4. ^ Перейти обратно: а б с д и ж г час я дж к л м Зер, Грегг (ноябрь 1986 г.). «Блоки управления памятью для архитектур 68000» (PDF) . Байт . стр. 127–135.
  5. ^ Руководство по процессору Spectra 70 70-46 (PDF) . РКА . Март 1968 г., стр. 5–6 . Проверено 15 августа 2013 г.
  6. ^ Справочное руководство, компьютер SDS 940 (PDF) . Системы научных данных . 1966. стр. 8–10.
  7. ^ Руководство по проектированию аппаратного обеспечения платы ЦП 2060 (PDF) . Сан Микросистемс . 10 мая 1987 г., стр. 121–129.
  8. ^ Перейти обратно: а б с Эта статья основана на материалах, взятых из раздела «Память+управление+модуль» в Бесплатном онлайн-словаре вычислений до 1 ноября 2008 г. и включенных в соответствии с условиями «повторного лицензирования» GFDL версии 1.3 или более поздней.
  9. ^ «Технические характеристики модуля управления памятью Z8010 Z8000 MMU» (PDF) . Зилог . Апрель 1985 года.
  10. ^ «Справочник данных 1983/84 года» (PDF) . Зилог. стр. 215–234 . Проверено 27 апреля 2021 г.
  11. ^ Шмидт, Стивен (апрель 1983 г.). «Виртуальная память для микрокомпьютеров» . Байт . Том. 8, нет. 4. С. 234–235.
  12. ^ Руководство пользователя MultiFinder . Яблоко. 1987. стр. 20–22, 24.
  13. ^ Декодирование адреса памяти (Технический отчет). Университет Нью-Мексико. 1996.
  14. ^ Белл, Гордон. «Ретроспектива того, что мы узнали от PDP-11» .
  15. ^ MCU, Блок управления памятью, ФРЕДДИ (Технический отчет). Атари. 1983.
  16. ^ «Архивы IBM: Даты и характеристики System/360» . 03.ibm.com . 23 января 2003 года . Проверено 3 мая 2017 г.
  17. ^ Перейти обратно: а б «Функциональные характеристики IBM System/360 Model 67, третье издание» (PDF) . Февраль 1972 г. GA27-2719-2 . Проверено 29 октября 2021 г.
  18. ^ Перейти обратно: а б с д и ж «Глава 4 Управление памятью». Справочное руководство по архитектуре VAX (PDF) . Корпорация цифрового оборудования . 1987. ISBN  0-932376-86-Х . EY-3459E-DP.
  19. ^ «Техническое справочное руководство Cortex-A8» (PDF) . Infoventer.arm.com . Проверено 3 мая 2017 г.
  20. ^ Перейти обратно: а б с «Часть II-A / Программное обеспечение OpenVMS AXP». Архитектура Alpha AXP (PDF) (Второе изд.). Цифровая пресса . 1995. ISBN  1-55558-145-5 . EY-TI32E-DP.
  21. ^ Перейти обратно: а б с «Часть II-B / Программное обеспечение DEC OSF/1». Архитектура Alpha AXP (PDF) (Второе изд.). Цифровая пресса . 1995. ISBN  1-55558-145-5 . EY-TI32E-DP.
  22. ^ Перейти обратно: а б «Часть II-C / Программное обеспечение Windows NT AXP». Архитектура Alpha AXP (PDF) (Второе изд.). Цифровая пресса . 1995. ISBN  1-55558-145-5 . EY-TI32E-DP.
  23. ^ Руководство пользователя платы Sun 68000, Sun Microsystems, Inc, февраль 1983 г., редакция B
  24. ^ «Руководство по архитектуре Sun-2» (PDF) . Сан Микросистемс . 15 декабря 1983 г. стр. 9–12.
  25. ^ «Руководство программиста по архитектуре AMD64, том 2: Системное программирование» (PDF) . Март 2017 года . Проверено 5 декабря 2017 г.
  26. ^ Таненбаум, Эндрю С.; Гердер, Йоррит Н.; Бос, Герберт (май 2006 г.). «Можем ли мы сделать операционные системы надежными и безопасными?» . Компьютер . 39 (5): 44–51. CiteSeerX   10.1.1.112.3028 . дои : 10.1109/MC.2006.156 . S2CID   99779 .
  27. ^ Дэниел Х. Х. Ингаллс (август 1981 г.). «Принципы проектирования, лежащие в основе Smalltalk» . Журнал Байт . Архивировано из оригинала 27 сентября 2007 г.
Arc.Ask3.Ru: конец переведенного документа.
Arc.Ask3.Ru
Номер скриншота №: 64879c2355988e850a9db78dd4f954ec__1722862680
URL1:https://arc.ask3.ru/arc/aa/64/ec/64879c2355988e850a9db78dd4f954ec.html
Заголовок, (Title) документа по адресу, URL1:
Memory management unit - Wikipedia
Данный printscreen веб страницы (снимок веб страницы, скриншот веб страницы), визуально-программная копия документа расположенного по адресу URL1 и сохраненная в файл, имеет: квалифицированную, усовершенствованную (подтверждены: метки времени, валидность сертификата), открепленную ЭЦП (приложена к данному файлу), что может быть использовано для подтверждения содержания и факта существования документа в этот момент времени. Права на данный скриншот принадлежат администрации Ask3.ru, использование в качестве доказательства только с письменного разрешения правообладателя скриншота. Администрация Ask3.ru не несет ответственности за информацию размещенную на данном скриншоте. Права на прочие зарегистрированные элементы любого права, изображенные на снимках принадлежат их владельцам. Качество перевода предоставляется как есть. Любые претензии, иски не могут быть предъявлены. Если вы не согласны с любым пунктом перечисленным выше, вы не можете использовать данный сайт и информация размещенную на нем (сайте/странице), немедленно покиньте данный сайт. В случае нарушения любого пункта перечисленного выше, штраф 55! (Пятьдесят пять факториал, Денежную единицу (имеющую самостоятельную стоимость) можете выбрать самостоятельно, выплаичвается товарами в течение 7 дней с момента нарушения.)