Общие методы реализации виртуальной памяти: Общие методы реализации виртуальной памяти. Реализация виртуального ресурса в различных ОС

Общие методы реализации виртуальной памяти. Реализация виртуального ресурса в различных ОС

Общие методы реализации виртуальной памяти.

Страничное распределение

 

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

Вся оперативная память машины также делится на части такого же размера, называемые физическими страницами (или блоками).

Размер страницы обычно выбирается равным степени двойки: 512, 1024 и т.д., это позволяет упростить механизм преобразования адресов.

 

 
 

 

 

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

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

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

 

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

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

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

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

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

Виртуальный адрес при страничном распределении может быть представлен в виде пары (p, s), где p - номер виртуальной страницы процесса (нумерация страниц начинается с 0), а s - смещение в пределах виртуальной страницы. Учитывая, что размер страницы равен 2 в степени к, смещение s может быть получено простым отделением k младших разрядов в двоичной записи виртуального адреса. Оставшиеся старшие разряды представляют собой двоичную запись номера страницы p.

При каждом обращении к оперативной памяти аппаратными средствами выполняются следующие действия:

 

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

2. Из этой записи извлекается номер физической страницы.

3. К номеру физической страницы присоединяется смещение (младшие разряды виртуального адреса).

 

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

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

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

 

Сегментное распределение

 

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

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

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

 

 

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

Виртуальный адрес при сегментной организации памяти может быть представлен парой (g, s), где g - номер сегмента, а s - смещение в сегменте. Физический адрес получается путем сложения начального физического адреса сегмента, найденного в таблице сегментов по номеру g, и смещения s.

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

 

Сегментно-страничное распределение

 

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

 

 



Свопинг и виртуальная память. Методы реализации виртуальной памяти. Сравнительная оценка методов и их применимость в современных компьютерах. — Студопедия

Виртуализация оперативной памяти осуществляется совокупностью аппаратных и программных (ОС) средств вычислительной системы автоматически без участия программиста и не сказывается на работе приложения. Методы виртуализации памяти: свопинг (swapping), виртуальная память (virtual memory).

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

Недостатки виртуальной памяти: необходимость преобразования виртуальных адресов в физические, сложность аппаратной и программной (ОС) поддержки.

Методы реализации виртуальной памяти:

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

-Сегментная виртуальная память предусматривает перемещение данных сегментами – частями виртуального адресного пространства произвольного размера, полученными с учетом смыслового значения данных.

-Сегментно-страничная виртуальная память использует двухуровневое деление: виртуальное адресное пространство делится на сегменты, а затем сегменты делятся на страницы. Единицей перемещения данных является страница.

-Для временного хранения сегментов и страниц на диске отводится специальная область – страничный файл или файл подкачки (paging file).


Вопрос Страничная Сегментация
Нужно ли программисту знать о том, что используется эта техника?   нет да
Сколько в системе линейных адресных пространств?   много
Может ли суммарное адресное пространство превышать размеры физической памяти?   Да да
Возможно ли разделение процедур и данных, а также раздельная защита для них?   нет да
Легко ли размещаются таблицы с непостоянными размерами?   нет да
Облегчен ли совместный доступ пользователей к процедурам?   нет да

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


Задача

Вектор доступных ресурсов

R1 R2 R3 R4 R1 R2 R3 R4 R1 R2 R3 R4
0-0=0 0-0=0 1-1=0 2-2=0
2-2=0 7-0=7 5-0=5 0-0=0
6-0=6 6-0=6 5-3=2 6-4=2
4-2=2 3-3=0 5-5=0 6-4=2
0-0=0 6-5=1 5-3=2 2-2=0
R1 R2 R3 R4 R1 R2 R3 R4 R1 R2 R3 R4

2.Определяем процесс, который при данном количестве свободных ресурсов может завершиться. Это процесс № 1.

Т.к. ему вообще не обходимо ресурсов. Теперь вектор доступных ресурсов имеет вид

Следующим может быть выполнен процесс 4 (требует две единицы ресурса 1 и две единицы ресурса 4 , которые система может предоставить).

Вектор доступных ресурсов

И т.д. затем сможет завершиться 5, 2 и 3 процессы. Векторы доступных ресурсов для них. Существует порядок планирования, при котором может завершиться каждый процесс. Вывод: система находится в безопасном состоянии.

3. Для возникновения ситуации взаимоблокировки должны выполняться 4 условия:

1) условие взаимного исключения (каждый ресурс либо принадлежит дному процессу, либо свободен)

2) условие удержания и ожидания (процессы, удерживающие полученные ранее ресурсы, могут запрашивать новые ресурсы)

3) условие отсутствия принудительной выгрузки ресурса (процесс сам должен освободить ресурс)

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

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

3. Общие методы реализации виртуальной памяти.

Страничное распределение

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

Вся оперативная память машины также делится на части такого же размера, называемые физическими страницами (или блоками).

Размер страницы обычно выбирается равным степени двойки: 512, 1024 и т.д., это позволяет упростить механизм преобразования адресов.

Рис. 2.14. Страничное распределение памяти

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

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

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

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

  • дольше всего не использовавшаяся страница,

  • первая попавшаяся страница,

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

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

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

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

Виртуальный адрес при страничном распределении может быть представлен в виде пары (p, s), где p - номер виртуальной страницы процесса (нумерация страниц начинается с 0), а s - смещение в пределах виртуальной страницы. Учитывая, что размер страницы равен 2 в степени к, смещение s может быть получено простым отделением k младших разрядов в двоичной записи виртуального адреса. Оставшиеся старшие разряды представляют собой двоичную запись номера страницы p.

Рис. 2.15. Преобразование виртуального адреса в физический

при страничной организации памяти

При каждом обращении к оперативной памяти аппаратными средствами выполняются следующие действия:

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

  2. Из этой записи извлекается номер физической страницы.

  3. К номеру физической страницы присоединяется смещение (младшие разряды виртуального адреса).

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

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

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

Сегментное распределение

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

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

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

Рис. 2.16. Распределение памяти сегментами

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

Виртуальный адрес при сегментной организации памяти может быть представлен парой (g, s), где g - номер сегмента, а s - смещение в сегменте. Физический адрес получается путем сложения начального физического адреса сегмента, найденного в таблице сегментов по номеру g, и смещения s.

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

