русс | укр

Языки программирования

ПаскальСиАссемблерJavaMatlabPhpHtmlJavaScriptCSSC#DelphiТурбо Пролог

Компьютерные сетиСистемное программное обеспечениеИнформационные технологииПрограммирование

Все о программировании


Linux Unix Алгоритмические языки Аналоговые и гибридные вычислительные устройства Архитектура микроконтроллеров Введение в разработку распределенных информационных систем Введение в численные методы Дискретная математика Информационное обслуживание пользователей Информация и моделирование в управлении производством Компьютерная графика Математическое и компьютерное моделирование Моделирование Нейрокомпьютеры Проектирование программ диагностики компьютерных систем и сетей Проектирование системных программ Системы счисления Теория статистики Теория оптимизации Уроки AutoCAD 3D Уроки базы данных Access Уроки Orcad Цифровые автоматы Шпаргалки по компьютеру Шпаргалки по программированию Экспертные системы Элементы теории информации

Страничная память

Страничная память - это подход к организации виртуальной памяти, при котором единицей отображения виртуальных адресов в физические является регион константного размера (так называемая страница ). Типичный размер страницы - 4096 байт, для некоторых архитектур - до 128 Кб.

Поддержка такого режима присутствует в большинстве 32-битных и 64-битных процессоров. Такой режим является классическим почти для всех современных ОС, включаяWindows и семейства UNIX. Широкое использование такого режима началось с процессора VAX и ОС VMS с конца 1970 -х годов. В семействе x86 поддержка появилась с поколением 386, первым 32-битным поколениям.

Решаемые проблемы

  • поддержка изоляции процессов и защиты памяти путем создания собственного виртуального адресного пространства для каждого процесса
  • поддержка изоляции области ядра от кода пользовательского режима
  • поддержка памяти «только для чтения» и невыполнимо памяти
  • поддержка отгрузки неиспользуемых страниц в зону подкачки на диске (см. свопинг )
  • поддержка отображения файлов в память
  • поддержка разрешающей между процессами памяти
  • поддержка системного вызова fork () в ОС семейства UNIX

Концепция

Понятие адреса

Адрес, используемый в машинном коде (т.е. значение указателя ) называется «виртуальный адрес». Адрес, процессор выставляет на шину называется «физический адрес».

Таблица страниц

Все обращения процессора к памяти подлежат трансляции через специальную структуру, таблицу TLB (Translation Lookaside Buffer), которая находится в процессоре и является сверхбыстрой. В этой структуре содержится преобразования некоторых (часто 64 ) виртуальных адресов в физические.

Но потому, что 64 строк таблицы недостаточно для реальных приложений, в архитектуре используются таблицы страниц, которые размещены в основной памяти. Каждая таблица страниц сама является страницей с теми же требованиями по выравниванию и размером, и состоит из записей таблицы данных ( page table entries - PTE ).Используется отображение самой таблицы страниц на одну из страниц данных для внесения изменений в записи.

Запись таблицы страниц

Запись таблицы страниц обычно содержит следующую информацию:

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

Из-за того, что число записей в одной таблице ограничено и зависит от размера записи и размера страницы, используется многоуровневая организация таблиц, часто 2 или 3 уровня, иногда 4 (для 64-битных архитектур ). В случае 2 уровней используется «директория» страниц, что имеет в себе записи, которые указывают на физические адреса таблиц страниц. Таблицы содержат записи, которые указывают уже на страницы данных. В случае 3 уровня появляется еще и «супер-директория», содержащий записи, которые указывают на несколько директорий.

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

Формат записей таблиц, их размер, размер страницы и организация таблиц зависят от типа процессора, а иногда и от режима его работы.

Страничная память в x86

Исторически сложилось так, что x86 -процессоры используют 32 -битные PTE, 32 -битные виртуальные адреса, 4 Кб страницы, 1024 записей в таблице, двухуровневые таблицы, старшие 10 бит виртуального адреса - номер записи в директории, следующие 10 - номер записи в таблице, младшие 12 - адрес в странице. Начиная с Pentium Pro, процессоры архитектуры x86 поддерживают страницы размером 4 Мб.

Процессор в режиме PAE (Physical Address Extension) и режиме x86_64 (long mode), использует 64-битные PTE (задействованы не все биты физической адресу, от 36 в PAE до 48 в некоторых x86_64), 32-битные виртуальные адреса, 4Кб страниц 512 записей в таблице, трех-уровневые таблицы с 4 директориями и 4 записями в супер-директории, старшие 2 бита виртуального адреса - номер записи в супер-директории, следующие 9 - в директории, следующие 9 - в таблице.

