Виртуальная память
Виртуа́льная па́мять (
В системе с виртуальной памятью используемые программами
Применение виртуальной памяти позволяет:
- освободить программиста от необходимости вручную управлять загрузкой частей программы в память и согласовывать использование памяти с другими программами
- предоставлять программам больше памяти, чем физически установлено в системе
- в многозадачных системах изолировать выполняющиеся программы друг от друга путём назначения им непересекающихся адресных пространств (см. защита памяти)
В настоящее время виртуальная память аппаратно поддерживается в большинстве современных процессоров
История
В
Понятие виртуальной памяти было впервые введено в 1956 году немецким
Прежде чем виртуальная память смогла быть использована в распространённых операционных системах, должен был быть решен ряд проблем. Динамическая трансляция адресов требовала дорогого и сложного в изготовлении специального оборудования. Первые реализации замедляли доступ к памяти.[4] Существовали опасения, что новые общесистемные алгоритмы, использующие внешнюю память, будут менее эффективны, чем ранее использовавшиеся алгоритмы конкретных приложений. К 1969 году дебаты вокруг виртуальной памяти для промышленно выпускаемых компьютеров были завершены: команда исследователей из IBM под руководством Дэвида Сейра (англ. David Sayre) показала, что созданная ими система виртуальной памяти во всех отношениях превосходит лучшие системы, управляемые вручную.[4][12] Первым мини-компьютером, в котором была использована виртуальная память, был норвежский Norsk Data (но.) Nord-1 (но.). В 1970-е годы реализации виртуальной памяти появились в других мини-компьютерах, наиболее известным является VAX, работающий под управлением операционной системы VMS.
Виртуальная память в архитектуре
Страничная организация виртуальной памяти
В большинстве современных операционных систем виртуальная память организуется с помощью страничной адресации. Оперативная память делится на страницы — области памяти фиксированной длины (например, 4096 байт
Сегментная организация виртуальной памяти
Механизм организации виртуальной памяти, при котором виртуальное пространство делится на части произвольного размера — сегменты. Этот механизм позволяет, к примеру, разбить данные процесса на логические блоки.[15] Для каждого сегмента, как и для страницы, могут быть назначены права доступа к нему пользователя и его процессов. При загрузке процесса часть сегментов помещается в оперативную память (при этом для каждого из этих сегментов операционная система подыскивает подходящий участок свободной памяти), а часть сегментов размещается в дисковой памяти. Сегменты одной программы могут занимать в оперативной памяти несмежные участки. Во время загрузки система создает таблицу сегментов процесса (аналогичную таблице страниц), в которой для каждого сегмента указывается начальный физический адрес сегмента в оперативной памяти, размер сегмента, правила доступа, признак модификации, признак обращения к данному сегменту за последний интервал времени и некоторая другая информация. Если виртуальные адресные пространства нескольких процессов включают один и тот же сегмент, то в таблицах сегментов этих процессов делаются ссылки на один и тот же участок оперативной памяти, в который данный сегмент загружается в единственном экземпляре. Система с сегментной организацией функционирует аналогично системе со страничной организацией: время от времени происходят прерывания, связанные с отсутствием нужных сегментов в памяти, при необходимости освобождения памяти некоторые сегменты выгружаются, при каждом обращении к оперативной памяти выполняется преобразование виртуального адреса в физический. Кроме того, при обращении к памяти проверяется, разрешен ли доступ требуемого типа к данному сегменту.
Виртуальный адрес при сегментной организации памяти может быть представлен парой (g, s), где g — номер сегмента, а s — смещение в сегменте. Физический адрес получается путём сложения начального физического адреса сегмента, найденного в таблице сегментов по номеру g, и смещения s.
Недостатком данного метода распределения памяти является фрагментация на уровне сегментов и более медленное по сравнению со страничной организацией преобразование адреса.
Существует также гибридная странично-сегментная организация виртуальной памяти[13].
См. также
- Разделяемая память
- Кэш-память
- Менеджер виртуальной памяти
- Блок управления памятью (Memory Management Unit)
- Утечка памяти
Примечания
- ↑ 1 2 Э. Танненбаум. Архитектура компьютера = Structured Computer Organization. — 5-е изд. — СПб.: Питер, 2013. — С. 476. — 884 с. — ISBN 978-5-469-01274-0.
- ↑ Ч. Кэпс. Р. Стаффорд. VAX: Программирование на языке ассемблера и архитектура = VAX assembly language and architecture. — М.: Радио и связь, 1991. — С. 310. — 416 с. — ISBN 5-256-00706-8.
- ↑ Морс С.П., Алберт Д.Д. Архитектура микропроцессора 80286 = The 80286 architecture. — М.: Радио и связь, 1990. — С. 167. — 304 с. — ISBN 5-256-00466-2.
- ↑ 1 2 3 4 Peter J. Denning. Before Memory Was Virtual // In the Beginning: Recollections of Software Pioneers. — 1997. Архивировано 10 января 2017 года.
- ↑ Elke Jessen. Origin of the Virtual Memory Concept // IEEE Annals of the History of Computing. — 2004. — Т. 26, вып. 4. — С. 71—72.
- .
- ↑ R. J. Creasy. The origin of the VM/370 time-sharing system // IBM Journal of Research & Development. — 1981. — Т. 25, № 5. — С. 486. Архивировано 7 мая 2016 года.
- ↑ Atlas design includes virtual memory Архивная копия от 13 мая 2016 на Wayback Machine — Computer50, University of Manchester 1996
- ↑ Ian Joyner on Burroughs B5000 (англ.)
- ↑ Harvey G. Cragon. Memory Systems and Pipelined Processors. — Jones and Bartlett Publishers, 1996. — С. 113. — ISBN 0-86720-474-5.
- ↑ Королёв Л. Н. Архитектура ЭВМ БЭСМ-6 . Из книги Л. Н. Королёва «Структуры ЭВМ и их математическое обеспечение» (1978). PARALLEL.RU - Информационно-аналитический центр по параллельным вычислениям:. Дата обращения: 21 ноября 2016. Архивировано 13 апреля 2001 года. ()
- .
- ↑ 1 2 Harvey G. Cragon. Memory Systems and Pipelined Processors. — Jones and Bartlett Publishers, 1996. — С. 121. — ISBN 0-86720-474-5.
- ↑ Patterson, Hennessy «Computer organisation and Design. Hardware Software Interface.» 4th edition. ISBN 9780080886138 Chapter 5.4, page 503 (англ.)
- Microsoft Windowsсегментная адресация не используется и заменена делением памяти на секции, что в сущности почти одно и то же.
Литература
- Вахалия Ю. UNIX изнутри. — СПб.: Питер, 2003. С.844. ISBN 5-94723-013-5
- Иртегов Д. Введение в операционные системы. СПб.: Питер, 2002.
- Bruce Jacob, Trevor Mudge. Virtual Memory: Issues of Implementation. — Los Alamitos, CA, USA: IEEE Computer Society Press, 1998. ISSN:0018-9162
- Лекция 9: Виртуальная память. Архитектурные средства поддержки виртуальной памяти / Основы операционных систем - Академия Intel, Московский физико-технический институт, 2004 - Интуит ISBN 978-5-9556-0044-4
Ссылки
- Virtual Memory: Issues of Implementation / Computer Volume 31 Issue 6, June 1998 doi:10.1109/2.683005 (англ.)
- Bo Brantén, Windows driver examples: SwapFs - Драйвер виртуальной памяти для Windows, использующий Linux swap раздел (англ.)
- FAQ по файлу подкачки на WinBlog.ru, 2007