Сегментно-страничное распределение

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

Контрольные вопросы:

Механизмы реализации виртуальной памяти — Студопедия

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

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

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


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


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

· размещение данных в запоминающих устройствах разного типа, например часть кодов программы - в оперативной памяти, а часть - на диске;

· выбор образов процессов или их частей для перемещения из оперативной памяти на диск и обратно;

· перемещение по мере необходимости данных между памятью и диском;

· преобразование виртуальных адресов в физические.

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

Виртуализация памяти может быть осуществлена на основе двух различных подходов:

· свопинг (swapping) -образы процессов выгружаются на диск и возвращаются в оперативную память целиком;

· виртуальная память (virtual memory) -между оперативной памятью и диском перемещаются части (сегменты, страницы и т. п.) образов про-цессов.

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

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

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

· Сегментная виртуальная память предусматривает перемещение данных сегментами - частями виртуального адресного пространства произвольного размера, полученными с учетом смыслового значения данных.

· Сегментно-страничная виртуальная память использует двухуровневое деление: виртуальное адресное пространство делится на сегменты, а затем сегменты делятся на страницы. Единицей перемещения данных здесь является страница. Этот способ управления памятью объединяет в себе элементы обоих предыдущих подходов.

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

НОУ ИНТУИТ | Лекция | Управление памятью

Аннотация: Виртуальная память. Реализация виртуальной памяти в Windows. Структура виртуального адресного пространства. Выделение памяти процессам. Дескрипторы виртуальных адресов. Трансляция адресов. Ошибки страниц. Пределы памяти.

Виртуальная память

Всем процессам в операционной системе Windows предоставляется важнейший ресурс – виртуальная память (virtual memory). Все данные, с которыми процессы непосредственно работают, хранятся именно в виртуальной памяти.

Название "виртуальная" произошло из-за того что процессу неизвестно реальное (физическое) расположение памяти – она может находиться как в оперативной памяти (ОЗУ), так и на диске. Операционная система предоставляет процессу виртуальное адресное пространство (ВАП, virtual address space) определенного размера и процесс может работать с ячейками памяти по любым виртуальным адресам этого пространства, не "задумываясь" о том, где реально хранятся данные.

Размер виртуальной памяти теоретически ограничивается разрядностью операционной системы. На практике в конкретной реализации операционной системы устанавливаются ограничения ниже теоретического предела. Например, для 32-разрядных систем (x86), которые используют для адресации 32 разрядные регистры и переменные, теоретический максимум составляет 4 ГБ (232 байт = 4 294 967 296 байт = 4 ГБ). Однако для процессов доступна только половина этой памяти – 2 ГБ, другая половина отдается системным компонентам. В 64 разрядных системах (x64) теоретический предел равен 16 экзабайт (264 байт = 16 777 216 ТБ = 16 ЭБ). При этом процессам выделяется 8 ТБ, ещё столько же отдается системе, остальное адресное пространство в нынешних версиях Windows не используется.

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

Реализация виртуальной памяти в Windows

Схема реализации виртуальной памяти в 32-разрядной операционной системе Windows представлена на рис.11.1. Как уже отмечалось, процессу предоставляется виртуальное адресное пространство размером 4 ГБ, из которых 2 ГБ, расположенных по младшим адресам (0000 0000 – 7FFF FFFF), процесс может использовать по своему усмотрению (пользовательское ВАП), а оставшиеся два гигабайта (8000 0000 – FFFF FFFF) выделяются под системные структуры данных и компоненты (системное ВАП)1. Отметим, что каждый процесс имеет свое собственное пользовательское ВАП, а системное ВАП для всех процессов одно и то же.

Реализация виртуальной памяти в 32-разрядных Windows
Рис. 11.1. Реализация виртуальной памяти в 32-разрядных Windows

Виртуальная память делится на блоки одинакового размера – виртуальные страницы. В Windows страницы бывают большие (x86 – 4 МБ, x64 – 2 МБ) и малые (4 КБ). Физическая память (ОЗУ) также делится на страницы точно такого же размера, как и виртуальная память. Общее количество малых виртуальных страниц процесса в 32 разрядных системах равно 1 048 576 (4 ГБ / 4 КБ = 1 048 576).

Обычно процессы задействуют не весь объем виртуальной памяти, а только небольшую его часть. Соответственно, не имеет смысла (и, часто, возможности) выделять страницу в физической памяти для каждой виртуальной страницы всех процессов. Вместо этого в ОЗУ (говорят, "резидентно") находится ограниченное количество страниц, которые непосредственно необходимы процессу. Такое подмножество виртуальных страниц процесса, расположенных в физической памяти, называется рабочим набором процесса (working set).

Те виртуальные страницы, которые пока не требуются процессу, операционная система может выгрузить на диск, в специальный файл, называемый файлом подкачки (page file).

Каким образом процесс узнает, где в данный момент находится требуемая страница? Для этого служат специальные структуры данных – таблицы страниц (page table).

Структура виртуального адресного пространства

Рассмотрим, из каких элементов состоит виртуальное адресное пространство процесса в 32 разрядных Windows (рис.11.2).

В пользовательском ВАП располагаются исполняемый образ процесса, динамически подключаемые библиотеки (DLL, dynamic-link library), куча процесса и стеки потоков.

При запуске программы создается процесс (см. лекцию 6 "Процессы и потоки"), при этом в память загружаются код и данные программы (исполняемый образ, executable image), а также необходимые программе динамически подключаемые библиотеки (DLL). Формируется куча (heap) – область, в которой процесс может выделять память динамическим структурам данных (т. е. структурам, размер которых заранее неизвестен, а определяется в ходе выполнения программы). По умолчанию размер кучи составляет 1 МБ, но при компиляции приложения или в ходе выполнения процесса может быть изменен. Кроме того, каждому потоку предоставляется стек (stack) для хранения локальных переменных и параметров функций, также по умолчанию размером 1 МБ.

Структура виртуального адресного пространства
Рис. 11.2. Структура виртуального адресного пространства

