Управление оперативной памятью вычислительной системы
Страничная память — способ организации виртуальной памяти, при котором единицей отображения виртуальных адресов на физические является регион постоянного размера (т. н. страница). [1] Типичный размер страницы — 4096 байт, для некоторых архитектур — до 128 КБ.
Поддержка такого режима присутствует в большинстве 32-битных и 64-битных процессоров. Такой режим является классическим для почти всех современных ОС, в том числе Windows и семейства UNIX. Широкое использование такого режима началось с процессора VAX и ОС VMS с конца 70-х годов (по некоторым сведениям, первая реализация). В семействе x86 поддержка появилась с поколения 386, оно же первое 32-битное поколение.
Таблицы страниц процессов
Каждый процесс имеет свой собственный набор таблиц страниц. Регистр «директория страниц» перегружается при каждом переключении контекста процесса. Также необходимо очистить ту часть TLB, которая относится к этому процессу.
Память региона ядра часто одинакова для всех процессов, но некоторые подрегионы ядра (например, регион, где находится подсистема графики и видео-драйвер) могут быть различным для разных групп процессов.
Потому что память ядра одинакова для всех процессов, соответствующие к ней записи в TLB не нужно перезагружать после переключения процесса. Для этой оптимизации архитектура x86 поддерживает флажок «глобальный» в PTE.
Методы управления памятью
Вот некоторые наиболее важные методы управления памятью:
Функции управления памятью в ОС
Операционная система решает следующие задачи:
- Отслеживание свободной и занятой памяти.
- Выделение и освобождение памяти по запросам процессов.
- Обеспечение настройки адресов.
- Поддержка механизма виртуальной памяти
Решаемые задачи
- Поддержка изоляции процессов и защиты памяти путём создания своего собственного виртуального адресного пространства для каждого процесса
- Поддержка изоляции области ядра от кода пользовательского режима
- Поддержка памяти «только для чтения» и неисполняемой памяти
- Поддержка отгрузки давно не используемых страниц в область подкачки на диске
- Поддержка отображённых в память файлов, в том числе загрузочных модулей
- Поддержка разделяемой между процессами памяти, в том числе с копированием-по-записи для экономии физических страниц
- Поддержка системного вызова fork() в ОС семейства UNIX
- Уменьшение внешней фрагментации – использование блоков фиксированного размера в виртуальной и физической памяти, все запросы на выделение памяти будут кратны, не будет оставаться некратных зон.
Что такое распределение памяти?
Выделение памяти – это процесс, с помощью которого компьютерным программам выделяется память или пространство.
Здесь основная память делится на два типа разделов
- Недостаточно памяти – Операционная система находится в этом типе памяти.
- High Memory – пользовательские процессы хранятся в верхней памяти.
Работа менеджера памяти Windows
Для управления виртуальной памятью в операционной системе Windows предусмотрен специальный менеджер Virtual Memory Manager (VMM). Он является составной частью ядра операционной системы и представляет собой отдельный процесс, постоянно находящийся в оперативной памяти. Основная задача VMM заключается в управлении страницами виртуальной памяти. [4]
Каждому процессу VMM выделяет часть физической памяти, которая называется рабочим набором (Working Set). Кроме того, VMM создает базу состояния страниц (page-frame database), которая организована как шесть списков страниц одного типа. Выделяют следующие типы страниц:
Свободные страницы могут применяться, однако прежде они подлежат процедуре обнуления (заполнения нулями). Процедурой обнуления страниц занимается специальная подпрограмма менеджера памяти Zero Page Thread;
- Zeroed — пустая страница, которая является свободной и обнуленной. Такие страницы готовы к использованию любым процессом;
- Bad — страница, которая вызывает аппаратные ошибки и не может применяться ни одним процессом.
Как уже отмечалось, если какой-нибудь процесс обращается к странице, которой нет в рабочем наборе (в списке Valid), то возникает ошибка обращения к странице. В этом случае задача VMM заключается в том, чтобы разрешить данную ситуацию и выделить странице свободной физической памяти для хранения данных, к которым обратился процесс. Существует два варианта развития событий:
- VMM может расширить рабочий набор процесса, добавив к нему необходимую страницу.
- Если в памяти нет места для выделения дополнительных страниц, то VMM замещает страницу, находящуюся в рабочем наборе, новой страницей.
В идеале замещению должна подлежать та страница, к которой в будущем не будет обращений, или страница, которая не будет использоваться дольше других. Однако достоверного способа определить, какая именно страница отвечает перечисленным критериям, нет. Поэтому менеджер памяти применяет следующий алгоритм. Он периодически просматривает список рабочих страниц (Valid) и помечает их как отсутствующие (P = 0). Однако данные страницы не удаляются из рабочего процесса — они остаются на месте и просто переводятся из категории Valid в категорию модифицированных (Modified) или резервных (Standby) страниц ( никаких изменений в содержимом этих страниц не производится). Если измененная таким образом страница требуется какому-нибудь процессу, то происходит обращение к ней и возникает ошибка обращения к странице. Но поскольку в действительности страница находится в физической памяти и ее содержимое не подвергалось изменению, то менеджеру памяти достаточно перевести данную страницу обратно в категорию Valid, сделав ее доступной для процесса. Если же страница не используется в течение длительного времени процессами и обращений к ней не происходит, она со временем переводится в категорию свободных (Free) страниц, а затем обнуляется и переводится в категорию пустых (Zeroed) страниц.
Таким образом, менеджер памяти автоматически забирает страницы из рабочих наборов неактивных процессов, то есть процессы, не проявляющие активности в течение длительного времени и автоматически освобождает всю физическую память.
Физические принципы
Эта классификация повторяет соответствующую классификацию ЗУ.
Вид | Среда, хранящая информацию | Принцип чтения/записи | Примеры |
---|---|---|---|
Полупроводниковая память (англ. semiconductor storage) | сформированные в полупроводнике элементы, имеющие 2 устойчивых состояния с различными электрическими параметрами | включение в электрическую цепь | SRAM, DRAM, EEPROM, Flash-память |
Магнитная память (англ. magnetic storage) | Намагниченность участков ферромагнитного материала (доменов) | Магнитная запись | Магнитная лента, магнитный диск, магнитная карта |
Оптическая память (англ. optical storage, laser storage) | последовательность участков (питов), отражающих или рассеивающих свет | чтение: отражение либо рассеяние лазерного луча от питов;запись: точечный нагрев, изменяющий свойства отражающего слоя | CD-диск, DVD, Blu-ray, HD DVD |
Магнитооптическая память (англ. magnetooptics storage) | показатель преломления участков информационного слоя | чтение: преломление и отражение луча лазера запись: точечный нагрев и электромагнитный импульс | CD-MO, Fujitsu DynaMO |
Магниторезистивная память с произвольным доступом (англ. Spin Torque Transfer Random Access Memory, STT-RAM) | магнитные домены | В STT-RAM электрическое поле воздействует на микромагниты, заставляя их менять направление магнитного поля (спин). В свою очередь направление магнитного поля (справа — налево или сверху — вниз) вызывает изменение в сопротивлении (логические 0 и 1). | MRAM |
Память с изменением фазового состояния | молекулы халькогенида | использует изменение фазового состояния халькогенида — вещества, способного под воздействием нагрева и электрических полей переходить из непроводящего аморфного состояния (1) в проводящее кристаллическое (0). В ней применены диоды вертикального типа и трехмерная кристаллическая структура. Не требует предварительного удаления старых данных перед записью новых, не требует электропитания для сохранения своего состояния [1] | PRAM |
Ёмкостная память (англ. capacitor storage) | молекулы халькогенида (chalcogenide) | подача электрического напряжения на обкладки | DRAM |
Разновидности полупроводниковой памяти
Разновидности магнитной памяти
- Память на магнитной ленте (англ. magnetic tape memory) — представляет собой пластиковую узкую ленту с магнитным покрытием и механизм с блоком головок записи-воспроизведения (БГЗВ). Лента намотана на бобину, и последовательно протягивается лентопротяжным механизмом (ЛПМ) возле БГЗВ. Запись производится перемагничиванием частиц магнитного слоя ленты при прохождении их возле зазора головки записи. Считывание записанной информации происходит при прохождении намагниченного ранее участка плёнки возле зазора головки воспроизведения.
- Память на магнитных дисках (англ. magnetic disk memory) — представляет собой круглый пластиковый диск с магнитным покрытием и механизм с БГЗВ. Данные при этом наносятся радиально, при вращении диска вокруг своей оси и радиальном сдвиге БГЗВ на шаг головки. Запись производится перемагничиванием частиц магнитного слоя диска при прохождении их возле зазора головки записи. Считывание записанной информации происходит при прохождении намагниченного ранее участка возле зазора головки воспроизведения.
- Память на магнитной проволоке (англ. plated wire memory) Использовалась в магнитофонах до магнитной ленты. В настоящее время по этому принципу конструируется большинство авиационных т. н. «чёрных ящиков» — данный носитель имеет наиболее высокую устойчивость к внешним воздействиям и высокую сохранность даже при повреждениях в аварийных ситуациях.
- Ферритовая память (англ. core storage) — ячейка представляет собой ферритовый сердечник, изменение состояния которого (перемагничивание) происходит при пропускании тока через намотанный на него проводник. В настоящее время имеет ограниченное применение, в основном в военной сфере.
Разновидности оптической памяти
Фазоинверсная память (англ. Phase Change Rewritable storage, PCR) — оптическая память, в которой рабочий (отражающий) слой выполнен из полимерного вещества, способного при нагреве менять фазовое состояние (кристаллическое↔аморфное) и отражающие характеристики в зависимости от режима нагрева. Применяется в перезаписываемых оптических дисках (CD-RW, DVD-RW).
Физические основы функционирования
В основе работы запоминающего устройства может лежать любой физический эффект, обеспечивающий приведение системы к двум или более устойчивым состояниям. В современной компьютерной технике часто используются физические свойства полупроводников, когда прохождение тока через полупроводник или его отсутствие трактуются как наличие логических сигналов 0 или 1. Устойчивые состояния, определяемые направлением намагниченности, позволяют использовать для хранения данных разнообразные магнитные материалы. Наличие или отсутствие заряда в конденсаторе также может быть положено в основу системы хранения. Отражение или рассеяние света от поверхности CD, DVD или Blu-ray-диска также позволяет хранить информацию.
Что такое динамическая загрузка?
Динамическая загрузка – это программа программы, которая не загружается до тех пор, пока программа ее не вызовет. Все подпрограммы должны содержаться на диске в перемещаемом формате загрузки. Основная программа будет загружена в память и будет выполнена. Динамическая загрузка также обеспечивает лучшее использование памяти.
Таблицы страниц
Таблица страниц (Page Table) состоит из 4-байтовых элементов (Entries). Эти элементы называются PTE (Page Table Entries) и представляют собой по сути - указатели на страницы, по формату - структуры данных.
Структура таблицы:
Если страница не присутствует в памяти (бит P=0), то процессор не использует все остальные биты элемента PTE и программа может их использовать по своему усмотрению.
Сегментно-страничная виртуальная память
Существуют две другие схемы организации управления памятью: сегментная и сегментно-страничная. [5] Сегменты, в отличие от страниц, могут иметь переменный размер. При сегментной организации виртуальный адрес является двумерным как для программиста, так и для операционной системы, и состоит из двух полей – номера сегмента и смещения внутри сегмента. Главное отличие сегментной организации от страничной в том, что в последней линейный адрес преобразован в двумерный операционной системой для удобства отображения, а сегментной двумерность адреса является следствием представления пользователя о процессе не в виде линейного массива байтов, а как набор сегментов переменного размера.
Логическое адресное пространство – набор сегментов. Каждый сегмент имеет имя, размер и другие параметры (уровень привилегий, разрешенные виды обращений, флаги присутствия). В отличие от страничной схемы, где пользователь задает только один адрес, в сегментной схеме пользователь специфицирует каждый адрес двумя величинами: именем сегмента и смещением.
Каждый сегмент – линейная последовательность адресов, начинающаяся с 0. Максимальный размер сегмента определяется разрядностью процессора (при 32-разрядной адресации это 232 байт или 4 Гбайт). Размер сегмента может меняться динамически (например, сегмент стека). В элементе таблицы сегментов помимо физического адреса начала сегмента обычно содержится и длина сегмента. Если размер смещения в виртуальном адресе выходит за пределы размера сегмента, возникает исключительная ситуация.
Логический адрес – упорядоченная пара v=(s,d), номер сегмента и смещение внутри сегмента.
В системах, где сегменты поддерживаются аппаратно, эти параметры обычно хранятся в таблице дескрипторов сегментов, а программа обращается к этим дескрипторам по номерам-селекторам. При этом в контекст каждого процесса входит набор сегментных регистров, содержащих селекторы текущих сегментов кода, стека, данных и т. д. и определяющих, какие сегменты будут использоваться при разных видах обращений к памяти. Это позволяет процессору уже на аппаратном уровне определять допустимость обращений к памяти, упрощая реализацию защиты информации от повреждения и несанкционированного доступа.
Хранить в памяти сегменты большого размера целиком так же неудобно, как и хранить процесс непрерывным блоком. Отсюда получается идея разбиения сегментов на страницы. При сегментно-страничной организации памяти происходит двухуровневая трансляция виртуального адреса в физический. В этом случае логический адрес состоит из трех полей: номера сегмента логической памяти, номера страницы внутри сегмента и смещения внутри страницы. Соответственно, используются две таблицы отображения – таблица сегментов, связывающая номер сегмента с таблицей страниц, и отдельная таблица страниц для каждого сегмента.
Огромным достоинством страничной виртуальной памяти по сравнению с сегментной является отсутствие «ближних» и «дальних» указателей. Наличие таких концепций в программировании уменьшает применимость арифметики указателей, и приводит к огромным проблемам с переносимостью кода с/на такие архитектуры. Так, например, значительная часть ПО с открытым кодом изначально разрабатывалась для бессегментных 32-битных платформ со страничной памятью и не может быть перенесена на сегментные архитектуры без серьёзной переработки.
Управление памятью – это процесс управления и координации памяти компьютера, назначение частей, известных как блоки, различным запущенным программам для оптимизации общей производительности системы.
Это самая важная функция операционной системы, которая управляет основной памятью. Это помогает процессам перемещаться вперед и назад между основной памятью и исполнительным диском. Это помогает ОС отслеживать каждую область памяти, независимо от того, выделена она для какого-либо процесса или остается свободной.
Из этого руководства по операционной системе вы узнаете:
Что такое пейджинг?
Пейджинг – это механизм хранения, который позволяет ОС извлекать процессы из вторичного хранилища в основную память в виде страниц. В методе Paging основная память делится на небольшие блоки физической памяти фиксированного размера, которые называются кадрами. Размер кадра должен быть таким же, как и размер страницы, чтобы максимально использовать основную память и избежать внешней фрагментации. Пейджинг используется для более быстрого доступа к данным, и это логическая концепция.
Управление постраничной памятью
Этот метод делит основную память компьютера на блоки фиксированного размера, известные как фреймы страниц. Этот аппаратный блок управления памятью отображает страницы в кадры, которые должны быть распределены на основе страниц.
Что такое сегментация?
Метод сегментации работает почти так же, как пейджинг. Единственное различие между ними состоит в том, что сегменты имеют переменную длину, тогда как в методе подкачки страницы всегда имеют фиксированный размер.
Программный сегмент включает в себя основную функцию программы, структуры данных, служебные функции и т. Д. ОС поддерживает таблицу сегментной карты для всех процессов. Он также включает в себя список свободных блоков памяти, а также его размер, номера сегментов и места в памяти в основной или виртуальной памяти.
Paging:
Paging — это схема управления памятью, которая устраняет необходимость непрерывного выделения физической памяти. Эта схема позволяет физическому адресному пространству процесса быть несмежным.
- Логический адрес или виртуальный адрес (представлен в битах): адрес, генерируемый ЦП.
- Логическое адресное пространство или виртуальное адресное пространство (представленное словами или байтами): набор всех логических адресов, сгенерированных программой.
- Физический адрес (представлен в битах): адрес, фактически доступный в блоке памяти.
- Физическое адресное пространство (выраженное словами или байтами): набор всех физических адресов, соответствующих логическим адресам.
- Если логический адрес = 31 бит, то логическое адресное пространство = 2 31слово = 2 G слов (1 G = 2 30 )
- Если логическое адресное пространство = 128 M слов = 2 7* 2 20 слов, то логический адрес = log 2 2 27 = 27 бит
- Если физический адрес = 22 бита, то физическое адресное пространство = 2 22слова = 4 M слов (1 M = 2 20 )
- Если физическое адресное пространство = 16 M слов = 2 4* 2 20 слов, то физический адрес = log 2 2 24 = 24 бита.
Преобразование виртуального адреса в физический выполняется блоком управления памятью (MMU), который является аппаратным устройством, и это преобразование известно как метод подкачки.
- Физическое адресное пространство концептуально разделено на несколько блоков фиксированного размера, называемых кадрами.
- Логическое адресное пространство также разделено на блоки фиксированного размера, называемые страницами.
- Размер страницы = Размер кадра
- Физический адрес = 12 бит, тогда физическое адресное пространство = 4 К слов
- Логический адрес = 13 бит, затем логическое адресное пространство = 8 К слов
- Размер страницы = размер кадра = 1 тыс. Слов (предположение)
Адрес, генерируемый ЦП, делится на
- Номер страницы (p):количество битов, необходимых для представления страниц в логическом адресном пространстве или номер страницы.
- Смещение страницы (d):количество битов, необходимых для представления определенного слова на странице или размер страницы логического адресного пространства, или номер слова страницы или смещение страницы.
Физический адрес делится на
- Номер кадра (f):количество битов, необходимых для представления кадра физического адресного пространства или кадра номера кадра.
- Смещение кадра (d):количество битов, необходимых для представления конкретного слова в кадре, или размер кадра в физическом адресном пространстве, или номер слова кадра, или смещение кадра.
Аппаратная реализация таблицы страниц может быть выполнена с использованием выделенных регистров. Но использование регистра для таблицы страниц является удовлетворительным только в том случае, если таблица страниц мала. Если таблица страниц содержит большое количество записей, мы можем использовать TLB (буфер просмотра трансляции), специальный небольшой аппаратный кеш для быстрого просмотра.
- TLB — это ассоциативная высокоскоростная память.
- Каждая запись в TLB состоит из двух частей: тега и значения.
- Когда эта память используется, то элемент сравнивается со всеми тегами одновременно. Если элемент найден, то соответствующее значение возвращается.
Время доступа к основной памяти = м
Если таблица страниц хранится в основной памяти,
Эффективное время доступа = m (для таблицы страниц) + m (для конкретной страницы в таблице страниц)
С понятием управления паметью в ОС связаны следующие технологии:
- Функции управления памятью в ОС
- Типы адресов
- Методы распределения памяти в ОС
- Принцип кэширования данных в ОС
Страничная память x86
Исторически x86 использует 32-битные PTE, 32-битные виртуальные адреса, 4KB-страницы, 1024 записи в таблице, двухуровневые таблицы. Старшие 10 бит виртуального адреса — номер записи в директории, следующие 10 — номер записи в таблице, младшие 12 — адрес внутри страницы. [2]
Начиная с Pentium Pro, процессор поддерживает страницы размером 4Мб. Однако, чтобы система и программы, запущенные в ней, могли использовать страницы такого размера, технология 4-х Мб страниц (hugepages) должна быть соответствующим образом активирована, а приложение настроено на использование страниц такого размера. Процессор x86 в режиме PAE (Physical Address Extension) и в режиме x86_64 (long mode) использует 64-битные PTE (из них реально задействованы не все биты физического адреса, от 36 в PAE до 48 в некоторых x86_64), 32-битные виртуальные адреса, 4KB-страницы, 512 записей в таблице, трехуровневые таблицы с четыремя директориями и четыремя записями в супер-директории. Старшие 2 бита виртуального адреса — номер записи в супер-директории, следующие 9 — в директории, следующие 9 — в таблице. Физический адрес директории или же супер-директории загружен в один из управляющих регистров процессора.
При использовании PAE вместо 4МБ больших страниц используются двухмегзбайтные. В архитектуре x86_64 возможно использовать страницы размером 4 килобайта (4096 байт), 2 мегабайта, и (в некоторых AMD64) 1 гигабайт.
Отображаемые в память файлы
Обработчик отказа страницы в ядре способен прочитать данную страницу из файла.
Это приводит к возможности легкой реализации отображенных в память файлов. Концептуально это то же, что выделение памяти и чтение в неё отрезка файла, с той разницей, что чтение осуществляется неявно «по требованию», выраженному отказом страницы при попытке обращения к ней.
Вторым преимуществом такого подхода является — в случае отображения «только для чтения» — разделение одной и той же физической памяти между всеми процессами, отображающими данный файл (выделенная же память своя у каждого процесса).
Третьим преимуществом является возможность «забывания» (discard) некоторых отображенных страниц без выгрузки их в область подкачки, обязательной для выделенной памяти. В случае повторной потребности в странице она может быть быстро загружена из файла снова.
Четвертым преимуществом является не-использование дискового кэша в этом режиме, что означает экономию на копировании данных из кэша в запрошенный регион. Преимущества дискового кэша, оптимизирующего операции небольшого размера, а также повторное чтение одних и тех же данных, полностью исчезают при чтениях целых страниц и тем более их групп, недостаток же в виде обязательного лишнего копирования — сохраняется.
Отображаемые в память файлы используется в ОС Windows, а также ОС семейства UNIX, для загрузки исполняемых модулей и динамических библиотек. Они же используются утилитой GNU grep для чтения входящего файла, а также для загрузки шрифтов в ряде графических подсистем.
Разделенное Распределение
Он делит первичную память на различные разделы памяти, которые в основном являются смежными областями памяти. Каждый раздел хранит всю информацию для конкретной задачи или работы. Этот метод состоит из выделения раздела для задания при его запуске и нераспределения при его завершении.
Одно смежное распределение
Это самый простой метод управления памятью. В этом методе все типы памяти компьютера, за исключением небольшой части, зарезервированной для ОС, доступны для одного приложения. Например, операционная система MS-DOS выделяет память таким образом. Встроенная система также работает в одном приложении.
Что такое обмен?
Обмен – это метод, при котором процесс должен быть временно перенесен из основной памяти в резервное хранилище. Позже он будет возвращен в память для продолжения выполнения.
Резервное хранилище – это жесткий диск или другое вспомогательное запоминающее устройство, которое должно быть достаточно большого размера для размещения копий всех образов памяти для всех пользователей. Он также способен предложить прямой доступ к этим образам памяти.
Выделение памяти
Чтобы добиться правильного использования памяти, необходимо эффективно распределять память. Один из простейших методов распределения памяти — разделить память на несколько разделов фиксированного размера, и каждый раздел содержит ровно один процесс. Таким образом, степень мультипрограммирования определяется количеством разделов.
Распределение нескольких разделов : в этом методе процесс выбирается из входной очереди и загружается в свободный раздел. Когда процесс завершается, раздел становится доступным для других процессов.
Фиксированное распределение разделов: в этом методе операционная система поддерживает таблицу, в которой указывается, какие части памяти доступны, а какие заняты процессами. Изначально вся память доступна для пользовательских процессов и считается одним большим блоком доступной памяти. Эта доступная память известна как «отверстие». Когда процесс прибывает и ему требуется память, мы ищем достаточно большую дыру, чтобы сохранить этот процесс. Если требование выполняется, мы выделяем память для процесса, в противном случае оставляя остальную доступной для удовлетворения будущих запросов. При распределении памяти иногда возникают проблемы с динамическим распределением памяти, которые касаются того, как удовлетворить запрос размера n из списка свободных отверстий. Есть несколько решений этой проблемы:
First fit:-
При первой подгонке первое доступное свободное отверстие удовлетворяет требованиям назначенного процесса.
Здесь, на этой диаграмме, блок памяти размером 40 КБ является первым доступным свободным местом, в котором может храниться процесс A (размер 25 КБ), поскольку первые два блока не имели достаточного пространства памяти.
Best fit:-
В наиболее подходящем случае выделите наименьшее отверстие, которое достаточно велико для обработки требований. Для этого мы ищем весь список, если список не упорядочен по размеру.
Здесь, в этом примере, сначала мы просматриваем полный список и обнаруживаем, что последнее отверстие 25 КБ является наиболее подходящим отверстием для процесса A (размер 25 КБ).
В этом методе использование памяти максимально по сравнению с другими методами распределения памяти.
Worst fit:- В худшем случае выделите для обработки наибольшее доступное отверстие. Этот метод дает самое большое оставшееся отверстие.
Здесь, в этом примере, процесс A (размер 25 КБ) выделяется самому большому доступному блоку памяти, который составляет 60 КБ. Неэффективное использование памяти является серьезной проблемой в худшем случае.
Что такое фрагментация?
Процессы сохраняются и удаляются из памяти, что создает свободное место в памяти, которое слишком мало для использования другими процессами.
После этого процесс, который не может быть выделен для блоков памяти, поскольку его небольшой размер и блоки памяти всегда остаются неиспользованными, называется фрагментацией. Этот тип проблемы возникает во время системы динамического выделения памяти, когда свободных блоков достаточно мало, поэтому она не может выполнить любой запрос.
Два типа методов фрагментации:
- Внешняя фрагментация
- Внутренняя фрагментация
- Внешнюю фрагментацию можно уменьшить, переставив содержимое памяти, чтобы разместить всю свободную память вместе в одном блоке.
- Внутренняя фрагментация может быть уменьшена путем назначения наименьшего раздела, который все еще достаточно хорош для выполнения всего процесса.
Обмен
Когда процесс выполняется, он должен находиться в памяти. Перекачка представляет собой процесс обмена процесс временно во вторичную память из в основной памяти, которая является быстрым, по сравнению с вторичной памятью. Подкачка позволяет запускать больше процессов и может быть помещена в память одновременно. Основная часть подкачки — это время передачи, а общее время прямо пропорционально объему подкачки памяти. Обмен также известен как развертывание, развертывание, потому что, если приходит процесс с более высоким приоритетом и ему требуется обслуживание, диспетчер памяти может заменить процесс с более низким приоритетом, а затем загрузить и выполнить процесс с более высоким приоритетом. После завершения высокоприоритетной работы,процесс с более низким приоритетом поменялись обратно в памяти и продолжал в процессе исполнения.
Содержание
Что такое динамическое связывание?
Связывание – это метод, который помогает ОС собирать и объединять различные модули кода и данных в один исполняемый файл. Файл может быть загружен в память и выполнен. ОС может связывать библиотеки системного уровня в программу, которая объединяет библиотеки во время загрузки. В методе динамического связывания библиотеки связываются во время выполнения, поэтому размер программного кода может оставаться небольшим.
Изучение
Термин «память» можно определить как набор данных в определенном формате. Он используется для хранения инструкций и обработанных данных. Память состоит из большого массива или группы слов или байтов, каждое из которых имеет собственное местоположение. Основным мотивом компьютерной системы является выполнение программ. Эти программы вместе с информацией, к которой они обращаются, должны находиться в основной памяти во время выполнения. ЦП извлекает инструкции из памяти в соответствии со значением счетчика программ.
Для достижения определенной степени мультипрограммирования и правильного использования памяти важно управление памятью. Существует множество методов управления памятью, отражающих различные подходы, и эффективность каждого алгоритма зависит от ситуации.
Внешняя фрагментация
При внешней фрагментации у нас есть свободный блок памяти, но мы не можем назначить его процессу, потому что блоки не являются смежными.
Пример: Предположим (рассмотрим пример выше) три процесса p1, p2, p3 имеют размер 2 МБ, 4 МБ и 7 МБ соответственно. Теперь им выделяются блоки памяти размером 3 МБ, 6 МБ и 7 МБ соответственно. После выделения для процесса p1 и p2 осталось 1 МБ и 2 МБ. Предположим, что приходит новый процесс p4 и требует 3-мегабайтный блок памяти, который доступен, но мы не можем его назначить, потому что свободное пространство памяти не является непрерывным. Это называется внешней фрагментацией.
И первая, и самая подходящая системы для распределения памяти, подверженной внешней фрагментации. Для преодоления проблемы внешней фрагментации используется уплотнение. В технике уплотнения все свободное пространство памяти объединяется и образует один большой блок. Таким образом, это пространство может быть эффективно использовано другими процессами.
Другое возможное решение внешней фрагментации — позволить логическому адресному пространству процессов быть несмежным, что позволяет процессу выделять физическую память там, где последняя доступна.
Распределение разделов
Память делится на разные блоки или разделы. Каждый процесс распределяется в соответствии с требованием. Распределение разделов – это идеальный способ избежать внутренней фрагментации.
Ниже приведены различные схемы распределения разделов:
- Первая подгонка: при этой подгонке выделяется раздел, который является первым достаточным блоком с начала основной памяти.
- Best Fit: Распределяет процесс по разделу, который является первым наименьшим разделом среди свободных разделов.
- Наихудшая подгонка: он распределяет процесс по разделу, который является самым большим достаточным свободно доступным разделом в основной памяти.
- Следующая подгонка: в большинстве случаев она похожа на первую подгонку, но эта подгонка ищет первый достаточный раздел из последней точки размещения.
Содержание
Статическая и динамическая нагрузка
Загрузка процесса в основную память выполняется загрузчиком. Есть два разных типа загрузки:
- Статическая загрузка: — При статической загрузке загружает всю программу по фиксированному адресу. Это требует больше места в памяти.
- Динамическая загрузка: — Для выполнения процесса вся программа и все данные процесса должны находиться в физической памяти. Итак, размер процесса ограничен размером физической памяти. Для правильного использования памяти используется динамическая загрузка. При динамической загрузке подпрограмма не загружается, пока не будет вызвана. Все процедуры хранятся на диске в перемещаемом формате загрузки. Одним из преимуществ динамической загрузки является то, что неиспользуемая процедура никогда не загружается. Эта загрузка полезна, когда для ее эффективной обработки требуется большой объем кода.
Механизм работы
Логический адрес в страничной системе – упорядоченная пара (p,d), где p – номер страницы в виртуальной памяти(селектор), а d – смещение в рамках страницы p, на которой размещается адресуемый элемент. Разбиение адресного пространства на страницы осуществляется вычислительной системой незаметно для программиста. Поэтому адрес является двумерным лишь с точки зрения операционной системы, а с точки зрения программиста адресное пространство процесса остается линейным. На самом деле адрес в памяти также можно указать другими способами - через константы и значения переменных, но всегда используется пара значений p и d, в явном или неявном виде. Каждый раз, при выполнении команды, процессор производит преобразование логического адреса в линейный адрес - 32-разрядный абсолютный адрес в памяти. После вычисления линейного адреса процессор преобразует его в физический адрес, по которому и производит обращение к памяти.
Описываемая схема позволяет загрузить процесс, даже если нет непрерывной области кадров, достаточной для размещения процесса целиком.
Число записей в одной таблице ограничено и зависит от размера записи и размера страницы. Используется многоуровневая организация таблиц, часто 2 или 3 уровня, иногда 4 уровня (для 64-разрядных архитектур).
Основное применение страничного преобразования адреса - организация виртуальной памяти. Виртуальная память позволяет использовать программы, требующие больший объем памяти, чем установленный на компьютере физический объем памяти. Остальная информация может быть сброшена на внешний носитель.
Управление страничным разбиением памяти обычно возлагается на специальную микросхему MMU (Memory Managment Unit - устройство управления памятью). В микропроцессоре i80486 и выше это устройство встроено в процессор.
Как и сегментация, страничная организация памяти связана с преобразованием виртуального адреса (в данном случае линейного) в физический. В страничном преобразовании базовым объектом памяти является блок фиксированного размера, называемый страницей (page).
В процессе страничного преобразования старшие 20 бит 32-х битного линейного адреса заменяются новым значением - номером физической страницы. Младшие же 12 бит линейного адреса определяют положение байта внутри страницы и остаются неизменными.
Для уменьшения размера таблицы страниц в микропроцессорах x86 предусмотрена двухуровневая схема преобразования адреса. Основой страничного преобразования служит регистр управления CR3, содержащий 20-ти битный физический базовый адрес каталога страниц текущей задачи. Предполагается, что каталог выровнен по границе страничного кадра, постоянно находится в памяти и не участвует в свопинге. Корневая страница, называемая каталогом страниц, содержит 1024 32-х битных дескриптора, называемых элементами каталога страниц PDE (Page Directory Entry). Каждый из них адресует подчиненную таблицу страниц. Каждая из этих таблиц содержит 1024 32-х битных дескриптора, называемая элементами таблицы страниц. PTE (Page Table Entry). Каждый PTE содержит адрес страничного кадра в физической памяти. Собственно преобразование линейных адресов в физические состоит из следующих действий:
- Старшие 10 бит 31 - 22 линейного адреса, дополненные двумя младшими нулями, служат индексом PDE.
- Средние 10 бит 21 - 12 линейного адреса, дополненные двумя младшими нулями, индексируют таблицу страниц PTE. Элемент PTE содержит 20-битный базовый адрес страничного кадра в физической памяти.
Этот базовый адрес из элемента PTE объединяется с младшими 12-ю битами линейного адреса, образуя 32-х битный физический адрес.
Классификация типов памяти
Следует различать классификацию памяти и классификацию запоминающих устройств (ЗУ). Первая классифицирует память по функциональности, вторая же — по технической реализации. Здесь рассматривается первая — таким образом, в неё попадают как аппаратные виды памяти (реализуемые на ЗУ), так и структуры данных, реализуемые в большинстве случаев программно.
Доступные операции с данными
- Память только для чтения (read-only memory, ROM)
- Память для чтения/записи
Память на программируемых и перепрограммируемых ПЗУ (ППЗУ и ПППЗУ) не имеет общепринятого места в этой классификации. Её относят либо к подвиду памяти «только для чтения», либо выделяют в отдельный вид. Также предлагается относить память к тому или иному виду по характерной частоте её перезаписи на практике: к RAM относить виды, в которых информация часто меняется в процессе работы, а к ROM — предназначенные для хранения относительно неизменных данных.
Энергозависимость
- Энергонезависимая память (англ. nonvolatile storage) — память, реализованная ЗУ, записи в которых не стираются при снятии электропитания. К этому типу памяти относятся все виды памяти на ПЗУ и ППЗУ;
- Энергозависимая память (англ. volatile storage) — память, реализованная ЗУ, записи в которых стираются при снятии электропитания. К этому типу памяти относятся память, реализованная на ОЗУ, кэш-память.
- Статическая память (англ. static storage) — энергозависимая память, которой для хранения информации достаточно сохранения питающего напряжения;
- Динамическая память (англ. dynamic storage) — энергозависимая память, в которой информация со временем разрушается (деградирует), и, кроме подачи электропитания, необходимо производить её периодическое восстановление (регенерацию).
Метод доступа
- Последовательный доступ (англ. sequential access memory, SAM) — ячейки памяти выбираются (считываются) последовательно, одна за другой, в очерёдности их расположения. Вариант такой памяти — стековая память.
- Произвольный доступ (англ. random access memory, RAM) — вычислительное устройство может обратиться к произвольной ячейке памяти по любому адресу.
- Буферная память (англ. buffer storage) — память, предназначенная для временного хранения данных при обмене ими между различными устройствами или программами.
- Временная (промежуточная) память (англ. temporary (intermediate) storage) — память для хранения промежуточных результатов обработки.
- Кеш-память (англ. cache memory) — часть архитектуры устройства или программного обеспечения, осуществляющая хранение часто используемых данных для предоставления их в более быстрый доступ, нежели кешируемая память.
- Корректирующая память (англ. patch memory) — часть памяти ЭВМ, предназначенная для хранения адресов неисправных ячеек основной памяти. Также используются термины relocation table и remap table.
- Управляющая память (англ. control storage) — память, содержащая управляющие программы или микропрограммы. Обычно реализуется в виде ПЗУ.
Разделяемая память или память коллективного доступа (англ. shared memory, shared access memory) — память, доступная одновременно нескольким пользователям, процессам или процессорам.
Организация адресного пространства
- Реальная или физическая память (англ. real (physical) memory) — память, способ адресации которой соответствует физическому расположению её данных;
- Виртуальная память (англ. virtual memory) — память, способ адресации которой не отражает физического расположения её данных;
- Оверлейная память (англ. overlayable storage) — память, в которой присутствует несколько областей с одинаковыми адресами, из которых в каждый момент доступна только одна.
Удалённость и доступность для процессора
Первичная память (сверхоперативная, СОЗУ) — доступна процессору без какого-либо обращения к внешним устройствам. Данная память отличается крайне малым временем доступа и тем, что неадресуема для программиста. регистры процессора (процессорная или регистровая память) — регистры, расположенные непосредственно в АЛУ; кэш процессора — кэш, используемый процессором для уменьшения среднего времени доступа к компьютерной памяти. Разделяется на несколько уровней, различающихся скоростью и объёмом (например, L1, L2, L3). Вторичная память — доступна процессору путём прямой адресацией через шину адреса (адресуемая память). Таким образом доступна основная память (память, предназначенная для хранения текущих данных и выполняемых программ) и порты ввода-вывода (специальные адреса, через обращение к которым реализовано взаимодействие с прочей аппаратурой). Третичная память — доступна только путём нетривиальной последовательности действий. Сюда входят все виды внешней памяти — доступной через устройства ввода-вывода. Взаимодействие с третичной памятью ведётся по определённым правилам (протоколам) и требует присутствия в памяти соответствующих программ. Программы, обеспечивающие минимально необходимое взаимодействие, помещаются в ПЗУ, входящее во вторичную память (у PC-совместимых ПК — это ПЗУ BIOS). Положение структур данных, расположенных в основной памяти, в этой классификации неоднозначно. Как правило, их вообще в неё не включают, выполняя классификацию с привязкой к традиционно используемым видам ЗУ.
Управление процессором
Непосредственно управляемая (оперативно доступная) память (англ. on-line storage) — память, непосредственно доступная в данный момент времени центральному процессору. Автономная память — память, реализованная, например при помощи службы внешних носителей в Windows 2000, предусматривающей оперативное управление библиотеками носителей и устройствами с автоматической подачей дисков, облегчающей использование съёмных носителей типа магнитных лент и съёмных дисков, магнитных или оптических.
Организация хранения данных и алгоритмы доступа к ним
Повторяет классификацию структур данных:
- Адресуемая память — адресация осуществляется по местоположению данных.
- Ассоциативная память (англ. associative memory, content-addressable memory, CAM) — адресация осуществляется по содержанию данных, а не по их местоположению.
- Магазинная (стековая) память (англ. pushdown storage) — реализация стека.
- Матричная память (англ. matrix storage) — ячейки памяти расположены так, что доступ к ним осуществляется по двум или более координатам.
- Объектная память (англ. object storage) — память, система управления которой ориентирована на хранение объектов. При этом каждый объект характеризуется типом и размером записи.
- Семантическая память (англ. semantic storage) — данные размещаются и списываются в соответствии с некоторой структурой понятийных признаков.
Физические адреса
Физические адреса соответствуют номерам ячеек оперативной памяти, где в действительности расположены или будут расположены переменные и команды. Переход от виртуальных адресов к физическим может осуществляться двумя способами.
В первом случае замену виртуальных адресов на физические делает специальная системная программа - перемещающий загрузчик. Перемещающий загрузчик на основании имеющихся у него исходных данных о начальном адресе физической памяти, в которую предстоит загружать программу, и информации, предоставленной компилятором об адресно-зависимых константах программы, выполняет загрузку программы, совмещая ее с заменой виртуальных адресов физическими.
Второй способ заключается в том, что программа загружается в память в неизмененном виде в виртуальных адресах, при этом операционная система фиксирует смещение действительного расположения программного кода относительно виртуального адресного пространства. Во время выполнения программы при каждом обращении к оперативной памяти выполняется преобразование виртуального адреса в физический.
Второй способ является более гибким, он допускает перемещение программы во время ее выполнения, в то время как перемещающий загрузчик жестко привязывает программу к первоначально выделенному ей участку памяти. Вместе с тем использование перемещающего загрузчика уменьшает накладные расходы, так как преобразование каждого виртуального адреса происходит только один раз во время загрузки, а во втором случае - каждый раз при обращении по данному адресу.
Иногда (обычно в специализированных системах) заранее точно известно, в какой области оперативной памяти будет выполняться программа, и компилятор выдает исполняемый код сразу в физических адресах.
Компьютерная память (устройство хранения информации, запоминающее устройство) — часть вычислительной машины, физическое устройство или среда для хранения данных, используемых в вычислениях, в течение определённого времени. Память, как и центральный процессор, является неизменной частью компьютера с 1940-х. Память в вычислительных устройствах имеет иерархическую структуру и обычно предполагает использование нескольких запоминающих устройств, имеющих различные характеристики. В персональных компьютерах «памятью» часто называют один из её видов — динамическая память с произвольным доступом DRAM (Dynamic Random Access Memory), — которая в настоящее время используется в качестве ОЗУ персонального компьютера. Задачей компьютерной памяти является хранение в своих ячейках состояния внешнего воздействия, запись информации. Эти ячейки могут фиксировать самые разнообразные физические воздействия. Они функционально аналогичны обычному электромеханическому переключателю и информация в них записывается в виде двух чётко различимых состояний — 0 и 1 («выключено»/«включено»). Специальные механизмы обеспечивают доступ (считывание, произвольное или последовательное) к состоянию этих ячеек. Процесс доступа к памяти разбит на разделённые во времени процессы — операцию записи (сленг. прошивка, в случае записи ПЗУ) и операцию чтения, во многих случаях эти операции происходят под управлением отдельного специализированного устройства — контроллера памяти. Также различают операцию стирания памяти — занесение (запись) в ячейки памяти одинаковых значений, обычно 0016 или FF16. Наиболее известные запоминающие устройства, используемые в персональных компьютерах: модули оперативной памяти (ОЗУ), жёсткие диски(винчестеры), дискеты (гибкие магнитные диски), CD- или DVD-диски, а также устройства флеш-памяти.
Содержание
Статические и динамические ссылки
Для выполнения задачи связывания используется компоновщик. Компоновщик — это программа, которая берет один или несколько объектных файлов, созданных компилятором, и объединяет их в один исполняемый файл.
- Статическая компоновка: пристатической компоновке компоновщик объединяет все необходимые программные модули в единую исполняемую программу. Таким образом, нет никакой зависимости от времени выполнения. Некоторые операционные системы поддерживают только статическое связывание, в котором библиотеки системного языка обрабатываются как любой другой объектный модуль.
- Динамическое связывание: основная концепция динамического связывания аналогична динамической загрузке. При динамической компоновке «заглушка» включается для каждой соответствующей ссылки на библиотечную подпрограмму. Заглушка — это небольшой фрагмент кода. Когда заглушка выполняется, она проверяет, находится ли нужная процедура уже в памяти или нет. Если он недоступен, программа загружает подпрограмму в память.
Внутренняя фрагментация
Внутренняя фрагментация происходит, когда блоки памяти выделяются процессу больше, чем их запрошенный размер. Из-за этого остается некоторое неиспользуемое пространство, что создает проблему внутренней фрагментации.
Пример: предположим, что для распределения памяти используется фиксированное разделение, а размер блока в памяти различается: 3 МБ, 6 МБ и 7 МБ. Теперь приходит новый процесс p4 размером 2 МБ и требует блока памяти. Он получает блок памяти размером 3 МБ, но 1 МБ блочной памяти является пустой тратой и не может быть выделен другим процессам. Это называется внутренней фрагментацией.
Что такое управление памятью
В многопрограммном компьютере операционная система находится в части памяти, а остальная часть используется несколькими процессами. Задача разделения памяти между различными процессами называется управлением памятью. Управление памятью — это метод операционной системы для управления операциями между основной памятью и диском во время выполнения процесса. Основная цель управления памятью — эффективное использование памяти.
Управление сегментированной памятью
Сегментированная память – единственный метод управления памятью, который не предоставляет программе пользователя линейное и непрерывное адресное пространство.
Сегменты нуждаются в аппаратной поддержке в виде таблицы сегментов. Он содержит физический адрес раздела в памяти, размер и другие данные, такие как биты защиты доступа и статус.
Почему требуется управление памятью
- Выделять и освобождать память до и после выполнения процесса.
- Для отслеживания используемого пространства памяти процессами.
- Чтобы свести к минимуму проблемы фрагментации.
- Для правильного использования основной памяти.
- Сохранять целостность данных при выполнении процесса.
Теперь мы обсуждаем концепцию логического адресного пространства и физического адресного пространства:
Фрагментация
Фрагментация определяется как когда процесс загружается и удаляется после выполнения из памяти, он создает небольшую свободную дыру. Эти дыры не могут быть назначены новым процессам, потому что дыры не объединяются или не удовлетворяют требованиям процесса к памяти. Чтобы достичь определенной степени мультипрограммирования, мы должны уменьшить потери памяти или проблему фрагментации. В операционной системе два типа фрагментации:
Функции памяти
Компьютерная память обеспечивает поддержку одной из функций современного компьютера, — способность длительного хранения информации. Вместе с центральным процессором запоминающее устройство являются ключевыми звеньями так называемой архитектуры фон Неймана, — принципа, заложенного в основу большинства современных компьютеров общего назначения. Первые компьютеры использовали запоминающие устройства исключительно для хранения обрабатываемых данных. Их программы реализовывались на аппаратном уровне в виде жёстко заданных выполняемых последовательностей. Любое перепрограммирование требовало огромного объёма ручной работы по подготовке новой документации, перекоммутации, перестройки блоков и устройств и т. д. Использование архитектуры фон Неймана, предусматривающей хранение компьютерных программ и данных в общей памяти, коренным образом переменило ситуацию. Любая информация может быть измерена в битах и потому, независимо от того, на каких физических принципах и в какой системе счисления функционирует цифровой компьютер (двоичной, троичной, десятичной и т. п.), числа, текстовая информация, изображения, звук, видео и другие виды данных можно представить последовательностями битовых строк или двоичными числами. Это позволяет компьютеру манипулировать данными при условии достаточной ёмкости системы хранения (например, для хранения текста романа среднего размера необходимо около одного мегабайта). К настоящему времени создано множество устройств, предназначенных для хранения данных, основанных на использовании самых разных физических эффектов. Универсального решения не существует, у каждого имеются свои достоинства и свои недостатки, поэтому компьютерные системы обычно оснащаются несколькими видами систем хранения, основные свойства которых обуславливают их использование и назначение.
Виртуальные адреса
Виртуальные адреса вырабатывает компилятор. Так как не известно, в какое место оперативной памяти будет загружена программа, то компилятор присваивает переменным и командам виртуальные (условные) адреса, обычно считая по умолчанию, что программа будет размещена, начиная с нулевого адреса. Совокупность виртуальных адресов процесса называется виртуальным адресным пространством. Каждый процесс имеет собственное виртуальное адресное пространство.
Что такое основная память
Основная память играет центральную роль в работе современного компьютера. Основная память — это большой массив слов или байтов размером от сотен тысяч до миллиардов. Основная память — это хранилище быстро доступной информации, совместно используемой ЦП и устройствами ввода-вывода. Основная память — это место, где хранятся программы и информация, когда процессор эффективно их использует. Также основная память связана с процессором, поэтому перемещение инструкций и информации в процессор и из процессора происходит очень быстро. Основная память также известна как RAM (оперативная память). Эта память является энергозависимой. ОЗУ теряет свои данные при отключении питания.
Рисунок 1: Иерархия памяти
Преимущества обмена
Вот основные преимущества / плюсы обмена:
- Он предлагает более высокую степень мультипрограммирования.
- Позволяет динамическое перемещение. Например, если используется привязка адреса во время выполнения, то процессы можно менять в разных местах. Иначе в случае привязки времени компиляции и загрузки процессы должны быть перемещены в одно и то же место.
- Это помогает лучше использовать память.
- Минимальная потеря процессорного времени при завершении, поэтому его можно легко применить к методу планирования на основе приоритетов для повышения его производительности.
Зачем использовать управление памятью?
Вот причины использования управления памятью:
- Это позволяет вам проверить, сколько памяти должно быть выделено процессам, которые решают, какой процессор должен получить память в какое время.
- Отслеживает всякий раз, когда инвентарь становится свободным или нераспределенным. По нему будет обновляться статус.
- Он выделяет пространство для подпрограмм приложения.
- Также убедитесь, что эти приложения не мешают друг другу.
- Помогает защитить разные процессы друг от друга
- Он помещает программы в память, чтобы память использовалась в полной мере.
Символьные имена
Символьные имена присваивает пользователь при написании программы.
Типы адресов
Для идентификации переменных и команд используются символьные имена (метки), виртуальные адреса и физические адреса.
Логическое и физическое адресное пространство
Логическое адресное пространство: адрес, генерируемый ЦП, известен как «логический адрес». Он также известен как виртуальный адрес. Логическое адресное пространство можно определить как размер процесса. Логический адрес можно изменить.
Физическое адресное пространство: адрес, видимый блоком памяти (т. Е. Тот, который загружен в регистр адреса памяти), обычно известен как «Физический адрес». Физический адрес также известен как реальный адрес. Набор всех физических адресов, соответствующих этим логическим адресам, известен как физическое адресное пространство. Физический адрес вычисляется MMU. Отображение виртуальных адресов в физические во время выполнения выполняется с помощью модуля управления памятью (MMU) аппаратного устройства. Физический адрес всегда остается постоянным.
Страничное прерывание
Если обращение к памяти не может быть оттранслировано через TLB, то микрокод процессора обращается к таблицам страниц и пытается загрузить PTE оттуда в TLB. Если и после такой попытки сохранились проблемы, то процессор исполняет специальное прерывание, называемое «отказ страницы» (page fault). [3] Обработчик этого прерывания находится в подсистеме виртуальной памяти ядра ОС.
Некоторые процессоры (MIPS) не имеют обращающегося к таблице микрокода, и генерируют отказ страницы сразу после неудачи поиска в TLB, обращение к таблице и её интерпретация возлагаются уже на обработчик отказа страницы. Это лишает таблицы страниц требования соответствовать жёстко заданному на уровне аппаратуры формату.
Причины отказа страницы (page fault):
- Не существует таблицы, отображающей данный регион
- PTE не имеет взведённого флага «страница отображена».
- Попытка обратиться из пользовательского режима к странице «только для ядра».
- Попытка записи в страницу «только для чтения».
- Попытка исполнения кода из страницы «исполнение запрещено».
Алгоритм работы страничного прерывания:
- Когда страница выгружается, ОС устанавливает бит присутствия (valid – является ли валидной ячейка) PTE=0. И там же в РТЕ записывает куда она была соответственно выгружена.
- Когда же процесс обращается к этой странице, то происходит исключение, т.к. Valid=0,т.е. бит валидности установлен в 0 – страница не использовалась.
- После того, как произошло исключение ОС передает управление обработчику страничного прерывания
- Обработчик находит то место, куда была выгружена страница
- Считывает эту страницу в фрейм физической памяти, обновляет РТЕ, ставит бит валидности (присутствия) в 1.
- В физической памяти появляется новая страница.
Обработчик отказов в ядре может загрузить нужную страницу из файла или же из области подкачки, может создать доступную на запись копию страницы «только для чтения», а может и возбудить исключительную ситуацию (в терминах UNIX — сигнал SIGSEGV) в данном процессе.
Непрерывное распределение памяти
Основная память должна задействовать как операционную систему, так и различные клиентские процессы. Таким образом, выделение памяти становится важной задачей операционной системы. Память обычно делится на два раздела: один для резидентной операционной системы и один для пользовательских процессов. Обычно нам нужно, чтобы несколько пользовательских процессов находились в памяти одновременно. Следовательно, нам нужно подумать о том, как выделить доступную память для процессов, которые находятся во входной очереди, ожидая ввода в память. При выделении смежной памяти каждый процесс содержится в одном непрерывном сегменте памяти.
Читайте также: