Пространство имён страницы (page_namespace ) | 0 |
Название страницы (без пространства имён) (page_title ) | 'Виртуальная память' |
Полное название страницы (page_prefixedtitle ) | 'Виртуальная память' |
Вики-текст старой страницы до правки (old_wikitext ) | '{{Amerge|2010-09-13|Линейная адресация памяти}}
'''Виртуа́льная па́мять''' ({{lang-en|Virtual memory}}) — технология управления памятью ЭВМ, разработанная для многозадачных операционных систем. При использовании данной технологии для каждой программы используются независимые схемы адресации памяти, отображающиеся тем или иным способом на [[физические адреса]] в памяти ЭВМ. Позволяет увеличить эффективность использования памяти несколькими одновременно работающими программами, организовав множество независимых {{не переведено|надо=адресное пространство (информатка)|текст=адресных пространств|есть=:en:Address space}}, и обеспечить [[защита памяти|защиту памяти]] между различными приложениями. Также позволяет программисту использовать больше памяти, чем установлено в компьютере, за счет откачки неиспользуемых [[Страничная память|страниц]] на вторичное хранилище (см. [[Подкачка страниц]]).
При использовании виртуальной памяти упрощается программирование, так как программисту больше не нужно учитывать ограниченность памяти, или согласовывать использование памяти с другими приложениями. Для программы выглядит доступным и непрерывным все допустимое адресное пространство, вне зависимости от наличия в ЭВМ соответствующего объема ОЗУ.
<!--
'''Виртуа́льная па́мять''' — технология, которая была разработана с целью увеличения <! — ? — -> общего объема [[память (компьютер)|памяти]], организации множества адресных пространств памяти, их [[защита памяти|защиты]] и автоматизации процесса перемещения машинного кода и данных между основной памятью [[компьютер]]а и вторичным хранилищем. -->
Применение механизма виртуальной памяти позволяет:
* упростить адресацию памяти клиентским программным обеспечением;
* рационально управлять оперативной памятью компьютера (хранить в ней только активно используемые области памяти);
* изолировать процессы друг от друга (процесс полагает, что монопольно владеет всей памятью).
В настоящее время эта технология имеет аппаратную поддержку на всех современных бытовых процессорах. В то же время во встраиваемых системах и в системах специального назначения, где требуется либо очень быстрая работа, либо есть ограничения на длительность отклика ([[системы реального времени]]) виртуальная память используется относительно редко. Также в таких системах реже встречается многозадачность и сложные [[иерархия памяти|иерархии памяти]].
== История ==
В [[1940-е]] и 1950-е годы, до развития виртуальной памяти, все большие программы писались с учетом наличия двух уровней памяти — первичного и вторичного<!--; one such management technique is [[:en:overlaying]]-->. Основной причиной введения виртуальной памяти стало не стремление увеличить объем основной памяти, а метод такого увеличения, который бы был максимально прост для программистов.
{{planned}}
== Страничная организация виртуальной памяти ==
{{main|Страничная память}}
В большинстве современных операционных систем виртуальная память организуется с помощью страничной адресации. Оперативная память делится на страницы: области памяти фиксированной длины (например, 4096 байт), которые являются минимальной единицей выделяемой памяти (то есть даже запрос на 1 байт от приложения приведёт к выделению ему страницы памяти). Процесс обращается к памяти с помощью адреса виртуальной памяти, который содержит в себе номер страницы и смещение внутри страницы. Процессор преобразует номер виртуальной страницы в адрес соответствующей ей физической страницы при помощи буфера [[Translation lookaside buffer|ассоциативной трансляции]]. Если ему не удалось это сделать, то требуется обращение к [[таблица страниц|таблице страниц]] (так называемый ''Page Walk''), что может сделать либо сам процессор, либо операционная система (в зависимости от архитектуры)<ref>Patterson&Hennessy «Computer organisation and Design. Hardware Software Interface.» 4th edition. Chap 5.4, page 503</ref>. Если страница выгружена из оперативной памяти, то операционная система подкачивает страницу с жёсткого диска (см. [[свопинг]]). При запросе на выделение памяти операционная система может «сбросить» на жёсткий диск страницы, к которым давно не было обращений. Критические данные (например, код запущенных и работающих программ, код и память [[ядро операционной системы|ядра]] системы) обычно находятся в оперативной памяти (исключения существуют, однако они не касаются тех частей, которые отвечают за обработку аппаратных прерываний, работу с таблицей страниц и использование файла подкачки).
== Сегментная организация виртуальной памяти ==
{{main|Сегментная адресация памяти}}
Механизм организации виртуальной памяти, при котором виртуальное пространство делится на части произвольного размера — сегменты.
Этот механизм позволяет, к примеру, разбить данные процесса на логические блоки.<ref>В семействе операционных систем [[Microsoft Windows]] сегментная адресация не используется и заменена делением памяти на секции, что в сущности ''почти'' одно и то же.</ref>
<!-- Благодаря этому устраняется один из крупных недостатков страничного механизма — '''внутренняя фрагментация''' памяти (то есть наличие большого количества неиспользованных участков памяти ''внутри'' страниц). Однако, сегментный механизм приводит к '''внешней фрагментации''' памяти (то есть наличию большого количества мелких неиспользованных участков памяти ''между'' сегментами). -->
Для каждого сегмента, как и для страницы, могут быть назначены права доступа к нему пользователя и его процессов.
При загрузке процесса часть сегментов помещается в оперативную память (при этом для каждого из этих сегментов операционная система подыскивает подходящий участок свободной памяти), а часть сегментов размещается в дисковой памяти. Сегменты одной программы могут занимать в оперативной памяти несмежные участки. Во время загрузки система создает таблицу сегментов процесса (аналогичную таблице страниц), в которой для каждого сегмента указывается начальный физический адрес сегмента в оперативной памяти, размер сегмента, правила доступа, признак модификации, признак обращения к данному сегменту за последний интервал времени и некоторая другая информация. Если виртуальные адресные пространства нескольких процессов включают один и тот же сегмент, то в таблицах сегментов этих процессов делаются ссылки на один и тот же участок оперативной памяти, в который данный сегмент загружается в единственном экземпляре. Система с сегментной организацией функционирует аналогично системе со страничной организацией: время от времени происходят прерывания, связанные с отсутствием нужных сегментов в памяти, при необходимости освобождения памяти некоторые сегменты выгружаются, при каждом обращении к оперативной памяти выполняется преобразование виртуального адреса в физический. Кроме того, при обращении к памяти проверяется, разрешен ли доступ требуемого типа к данному сегменту.
Виртуальный адрес при сегментной организации памяти может быть представлен парой (g, s), где g — номер сегмента, а s — смещение в сегменте. Физический адрес получается путем сложения начального физического адреса сегмента, найденного в таблице сегментов по номеру g, и смещения s.
Недостатком данного метода распределения памяти является фрагментация на уровне сегментов и более медленное по сравнению со страничной организацией преобразование адреса.
== См. также ==
* [[Кеш-память]]
* [[Менеджер виртуальной памяти]]
* [[Блок управления памятью]] (Memory Management Unit)
* [[Утечка памяти]]
== Примечания ==
{{примечания}}
== Литература ==
* ''Вахалия Ю.'' 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
{{compu-stub}}
== Ссылки ==
* [http://portal.acm.org/citation.cfm?id=621004 Virtual Memory: Issues of Implementation] {{ref-en}}
* [http://www.acc.umu.se/~bosse/ Драйвер виртуальной памяти, использующий Linux swap раздел] {{ref-en}}
* [http://pcfresh.ru/uvelichenie-razmera-fajla-podkachki.html Увеличение файла подкачки в Microsoft Windows XP/Vista/7]
* [http://www.winblog.ru/2007/09/04/04090701.html FAQ по файлу подкачки на WinBlog.ru]
[[Категория:Виртуальная память| ]]
[[Категория:Защита памяти]]
[[ar:ذاكرة افتراضية]]
[[be-x-old:Віртуальная памяць]]
[[ca:Memòria virtual]]
[[cs:Virtuální paměť]]
[[da:Virtuel hukommelse]]
[[de:Virtuelle Speicherverwaltung]]
[[el:Εικονική μνήμη]]
[[en:Virtual memory]]
[[eo:Virtuala memoro]]
[[es:Memoria virtual]]
[[eu:Alegiazko memoria]]
[[fa:حافظه مجازی]]
[[fi:Näennäismuisti]]
[[fr:Mémoire virtuelle]]
[[gl:Memoria virtual]]
[[he:זיכרון וירטואלי]]
[[hi:वर्चुअल मेमोरी (आभासी स्मृति)]]
[[hu:Virtuális memória]]
[[hy:Վիրտուալ հիշողություն]]
[[id:Memori virtual]]
[[it:Memoria virtuale]]
[[ja:仮想記憶]]
[[ko:가상 메모리]]
[[ky:Виртуалдык эс же виртуалдык эсти башкаруу]]
[[lt:Virtualioji atmintis]]
[[ms:Ingatan maya]]
[[nl:Virtueel geheugen]]
[[no:Virtuell hukommelse]]
[[pl:Pamięć wirtualna]]
[[pt:Memória virtual]]
[[simple:Virtual memory]]
[[sk:Virtuálna pamäť]]
[[sl:Navidezni pomnilnik]]
[[sv:Virtuellt minne]]
[[tr:Sanal bellek]]
[[uk:Віртуальна пам'ять]]
[[vi:Bộ nhớ ảo]]
[[zh:虚拟内存]]' |
Вики-текст новой страницы после правки (new_wikitext ) | '{{Amerge|2010-09-13|Линейная адресация памяти}}
'''Виртуа́льная па́мять''' ({{lang-en|Virtual memory}}) — технология управления памятью ЭВМ, разработанная для многозадачных операционных систем. При использовании данной технологии для каждой программы используются независимые схемы адресации памяти, отображающиеся тем или иным способом на [[физические адреса]] в памяти ЭВМ. Позволяет увеличить эффективность использования памяти несколькими одновременно работающими программами, организовав множество независимых {{не переведено|надо=адресное пространство (информатка)|текст=адресных пространств|есть=:en:Address space}}, и обеспечить [[защита памяти|защиту памяти]] между различными приложениями. Также позволяет программисту использовать больше памяти, чем установлено в компьютере, за счет откачки неиспользуемых [[Страничная память|страниц]] на вторичное хранилище (см. [[Подкачка страниц]]).
При использовании виртуальной памяти упрощается программирование, так как программисту больше не нужно учитывать ограниченность памяти, или согласовывать использование памяти с другими приложениями. Для программы выглядит доступным и непрерывным все допустимое адресное пространство, вне зависимости от наличия в ЭВМ соответствующего объема ОЗУ.
<!--
'''Виртуа́льная па́мять''' — технология, которая была разработана с целью увеличения <! — ? — -> общего объема [[память (компьютер)|памяти]], организации множества адресных пространств памяти, их [[защита памяти|защиты]] и автоматизации процесса перемещения машинного кода и данных между основной памятью [[компьютер]]а и вторичным хранилищем. -->
Применение механизма виртуальной памяти позволяет:
* упростить адресацию памяти клиентским программным обеспечением;
* рационально управлять оперативной памятью компьютера (хранить в ней только активно используемые области памяти);
* изолировать процессы друг от друга (процесс полагает, что монопольно владеет всей памятью).
В настоящее время эта технология имеет аппаратную поддержку на всех современных бытовых процессорах. В то же время во встраиваемых системах и в системах специального назначения, где требуется либо очень быстрая работа, либо есть ограничения на длительность отклика ([[системы реального времени]]) виртуальная память используется относительно редко. Также в таких системах реже встречается многозадачность и сложные [[иерархия памяти|иерархии памяти]].
== История ==
В [[1940-е]] и 1950-е годы, до развития виртуальной памяти, все большие программы писались с учетом наличия двух уровней памяти — первичного и вторичного<!--; one such management technique is [[:en:overlaying]]-->. Основной причиной введения виртуальной памяти стало не стремление увеличить объем основной памяти, а метод такого увеличения, который бы был максимально прост для программистов.
{{planned}}
она
== Страничная организация виртуальной памяти ==
{{main|Страничная память}}
В большинстве современных операционных систем виртуальная память организуется с помощью страничной адресации. Оперативная память делится на страницы: области памяти фиксированной длины (например, 4096 байт), которые являются минимальной единицей выделяемой памяти (то есть даже запрос на 1 байт от приложения приведёт к выделению ему страницы памяти). Процесс обращается к памяти с помощью адреса виртуальной памяти, который содержит в себе номер страницы и смещение внутри страницы. Процессор преобразует номер виртуальной страницы в адрес соответствующей ей физической страницы при помощи буфера [[Translation lookaside buffer|ассоциативной трансляции]]. Если ему не удалось это сделать, то требуется обращение к [[таблица страниц|таблице страниц]] (так называемый ''Page Walk''), что может сделать либо сам процессор, либо операционная система (в зависимости от архитектуры)<ref>Patterson&Hennessy «Computer organisation and Design. Hardware Software Interface.» 4th edition. Chap 5.4, page 503</ref>. Если страница выгружена из оперативной памяти, то операционная система подкачивает страницу с жёсткого диска (см. [[свопинг]]). При запросе на выделение памяти операционная система может «сбросить» на жёсткий диск страницы, к которым давно не было обращений. Критические данные (например, код запущенных и работающих программ, код и память [[ядро операционной системы|ядра]] системы) обычно находятся в оперативной памяти (исключения существуют, однако они не касаются тех частей, которые отвечают за обработку аппаратных прерываний, работу с таблицей страниц и использование файла подкачки).
== Сегментная организация виртуальной памяти ==
{{main|Сегментная адресация памяти}}
Механизм организации виртуальной памяти, при котором виртуальное пространство делится на части произвольного размера — сегменты.
Этот механизм позволяет, к примеру, разбить данные процесса на логические блоки.<ref>В семействе операционных систем [[Microsoft Windows]] сегментная адресация не используется и заменена делением памяти на секции, что в сущности ''почти'' одно и то же.</ref>
<!-- Благодаря этому устраняется один из крупных недостатков страничного механизма — '''внутренняя фрагментация''' памяти (то есть наличие большого количества неиспользованных участков памяти ''внутри'' страниц). Однако, сегментный механизм приводит к '''внешней фрагментации''' памяти (то есть наличию большого количества мелких неиспользованных участков памяти ''между'' сегментами). -->
Для каждого сегмента, как и для страницы, могут быть назначены права доступа к нему пользователя и его процессов.
При загрузке процесса часть сегментов помещается в оперативную память (при этом для каждого из этих сегментов операционная система подыскивает подходящий участок свободной памяти), а часть сегментов размещается в дисковой памяти. Сегменты одной программы могут занимать в оперативной памяти несмежные участки. Во время загрузки система создает таблицу сегментов процесса (аналогичную таблице страниц), в которой для каждого сегмента указывается начальный физический адрес сегмента в оперативной памяти, размер сегмента, правила доступа, признак модификации, признак обращения к данному сегменту за последний интервал времени и некоторая другая информация. Если виртуальные адресные пространства нескольких процессов включают один и тот же сегмент, то в таблицах сегментов этих процессов делаются ссылки на один и тот же участок оперативной памяти, в который данный сегмент загружается в единственном экземпляре. Система с сегментной организацией функционирует аналогично системе со страничной организацией: время от времени происходят прерывания, связанные с отсутствием нужных сегментов в памяти, при необходимости освобождения памяти некоторые сегменты выгружаются, при каждом обращении к оперативной памяти выполняется преобразование виртуального адреса в физический. Кроме того, при обращении к памяти проверяется, разрешен ли доступ требуемого типа к данному сегменту.
Виртуальный адрес при сегментной организации памяти может быть представлен парой (g, s), где g — номер сегмента, а s — смещение в сегменте. Физический адрес получается путем сложения начального физического адреса сегмента, найденного в таблице сегментов по номеру g, и смещения s.
Недостатком данного метода распределения памяти является фрагментация на уровне сегментов и более медленное по сравнению со страничной организацией преобразование адреса.
== См. также ==
* [[Кеш-память]]
* [[Менеджер виртуальной памяти]]
* [[Блок управления памятью]] (Memory Management Unit)
* [[Утечка памяти]]
== Примечания ==
{{примечания}}
== Литература ==
* ''Вахалия Ю.'' 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
{{compu-stub}}
== Ссылки ==
* [http://portal.acm.org/citation.cfm?id=621004 Virtual Memory: Issues of Implementation] {{ref-en}}
* [http://www.acc.umu.se/~bosse/ Драйвер виртуальной памяти, использующий Linux swap раздел] {{ref-en}}
* [http://pcfresh.ru/uvelichenie-razmera-fajla-podkachki.html Увеличение файла подкачки в Microsoft Windows XP/Vista/7]
* [http://www.winblog.ru/2007/09/04/04090701.html FAQ по файлу подкачки на WinBlog.ru]
[[Категория:Виртуальная память| ]]
[[Категория:Защита памяти]]
[[ar:ذاكرة افتراضية]]
[[be-x-old:Віртуальная памяць]]
[[ca:Memòria virtual]]
[[cs:Virtuální paměť]]
[[da:Virtuel hukommelse]]
[[de:Virtuelle Speicherverwaltung]]
[[el:Εικονική μνήμη]]
[[en:Virtual memory]]
[[eo:Virtuala memoro]]
[[es:Memoria virtual]]
[[eu:Alegiazko memoria]]
[[fa:حافظه مجازی]]
[[fi:Näennäismuisti]]
[[fr:Mémoire virtuelle]]
[[gl:Memoria virtual]]
[[he:זיכרון וירטואלי]]
[[hi:वर्चुअल मेमोरी (आभासी स्मृति)]]
[[hu:Virtuális memória]]
[[hy:Վիրտուալ հիշողություն]]
[[id:Memori virtual]]
[[it:Memoria virtuale]]
[[ja:仮想記憶]]
[[ko:가상 메모리]]
[[ky:Виртуалдык эс же виртуалдык эсти башкаруу]]
[[lt:Virtualioji atmintis]]
[[ms:Ingatan maya]]
[[nl:Virtueel geheugen]]
[[no:Virtuell hukommelse]]
[[pl:Pamięć wirtualna]]
[[pt:Memória virtual]]
[[simple:Virtual memory]]
[[sk:Virtuálna pamäť]]
[[sl:Navidezni pomnilnik]]
[[sv:Virtuellt minne]]
[[tr:Sanal bellek]]
[[uk:Віртуальна пам'ять]]
[[vi:Bộ nhớ ảo]]
[[zh:虚拟内存]]' |