В системном ВАП расположены:

  • образы ядра (ntoskrnl.exe), исполнительной системы, HAL (hal.dll), драйверов устройств, требуемых при загрузке системы;
  • таблицы страниц процесса;
  • системный кэш;
  • пул подкачиваемой памяти (paged pool) – системная куча подкачиваемой памяти;
  • пул подкачиваемой памяти (nonpaged pool) – системная куча неподкачиваемой памяти;
  • другие элементы (см. [5]).

Переменные, в которых хранятся границы разделов в системном ВАП, приведены в [5, стр. 442]. Вычисляются эти переменные в функции MmInitSystem (файл base\ntos\mm\mminit.c, строка 373), отвечающей за инициализацию подсистемы памяти. В файле base\ntos\mm\i386\mi386.h приведена структура ВАП и определены константы, связанные с управлением памятью (например, стартовый адрес системного кэша MM_SYSTEM_CACHE_START, строка 199).

Выделение памяти процессам

Существует несколько способов выделения виртуальной памяти процессам при помощи Windows API2. Рассмотрим два основных способа – с помощью функции VirtualAlloc и с использованием кучи.

1. WinAPI функция VirtualAlloc позволяет резервировать и передавать виртуальную память процессу. При резервировании запрошенный диапазон виртуального адресного пространства закрепляется за процессом (при условии наличия достаточного количества свободных страниц в пользовательском ВАП), соответствующие виртуальные страницы становятся зарезервированными (reserved), но доступа к этой памяти у процесса нет – при попытке чтения или записи возникнет исключение. Чтобы получить доступ, процесс должен передать память зарезервированным страницам, которые в этом случае становятся переданными (commit).

Отметим, что резервируются участки виртуальной памяти по адресам, кратным значению константы гранулярности выделения памяти MM_ALLOCATION_GRANULARITY (файл base\ntos\inc\mm.h, строка 54). Это значение равно 64 КБ. Кроме того, размер резервируемой области должен быть кратен размеру страницы (4 КБ).

WinAPI функция VirtualAlloc для выделения памяти использует функцию ядра NtAllocateVirtualMemory (файл base\ntos\mm\allocvm.c, строка 173).

2. Для более гибкого распределения памяти существует куча процесса, которая управляется диспетчером кучи (heap manager). Кучу используют WinAPI функция HeapAlloc, а также оператор языка C malloc и оператор C++ new. Диспетчер кучи предоставляет возможность процессу выделять память с гранулярностью 8 байтов (в 32-разрядных системах), а для обслуживания этих запросов использует те же функции ядра, что и VirtualAlloc.

Дескрипторы виртуальных адресов

Для хранения информации о зарезервированных страницах памяти используются дескрипторы виртуальных адресов (Virtual Address Descriptors, VAD). Каждый дескриптор содержит данные об одной зарезервированной области памяти и описывается структурой MMVAD (файл base\ntos\mm\mi.h, строка 3976).

Границы области определяются двумя полями – StartingVpn (начальный VPN) и EndingVpn (конечный VPN). VPN (Virtual Page Number) – это номер виртуальной страницы; страницы просто нумеруются, начиная с нулевой. Если размер страницы 4 КБ (212 байт), то VPN получается из виртуального адреса начала страницы отбрасыванием младших 12 бит (или 3 шестнадцатеричных цифр). Например, если виртуальная страница начинается с адреса 0x340000, то VPN такой страницы равен 0x340.

Дескрипторы виртуальных адресов для каждого процесса организованы в сбалансированное двоичное АВЛ дерево3 (AVL tree). Для этого в структуре MMVAD имеются поля указатели на левого и правого потомков: LeftChild и RightChild.

Для хранения информации о состоянии области памяти, за которую отвечает дескриптор, в структуре MMVAD содержится поле флагов VadFlags.

Виртуальная память (Операционные Системы) — Национальная библиотека им. Н. Э. Баумана

Материал из Национальной библиотеки им. Н. Э. Баумана
Последнее изменение этой страницы: 16:49, 24 августа 2017.

Виртуальная память — метод управления памятью, которая реализуется с использованием аппаратного и программного обеспечения компьютера. Она отображает используемые программами виртуальные адреса в физические адреса в памяти компьютера. Основная память представляется в виде непрерывного адресного пространства или набора смежных непрерывных сегментов. Операционная система осуществляет управление виртуальными адресными пространствами и соотнесением оперативной памяти с виртуальной. Программное обеспечение в операционной системе может расширить эти возможности, чтобы обеспечить виртуальное адресное пространство, которое может превысить объем оперативной памяти и таким образом иметь больше памяти, чем есть в компьютере. Виртуальная память позволяет модифицировать ресурсы памяти, сделать объём оперативной памяти намного больше, для того чтобы пользователь, поместив туда как можно больше программ, реально сэкономил время и повысил эффективность своего труда. “Открытие” виртуальной памяти внесло огромную контрибуцию в развитие современных технологий, облегчило работу как профессионального программиста, так и обычного пользователя, обеспечивая процесс более эффективного решения задач на ЭВМ[1].

Преимущества виртуальной памяти

К основным преимуществам виртуальной памяти относят:

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

Свойства виртуальной памяти

Виртуальная память делает программирование приложений проще:

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

Виртуализация памяти может рассматриваться как обобщение понятия виртуальной памяти.

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

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

Страничная организация памяти

При страничной организации все ресурсы памяти, как оперативной, так и внешней представляются для пользователя единым целым. Пользователь работает с общим адресным пространством и не задумывается какая память при этом используется: оперативная или внешняя, а эта общая память носит название виртуальной (моделируемой). Виртуальная память разбивается на страницы, которые содержат определённое фиксированное количество ячеек памяти. При этом одна страница математической памяти не может быть больше или меньше других, все страницы должны быть одинаковы по количеству ячеек. Типичные размеры страниц 256, 512, 1024, 2048 Байт и более (числа кратные 256).

