Вспомогательные алгоритмы, используемые при пейджинге

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

Кража страниц

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

Предварительная очистка памяти

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

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

Пейджинг по запросу

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

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

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

Этот алгоритм извлекает выгоду, главным образом, из предположения, что процессам часто требуются большие области памяти, но на самом деле используется только относительно небольшое количество страниц. Кроме того, не все процессы обычно обращаются к памяти сразу после ее выделения, поэтому существует вероятность, что некоторые процессы завершат свою работу до того, как в системе закончится физическая память. Однако эта схема не работает, когда система выделяет процессам больше виртуальной памяти, чем позволяют ее ресурсы (объем ОЗУ + размер подкачки), а затем процессам не хватает доступной памяти, и один из них пытается получить доступ к странице, для которой больше невозможно выделить. источник оборудования. Это состояние также называется чрезмерной фиксацией памяти.. На данный момент возможны два варианта поведения. Либо переведите рассматриваемый процесс в спящий режим и дождитесь освобождения некоторой физической памяти, но существует высокий риск того, что несколько процессов будут запланированы таким образом, что приведет к непредсказуемому поведению системы. Или найдите подходящий процесс, завершите его и выделите его память заявителю. Который также является спорным решением, поскольку этот процесс был убит может быть прекращено в потенциально критический момент, не делая ничего плохого.

Переезд

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

Преимущества и недостатки пейджинга

Самым большим преимуществом разбиения на страницы является сокращение фрагментации свободной памяти. К недостаткам разбиения по страницам относятся необходимость поддержки аппаратного обеспечения процессора, замедление работы системы из-за необходимости накладных расходов и проблемы с выделением большей непрерывной части физической памяти из-за устройств, которые не могут обрабатывать виртуальные адреса (например, контроллер DMA ). С другой стороны, классический контроллер DMA уже используется в больших современных системах ( x86 , SPARC , обычно с шиной PCIи новее) не используется, а вместо этого доступ к памяти контролируется схемами управления периферийных устройств, подключенных к шинам. А чтобы иметь возможность легко получить доступ к основной памяти через границу кадра без возникновения исключения, в последние годы в этих системах была реализована специальная подсистема под названием IOMMU для виртуализации периферийной памяти аналогично процессору MMU.

Помощь и вопросы по работе с AIDA64

Версии AIDA64

Скачать AIDA64 Аида64 бесплатно на русском языке

AIDA64 Extreme Edition

На русском языке

AIDA64 Extreme Edition – диагностики, тестирования и сбора системной информации для домашних пользователей.

Скачать AIDA64 Аида64 бесплатно на русском языке

AIDA64 Engineer

На русском языке

AIDA64 Engineer – диагностики, тестирования и сбора системной информации для специалистов и инженеров в сфере ИТ.

Скачать AIDA64 Аида64 бесплатно на русском языке

AIDA64 Network Audit

На русском языке

AIDA64 Network Audit – инвентаризации программного и аппаратного обеспечения для предприятий.

Скачать AIDA64 Аида64 бесплатно на русском языке

AIDA64 Business

На русском языке

AIDA64 Business – инвентаризации сети и управления ИТ-активами для предприятий.