Физический адрес директории или же супер-директории файл в один из управляющих регистров процессора. При использовании PAE вместо 4Мб страниц используются страницы в 2Мб. В архитектуры x86_64 можно использовать страницы размером 4Кб (4096 байт), 2Мб (2097152 байта), и 1 Гб (1073741824 байта) в самых современных процессорах AMD.

Отказ страницы (page fault)

Если обращение к памяти не может быть видтрансльоване через TLB, тогда микрокод процессора обращается к таблицам страниц и пытается загрузить PTE оттуда в TLB. Если после такой попытки остались проблемы, тогда процессор выполняет специальное прерывание, с названием «отказ страницы" или англ. "page fault». Обработчик этого прерывания находится в подсистеме виртуальной памяти ядра ОС.

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

Причин отказов страниц ( page fault ):

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

Обработчик отказов в ядре может загрузить нужную страницу из файла или с зоны подкачки (см. свопинг ), может создать доступный для записи копию страницы «только для чтения», а может и сгенерировать исключительную ситуацию (в терминах UNIX - сигнал SIGSEGV ) в данном процессе.

Таблицы страниц процессов

Каждый процесс имеет свой собственный набор таблиц страниц. Регистр «директория страниц» перегружается при каждом переключении контекста процесса. Также необходимо очистить ту часть TLB, которая относится к этому процессу.

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

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

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

Файлы, отображенные в память

Обработчик отказа страницы в ядре способен прочитать нужную страницу из файла.

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

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

Третьей преимуществом является возможность «забывания» (discard) некоторых отраженных страниц без загрузки их в зону подкачки, обязательной для выделенной памяти. В случае повторной потребности в странице она может биты быстро загружена из файла снова.

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

Отраженные в память файлы используют в ОС Windows, а также ОС семейства UNIX, для загрузки исполняемых модуделй те динамических библиотек. Они же используются утилитой GNU Grep для чтения входного файла, а также для загрузки шрифтов в ряде графических подсистем.

Страничная и сегментная виртуальная память

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

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

Кроме того, сегментные архитектуры имеют тяжелую проблема SS! = DS ( Stack Segment и Data Segment - сегментные регистры x86), которая была распространена в начале 90-х годах в программировании под 16-битные версии Window. Эта проблема приводила к сложностям в реализации динамических библиотек, поскольку они имеют свой DS и SS текущего процесса, что приводит к невозможности использования «ближних» указателей в них.

Виртуальная память и дисковый кэш

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

Понятно, что данная структура является уже готовым дисковым кэшем. Ее использования в качестве кэша также решает проблему когерентности файла, доступного через системные вызовы read / write, и его же, отраженного в память.

Пути кешированого ввода / вывода в дисковый файл ( FsRtlCopyRead в Windows и аналогичная к ней generic_file_read () в Linux ), реализуются как копирование данных в физические страницы, отображаются на файл.

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

Безопасность

Сначала, архитектура x86 не имела флажок «страница недоступна на исполнение» (NX). Поддержка этого флажка появилась в архитектуре x86 как часть режима PAE (Physical Address Extension) в поколении Pentium 4, под большим давлением со стороны специалистов по компьютерной безопасности. Установка этого флажка на страницах стека икучи (heap) позволяет реализовать аппаратную защиту от исполнения данных, что делает невозможным работу многих разновидностей вредоносного ПО, в том числе, использование многих дыр в Internet Explorer.

Поддержка PAE в Windows, что дает возможность включения защиты от выполнения данных, зьвилася в Windows 2000, она включена «по умолчанию» в серверные версии Windows и исключена из клиентских.

Просмотров: 4130

Вернуться в оглавление:Компьютер




Карта сайта Карта сайта укр


Уроки php mysql Программирование

Онлайн система счисления Калькулятор онлайн обычный Инженерный калькулятор онлайн Замена русских букв на английские для вебмастеров Замена русских букв на английские

Аппаратное и программное обеспечение Графика и компьютерная сфера Интегрированная геоинформационная система Интернет Компьютер Комплектующие компьютера Лекции Методы и средства измерений неэлектрических величин Обслуживание компьютерных и периферийных устройств Операционные системы Параллельное программирование Проектирование электронных средств Периферийные устройства Полезные ресурсы для программистов Программы для программистов Статьи для программистов Cтруктура и организация данных


 


Полезен материал? Поделись:

Не нашли то, что искали? Google вам в помощь!

 
 

© life-prog.ru При использовании материалов прямая ссылка на сайт обязательна.