Преимущества виртуальной памяти со страничной организацией

  • Достаточно большой объём прямо адресуемой памяти. Объем памяти может исчисляться сотнями мегабайт (и даже гигабайтами). Размер виртуальной памяти целиком зависит от объёма накопителя на [жестком] магнитном диске. Созданный SWAP файл размещается на диске и эмулирует оперативную память. При этом пользователь не задумывается о том куда будет помещен “кусок” его программы с которой он только что отработал.
  • Программы пользователя могут размещаться в любых свободных страницах[2].
  • Повышает уровень мультипрограммной работы. С организацией виртуальной памяти со страничной организацией пользователь получил реальную возможность загружать в память большее количество программ для того чтобы машина обрабатывала программы сразу (в действительности процессор устанавливает приоритет для каждой программы, находящейся в памяти, и далее в соответствии с приоритетом выделяет определённое количество времени на реализацию каждой программы или команды.

Недостатки виртуальной памяти со страничной организацией

  • Основным недостатком виртуальной памяти является то количество времени, которое машина тратит на обращение к внешней памяти. Извлечь необходимую информацию из ячеек оперативной памяти не представляет особого труда и больших затрат времени. Совсем иначе обстоит дело с диском: для того чтобы найти необходимую информацию, нужно сначала “раскрутить” диск, потом найти необходимую дорожку, в дорожке найти сектор, кластер, далее считать побитовую информацию в ОП. Все это требует времени и, порой если при методе случайного удаления страниц*, процессору понадобятся сразу несколько страниц, хранящихся во внешней памяти, большого времени. К сожалению, этот недостаток принадлежит к виду “неисправимых”.
  • Наличие сверхоперативной памяти (СОП).

Сегментно-страничная организация виртуальной памяти

Сегментно-страничная организация памяти

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

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

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

Менеджер виртуальной памяти

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

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

Закрепленные страницы

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

Источники

  1. ↑ Википедия [Электронный ресурс]: Virtual memory — материал из Википедии — свободной энциклопедии: Версия 79094304, сохранённая в 14:23 UTC 21 ноября 2016 / Авторы Википедии // Википедия, свободная энциклопедия. — Электрон. дан. — Сан-Франциско: Фонд Викимедиа, 2016. — Режим доступа: https://en.wikipedia.org/wiki/Virtual_memory
  2. ↑ Организация виртуальной памяти [Электронный ресурс]: Сведения о продукте / Дата обращения: 31.10.2016. — Режим доступа: https://habrahabr.ru/company/embox/blog/256191/
  3. ↑ Виртуальная память [Электронный ресурс]: Сведения о продукте / Дата обращения: 31.10.2016. — Режим доступа: http://ref.repetiruem.ru/referat/virtualnaja-pamjat
НОУ ИНТУИТ | Лекция | Виртуальная память. Архитектурные средства поддержки виртуальной памяти

Аннотация: Рассмотрены аппаратные особенности поддержки виртуальной памяти. Разбиение адресного пространства процесса на части и динамическая трансляция адреса позволили выполнять процесс даже в отсутствие некоторых его компонентов в оперативной памяти. Следствием такой стратегии является возможность выполнения больших программ, размер которых может превышать размер оперативной памяти.

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

Понятие виртуальной памяти

Разработчикам программного обеспечения часто приходится решать проблему размещения в памяти больших программ, размер которых превышает объем доступной оперативной памяти. Один из вариантов решения данной проблемы – организация структур с перекрытием – рассмотрен в предыдущей лекции. При этом предполагалось активное участие программиста в процессе формирования перекрывающихся частей программы. Развитие архитектуры компьютеров и расширение возможностей операционной системы по управлению памятью позволило переложить решение этой задачи на компьютер. Одним из главных достижений стало появление виртуальной памяти (virtual memory). Впервые она была реализована в 1959 г. на компьютере "Атлас", разработанном в Манчестерском университете.

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

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

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

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

Таким образом, возможность обеспечения (при поддержке операционной системы) для программы "видимости" практически неограниченной (характерный размер для 32-разрядных архитектур 232 = 4 Гбайт) адресуемой пользовательской памяти (логическое адресное пространство) при наличии основной памяти существенно меньших размеров (физическое адресное пространство) – очень важный аспект.

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

Например, 16-разрядный компьютер PDP-11/70 с 64 Кбайт логической памяти мог иметь до 2 Мбайт оперативной памяти. Операционная система этого компьютера тем не менее поддерживала виртуальную память, которая обеспечивала защиту и перераспределение основной памяти между пользовательскими процессами.

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

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

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

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

Сегментная организация в чистом виде встречается редко.

90000 What is, Demand Paging, Advantages 90001 90002 90003 90004 Home 90005 90004 90007 Testing 90008 90009 90004 90003 90004 Back 90005 90004 Agile Testing 90005 90004 BugZilla 90005 90004 Cucumber 90005 90004 Database Testing 90005 90004 ETL Testing 90005 90004 Jmeter 90005 90004 JIRA 90005 90028 90003 90004 Back 90005 90004 JUnit 90005 90004 LoadRunner 90005 90004 Manual Testing 90005 90004 Mobile Testing 90005 90004 Mantis 90005 90004 Postman 90005 90004 QTP 90005 90028 90003 90004 Back 90005 90004 Quality Center (ALM) 90005 90004 RPA 90005 90004 SAP Testing 90005 90004 Selenium 90005 90004 SoapUI 90005 90004 Test Management 90005 90004 TestLink 90005 90028 90005 90028 90005 90004 90007 SAP 90008 90071 90004 90003 90004 Back 90005 9000 4 ABAP 90005 90004 APO 90005 90004 Beginner 90005 90004 Basis 90005 90004 BODS 90005 90004 BI 90005 90004 BPC 90005 90004 CO 90005 90028 90003 90004 Back 90005 90004 CRM 90005 90004 Crystal Reports 90005 90004 FICO 90005 90004 HANA 90005 90004 HR 90005 90004 MM 90005 90004 QM 90005 90004 Payroll 90005 90028 90003 90004 Back 90005 90004 PI / PO 90005 90004 PP 90005 90004 SD 90005 90004 SAPUI5 90005 90004 Security 90005 90004 Solution Manager 90005 90004 Successfactors 90005 90004 SAP Tutorials 90005 90028 90005 90028 90005 90004 90007 Web 90008 90009 90004 90003 90004 Back 90005 90004 Apache 90005 90004 Android 90005 90004 AngularJS 90005 90004 ASP.Net 90005 90004 C 90005 90004 C # 90005 90004 C ++ 90005 90004 CodeIgniter 90005 90004 DBMS 90005 90028 90003 90004 Back 90005 90004 Java 90005 90004 JavaScript 90005 90004 JSP 90005 90004 Kotlin 90005 90004 Linux 90005 90004 MariaDB 90005 90004 MS Access 90005 90004 MYSQL 90005 90004 Node. js 90005 90028 90003 90004 Back 90005 90004 Perl 90005 90004 PHP 90005 90004 PL / SQL 90005 90004 PostgreSQL 90005 90004 Python 90005 90004 ReactJS 90005 90004 Ruby & Rails 90005 90004 Scala 90005 90004 SQL 90005 90028 90003 90004 Back 90005 90004 SQL Server 90005 90004 SQLite 90005 90004 UML 90005 90004 VB.Net 90005 90004 VBScript 90005 90004 Web Services 90005 90004 WPF 90005 90028 90005 90028 90005 90004 90007 Must Learn! 90008 90231 90004 90003 90004 Back 90005 90004 Accounting 90005 90004 Algorithms 90005 90004 Blockchain 90005 90004 Business Analyst 90005 90004 Build Website 90005 90004 CCNA 90005 90004 Cloud Computing 90005 90004 COBOL 90005 90004 Compiler Design 90005 90004 Embedded Systems 90005 90028 90003 90004 Back 90005 90004 Ethical Hacking 90005 90004 Excel Tutorials 90005 90004 Go Programming 90005 90004 IoT 90005 90004 ITIL 90005 90004 Jenkins 90005 90004 MIS 90005 90004 Networking 90005 90004 Operating System 90005 90004 Prep 90005 90028 90003 90004 Back 90005 90004 PMP 90005 90004 Photoshop 90005 90004 Project Management 90005 90004 Reviews 90005 90004 Salesforce 90005 90004 SEO 90005 90004 Software Engineering 90005 90004 VBA 90005 90028 90005 90028 90005 90004 90007 Big Data 90008 90307 90004 90003 90004 Back 90005 90004 AWS 90005 90004 BigData 90005 90004 Cassandra 90005 90004 Cognos 90005 90004 Data Warehousing 90005 90004 DevOps 90005 90004 HBase 90005 90028 90003 90004 Back 90005 90004 Hive 90005 90004 Informatica 90005 90004 MicroStrategy 90005 90004 MongoDB 90005 90004 NiFi 90005 90004 OBIEE 90005 90004 Pentaho 90005 90028 90003 90004 Back 90005 90004 90005 90028 90005 90028 90005 90028 .90000 Understanding Virtual Address, Virtual Memory and Paging 90001 Stack Overflow 90002 90003 Products 90004 90003 Customers 90004 90003 Use cases 90004 90009 90010 90003 Stack Overflow Public questions and answers 90004 90003 Teams Private questions and answers for your team 90004 90003 Enterprise Private self-hosted questions and answers for your enterprise 90004 90003 Jobs Programming and related technical career opportunities 90004 90003 Talent Hire technical talent 90004 90003 Advertising Reach developers worldwide 90004 90009 .90000 Virtual Memory, Paging, and Swapping «Gabriele Tolomei 90001 90002 90003 Virtual Memory 90004 is a memory management technique that is implemented using both hardware (90003 MMU 90004) and software (90003 operating system 90004). It abstracts from the real memory available on a system by introducing the concept of 90003 virtual address space 90004, which allows each process thinking of physical memory as a 90011 contiguous 90012 address space (or collection of contiguous segments).90013 The goal of virtual memory is to map virtual memory addresses generated by an executing program into physical addresses in computer memory. This concerns two main aspects: 90011 address translation 90012 (from virtual to physical) and 90011 virtual address spaces management 90012. The former is implemented on the CPU chip by a specific hardware element called 90003 Memory Management Unit 90004 or 90003 MMU 90004. The latter is instead provided by the operating system, which sets up virtual address spaces (i.e., either a single virtual space for all processes or one for each process) and actually assigns real memory to virtual memory. Furthermore, software within the operating system may provide a virtual address space that can exceed the actual capacity of main memory (i.e., using also secondary memory) and thus reference more memory than is physically present in the system. 90022 90002 The primary benefits of virtual memory include freeing applications (and programmers) from having to manage a shared memory space, increasing security due to memory isolation, and being able to conceptually use more memory than might be physically available, using the technique of 90003 paging 90004.Indeed, almost every virtual memory implementations divide a virtual address space into blocks of contiguous virtual memory addresses, called 90003 pages 90004, which are usually 90003 4 KB 90004 in size. 90013 In order to translate virtual addresses of a process into physical memory addresses used by the hardware to actually process instructions, the MMU makes use of so-called 90003 page table 90004, ie, a data structure managed by the OS that store mappings between virtual and physical addresses.90013 Concretely, the MMU stores a 90011 cache 90012 of recently used mappings out of those stored in the whole OS page table, which is called 90003 Translation Lookaside Buffer 90004 (90003 TLB 90004). 90022 90002 The picture below describes the address translation task as discussed above. 90013 90022 90002 When a virtual address needs to be translated into a physical address, the MMU first searches for it in the TLB cache (90003 step 1. 90004 in the picture above). If a match is found (i.e., 90011 TLB hit 90012) then the physical address is returned and the computation simply goes on (90003 2.a. 90004). Conversely, if there is no match for the virtual address in the TLB cache (ie, 90011 TLB miss 90012), the MMU searches for a match on the whole page table, ie, 90011 page walk 90012 (90003 2.b. 90004) . If this match exists on the page table, this is accordingly written to the TLB cache (90003 3.a. 90004). Thus, the address translation is restarted so that the MMU is able find a match on the updated TLB (90003 1 90004 & 90003 2.a. 90004). 90013 Unfortunately, page table lookup may fail due to two reasons. The first one is when there is no valid translation for the specified virtual address (e.g., when the process tries to access an area of ​​memory which it can not ask for). Otherwise, it may happen if the requested page is not loaded in main memory at the moment (an apposite flag on the corresponding page table entry indicates this situation). In both cases, the control passes from the MMU (hardware) to the 90003 page supervisor 90004 (a software component of the operating system kernel).In the first case, the page supervisor typically raises a 90003 segmentation fault 90004 exception (90003 3.b. 90004). In the second case, instead, a 90003 page fault 90004 occurs (90003 3.c. 90004), which means the requested page has to be retrieved from the secondary storage (i.e., disk) where it is currently stored. Thus, the page supervisor accesses the disk, re-stores in main memory the page corresponding to the virtual address that originated the page fault (90003 4. 90004), updates the page table and the TLB with a new mapping between the virtual address and the physical address where the page has been stored (90003 3.a. 90004), and finally tells the MMU to start again the request so that a TLB hit will take place (90003 1 90004 & 90003 2.a. 90004). 90013 As it turns out, the task of above works until there is enough room in main memory to store pages back from disk. However, when all the physical memory is exhausted, the page supervisor must also free a page in main memory to allow the incoming page from disk to be stored. To fairly determine which page to move from main memory to disk, the paging supervisor may use several 90003 page replacement algorithms 90004, such as 90003 Least Recently Used 90004 (90003 LRU 90004).Generally speaking, moving pages from / to secondary storage to / from main memory is referred to as 90003 swapping 90004 (90003 4. 90004), and this is why page faults may occur. 90022 90002 Let us now turn back to the separation between OS kernel and user mode virtual memory spaces on a typical 32-bit Linux OS, as already introduced in the post In-Memory Layout of a Program (Process) and depicted in the following. 90022 90002 90022 90002 This 90099 does not 90100 mean the kernel uses that much physical memory.Instead, this is just the portion of virtual address space available to map whatever physical memory the OS kernel wishes, and it is orthogonal to the size of available physical memory. Note also that in Linux, kernel space is constantly present and maps the same physical memory in 90011 all 90012 processes, meaning that kernel space does not change and is mapped to same physical memory addresses across any process context switch. 90013 Following the above split rule, kernel has 1 GB kernel virtual address space dedicated, and whatever allocation it does, it uses 90003 always 90004 those set of addresses.The actual mapping of virtual addresses to physical memory addresses happens exactly as discussed above through a combination of hardware (i.e., MMU) and software (i.e., OS page supervisor). 90022 90002 Suppose the system X has 512 MB of physical memory, then only those 512 MB out of the entire 1 GB virtual space will be mapped for kernel address space, leaving the remaining 512 MB of virtual addresses unmapped. On the other hand, if X has 2 GB of physical memory, the entire 1 GB of virtual addresses will be mapped to physical addresses.90013 Having virtual memory could allow OS kernel pages to partly reside on secondary storage (i.e., disk) if the whole kernel does not fit to physical memory. In practice, this does not happen (at least on Linux) since most recent Linux kernels need approximately only 90003 70 MB 90004, which is significantly below the amount of physical memory nowadays available on modern systems. Moreover, the kernel has data and code that must be kept 90003 always 90004 in main memory for efficiency reasons, and also because a page fault could not be handled otherwise.Think about what we discussed above when a page fault happens: the OS kernel (actually the OS page supervisor) takes the control of the system, enters a specific 90003 Interrupt Service Routine 90004 (90003 ISR 90004) to handle the page fault, and gives back the control to the user process that generated the page fault. If the OS kernel was not fit entirely to main memory, it might happen that the kernel itself generates a page fault. In a very bad case, such page fault could, for instance, concern the page with the code for the page fault handling routine, thereby blocking the whole system! That's why kernel code and data are always addressable (i.e., it never generates a page fault), and ready to handle interrupts or system calls at any time. 90022 90118 Like this: 90119 90002 Like Loading ... 90022.90000 Viewing Virtual Memory Usage 90001 90002 If you need more detailed information about virtual memory usage, you can use the 90003 top 90004, 90003 vm_stat 90004, 90003 pagestuff 90004, and 90003 vmmap 90004 command-line tools for analyzing your Mac apps. The information returned by these tools ranges from summary information about all the system processes to detailed information about a specific process. 90011 90002 The following sections provide information on using the 90003 vm_stat 90004, 90003 pagestuff 90004, and 90003 vmmap 90004 tools to gather detailed memory information.For more information on using Instruments to analyze memory, see 90019 Instruments User Guide 90020 and the other articles in this document. For information on how to use the 90003 top 90004 tool, see 90019 Performance Overview 90020. 90011 90026 Viewing Virtual Memory Statistics 90027 90002 The 90003 vm_stat 90004 tool displays high-level statistics about the current virtual memory usage of the system. By default, 90003 vm_stat 90004 displays these statistics once, but you can specify an interval value (in seconds) to update these statistics continuously.For information on the usage of this tool, see the 90003 vm_stat 90004 man page. 90011 90002 Listing 1 shows an example of the output from 90003 vm_stat 90004. 90011 90002 90041 Listing 1 90042 Output of vm_stat tool 90011 90044 90045 90046 90047 Mach Virtual Memory Statistics: (page size of 4096 bytes) 90048 90049 90050 90045 90046 90047 Pages free: 3194. 90048 90049 90050 90045 90046 90047 Pages active: 34594. 90048 90049 90050 90045 90046 90047 Pages inactive: 17870.90048 90049 90050 90045 90046 90047 Pages wired down: 9878. 90048 90049 90050 90045 90046 90047 "Translation faults": 6333197. 90048 90049 90050 90045 90046 90047 Pages copy-on-write: 81385. 90048 90049 90050 90045 90046 90047 Pages zero filled: 3180051. 90048 90049 90050 90045 90046 90047 Pages reactivated: 343961. 90048 90049 90050 90045 90046 90047 Pageins: 33043. 90048 90049 90050 90045 90046 90047 Pageouts: 78496.90048 90049 90050 90045 90046 90047 Object cache: 66227 hits of 96952 lookups (68% hit rate) 90048 90049 90050 90117 90026 Viewing Mach-O Code Pages 90027 90002 The 90003 pagestuff 90004 tool displays information about the specified logical pages of a file conforming to the Mach-O executable format. For each specified page of code, symbols (function and static data structure names) are displayed. All pages in the 90003 __TEXT, __text 90004 section are displayed if no page numbers are given.90011 90002 Listing 2 shows part of the output from 90003 pagestuff 90004 for the TextEdit application. This output is the result of running the tool with the 90003 -a 90004 option, which prints information about all of the executable's code pages. It includes the virtual address locations of each page and the type of information on that page. 90011 90002 90041 Listing 2 90042 Partial output of pagestuff tool 90011 90044 90045 90046 90047 File Page 0 contains Mach-O headers 90048 90049 90050 90045 90046 90047 File Page 1 contains Mach-O headers 90048 90049 90050 90045 90046 90047 File Page 2 contains contents of section (__TEXT, __ text) 90048 90049 90050 90045 90046 90047 Symbols on file page 2 virtual address 0x3a08 to 0x4000 90048 90049 90050 90045 90046 90047 File Page 3 contains contents of section (__TEXT, __ text) 90048 90049 90050 90045 90046 90047 Symbols on file page 3 virtual address 0x4000 to 0x5000 90048 90049 90050 90045 90046 90047 File Page 4 contains contents of section (__TEXT, __ text) 90048 90049 90050 90045 90046 90047 Symbols on file page 4 virtual address 0x5000 to 0x6000 90048 90049 90050 90045 90046 90047 90048 90049 90050 90045 90046 90047... 90048 90049 90050 90045 90046 90047 90048 90049 90050 90045 90046 90047 File Page 22 contains contents of section (__TEXT, __ cstring) 90048 90049 90050 90045 90046 90047 File Page 22 contains contents of section (__TEXT, __ literal4) 90048 90049 90050 90045 90046 90047 File Page 22 contains contents of section (__TEXT, __ literal8) 90048 90049 90050 90045 90046 90047 File Page 22 contains contents of section (__TEXT, __ const) 90048 90049 90050 90045 90046 90047 Symbols on file page 22 virtual address 0x17000 to 0x17ffc 90048 90049 90050 90045 90046 90047 File Page 23 contains contents of section (__DATA, __ data) 90048 90049 90050 90045 90046 90047 File Page 23 contains contents of section (__DATA, __ la_symbol_ptr) 90048 90049 90050 90045 90046 90047 File Page 23 contains contents of section (__DATA, __ nl_symbol_ptr) 90048 90049 90050 90045 90046 90047 File Page 23 contains contents of section (__DATA, __ dyld) 90048 90049 90050 90045 9004 6 90047 File Page 23 contains contents of section (__DATA, __ cfstring) 90048 90049 90050 90045 90046 90047 File Page 23 contains contents of section (__DATA, __ bss) 90048 90049 90050 90045 90046 90047 File Page 23 contains contents of section (__DATA, __ common) 90048 90049 90050 90045 90046 90047 Symbols on file page 23 virtual address 0x18000 to 0x18d48 90048 90049 90050 90045 90046 90047 0x00018000 _NXArgc 90048 90049 90050 90045 90046 90047 0x00018004 _NXArgv 90048 90049 90050 90045 90046 90047 0x00018008 _environ 90048 90049 90050 90045 90046 90047 0x0001800c ___progname 90048 90049 90050 90045 90046 90047... 90048 90049 90050 90117 90002 In the preceding listing, if a page exports any symbols, those symbols are also displayed by the 90003 -a 90004 option. If you want to view the symbols for a single page, pass in the desired page number instead of the 90003 -a 90004 option. For more information about the 90003 pagestuff 90004 tool and its supported options, see the 90003 pagestuff 90004 man page. 90011 90026 Viewing Virtual Memory Regions 90027 90002 The 90003 vmmap 90004 and 90003 vmmap64 90004 tools display the virtual memory regions allocated for a specified process.These tools provide access to the virtual memory of 32-bit and 64-bit applications, respectively. You can use them to understand the purpose of memory at a given address and how that memory is being used. For each virtual-memory region, these tools display the type of page, the starting address, region size (in kilobytes), read / write permissions, sharing mode, and the purpose of the pages in that region. 90011 90002 The following sections show you how to interpret the output from the 90003 vmmap 90004 tool.For more information about the 90003 vmmap 90004 and 90003 vmmap64 90004 tools, see the 90003 vmmap 90004 or 90003 vmmap64 90004 man pages. 90011 90342 Sample Output From vmmap 90343 90002 Listing 3 shows some sample output from the 90003 vmmap 90004 tool. This example is not a full listing of the tool's output but is an abbreviated version showing the primary sections. 90011 90002 90041 Listing 3 90042 Typical output of vmmap 90011 90044 90045 90046 90047 ==== Non-writable regions for process 313 90048 90049 90050 90045 90046 90047 __PAGEZERO 0 [4K] --- / --- SM = NUL...ts / MacOS / Clock 90048 90049 90050 90045 90046 90047 __TEXT 1000 [40K] rx / rwx SM = COW ... ts / MacOS / Clock 90048 90049 90050 90045 90046 90047 __LINKEDIT e000 [4K] r - / rwx SM = COW ... ts / w / Clock 90048 90049 90050 90045 90046 90047 90000 [4K] r - / r-- SM = SHM 90048 90049 90050 90045 90046 90047 340000 [3228K] r - / rwx SM = COW 00000100 00320. .. 90048 90049 90050 90045 90046 90047 789000 [3228K] r - / rwx SM = COW 00000100 00320... 90048 90049 90050 90045 90046 90047 Submap 90000000-9fffffff r - / r-- machine-wide submap 90048 90049 90050 90045 90046 90047 __TEXT 90000000 [932K] rx / rx SM = COW /usr/lib/libSystem.B.dylib 90048 90049 90050 90045 90046 90047 __LINKEDIT 900e9000 [260K] r - / r-- SM = COW /usr/lib/libSystem.B.dylib 90048 90049 90050 90045 90046 90047 __TEXT 90130000 [740K] rx / rx SM = COW .. ./Versions/A/CoreFoundation 90048 90049 90050 90045 90046 90047 __LINKEDIT 901e9000 [188K] r - / r-- SM = COW.../Versions/A/CoreFoundation 90048 90049 90050 90045 90046 90047 __TEXT 90220000 [2144K] rx / rx SM = COW ... / Versions / A / CarbonCore 90048 90049 90050 90045 90046 90047 __LINKEDIT 90438000 [296K] r - / r - SM = COW ... / Versions / A / CarbonCore 90048 90049 90050 90045 90046 90047 90048 90049 90050 90045 90046 90047 [... data omitted ...] 90048 90049 90050 90045 90046 90047 90048 90049 90050 90045 90046 90047 == == Writable regions for process 606 90048 90049 90050 90045 90046 90047 __DATA 18000 [4K] rw- / rwx SM = PRV / Contents / MacOS / TextEdit 90048 90049 90050 90045 90046 90047 __OBJC 19000 [8K] rw- / rwx SM = COW / Contents / MacOS / TextEdit 90048 90049 90050 90045 90046 90047 MALLOC_OTHER 1d000 [256K] rw- / rwx SM = PRV 90048 90049 90050 90045 90046 90047 MALLOC_USED (DefaultMallocZone_0x5d2c0) 5d000 [256K] rw- / rwx SM = PRV 90048 90049 90050 90045 90046 90047 9d000 [372K] rw- / rwx SM = COW 33320000 00000020 00000000 00001b84... 90048 90049 90050 90045 90046 90047 VALLOC_USED (DefaultMallocZone_0x5d2c0) ff000 [36K] rw- / rwx SM = PRV 90048 90049 90050 90045 90046 90047 MALLOC_USED (CoreGraphicsDefaultZone_0x10 108000 [256K] rw- / rwx SM = PRV 90048 90049 90050 90045 90046 90047 MALLOC_USED (CoreGraphicsRegionZone_0x148 148000 [256K] rw- / rwx SM = PRV 90048 90049 90050 90045 90046 90047 90048 90049 90050 90045 90046 90047 [... data omitted ...] 90048 90049 90050 90045 90046 90047 90048 90049 90050 90045 90046 90047 Submap a000b000- a012ffff r - / r-- process-only submap 90048 90049 90050 90045 90046 90047 __DATA a0130000 [28K] rw- / rw- SM = COW.../Versions/A/CoreFoundation 90048 90049 90050 90045 90046 90047 Submap a0137000-a021ffff r - / r-- process-only submap 90048 90049 90050 90045 90046 90047 __DATA a0220000 [20K] rw- / rw- SM = COW .. ./Versions/A/CarbonCore 90048 90049 90050 90045 90046 90047 submap a0225000-a048ffff r - / r-- process-only submap 90048 90049 90050 90045 90046 90047 __DATA a0490000 [12K] rw- / rw- SM = COW ... /IOKit.framework/Versions/A/IOKit 90048 90049 90050 90045 90046 90047 Submap a0493000-a050ffff r - / r-- process-only submap 90048 90049 90050 90045 90046 90047 __DATA a0510000 [36K] rw- / rw- SM = COW .../Versions/A/OSServices 90048 90049 90050 90045 90046 90047 b959e000 [4K] rw- / rw- SM = SHM 90048 90049 90050 90045 90046 90047 b95a0000 [4K] rw- / rw- SM = SHM 90048 90049 90050 90045 90046 90047 b9630000 [164K] rw- / rw- SM = SHM 90048 90049 90050 90045 90046 90047 b965a000 [896K] rw- / rw- SM = SHM 90048 90049 90050 90045 90046 90047 bff80000 [504K] rw- / rwx SM = ZER 90048 90049 90050 90045 90046 90047 STACK [0] bfffe000 [4K] rw- / rwx SM = PRV 90048 90049 90050 90045 90046 90047 bffff000 [4K] rw- / rwx SM = PRV 90048 90049 90050 90045 90046 90047 __DATA c000c000 [4K] rw- / rwx SM = PRV.../Versions/A/ApplicationEnhancer 90048 90049 90050 90045 90046 90047 STACK [1] f0001000 [512K] rw- / rwx SM = PRV 90048 90049 90050 90045 90046 90047 ff002000 [12272K] rw- / rw- SM = SHM 90048 90049 90050 90045 90046 90047 90048 90049 90050 90045 90046 90047 ==== Legend 90048 90049 90050 90045 90046 90047 SM = sharing mode: 90048 90049 90050 90045 90046 90047 COW = copy_on_write PRV = private NUL = empty ALI = aliased 90048 90049 90050 90045 90046 90047 SHM = shared ZER = zero_filled S / A = shared_alias 90048 90049 90050 90045 90046 90047 90048 90049 90050 90045 90046 90047 ==== Summary for process 313 90048 90049 90050 90045 90046 90047 ReadOnly portion of Libraries: Total = 27420KB resident = 12416KB (45% ) swapped_out_or_unallocated = 15004KB (55%) 90048 90049 90050 90045 90046 90047 Writable regions: Total = 21632KB written = 536KB (2%) resident = 1916KB (9%) swapped_out = 0KB (0%) unallocated = 19716KB (91%) 90048 90049 90050 90117 90002 If you specify the 90003 -d 90004 parameter (plus an interval in seconds), 90003 vmmap 90004 takes two snapshots of virtual-memory usage-one at the beginning of a specified interval and the other at the end-and displays the differences.It shows three sets of differences: 90011 90342 Interpreting vmmap's Output 90343 90002 The columns of 90003 vmmap 90004 output have no headings. Instead you can interpret the type of data in each column by its format. Table 1 describes these columns. 90011 90702 90703 90041 Table 1 90042 Column descriptions for vmmap 90706 90045 90708 90002 Column Number 90011 90711 90708 90002 Example 90011 90711 90708 90002 Description 90011 90711 90050 90045 90046 90002 1 90011 90049 90726 90002 90003 __TEXT 90004, 90003 __LINKEDIT 90004, 90003 MALLOC_USED 90004, 90003 STACK 90004, and so on 90011 90049 90726 90002 The purpose of the memory.This column can contain the name of a Mach-O segment or the memory allocation technique. 90011 90049 90050 90045 90046 90002 2 90011 90049 90726 90002 90003 (DefaultMallocZone_0x5d2c0) 90004 90011 90049 90726 90002 If present, the zone used for allocation. 90011 90049 90050 90045 90046 90002 3 90011 90049 90726 90002 90003 4eee000 90004 90011 90049 90726 90002 The virtual memory address of the region. 90011 90049 90050 90045 90046 90002 4 90011 90049 90050 90117.

Отправить ответ

avatar
  Подписаться  
Уведомление о