Просмотр отдельных изменений
Эта страница позволяет вам проверить переменные, сгенерированные фильтром злоупотреблений, на предмет отдельного изменения.
Переменные, созданные для этого изменения
Переменная | Значение |
---|---|
Число правок участника (user_editcount ) | null |
Имя учётной записи (user_name ) | '93.85.204.208' |
Группы (включая неявные) в которых состоит участник (user_groups ) | [
0 => '*'
] |
Редактирует ли участник через мобильный интерфейс (user_mobile ) | false |
ID страницы (page_id ) | 133231 |
Пространство имён страницы (page_namespace ) | 0 |
Название страницы (без пространства имён) (page_title ) | 'Виртуальная память' |
Полное название страницы (page_prefixedtitle ) | 'Виртуальная память' |
Последние десять редакторов страницы (page_recent_contributors ) | [
0 => 'Gromolyak',
1 => 'RotlinkBot',
2 => 'Avivanov76',
3 => 'MBHbot',
4 => '217.10.38.65',
5 => 'Ghuron',
6 => '95.54.250.254',
7 => 'Rubinbot',
8 => 'A5b',
9 => '91.215.141.248'
] |
Действие (action ) | 'edit' |
Описание правки/причина (summary ) | '' |
Была ли правка отмечена как «малое изменение» (больше не используется) (minor_edit ) | false |
Вики-текст старой страницы до правки (old_wikitext ) | ''''Виртуа́льная па́мять''' ({{lang-en|Virtual memory}}) — технология управления памятью ЭВМ, разработанная для многозадачных операционных систем. При использовании данной технологии для каждой программы используются независимые схемы адресации памяти, отображающиеся тем или иным способом на [[физические адреса]] в памяти ЭВМ. Позволяет увеличить эффективность использования памяти несколькими одновременно работающими программами, организовав множество независимых {{не переведено|надо=адресное пространство (информатика)|текст=адресных пространств|есть=:en:Address space}}, и обеспечить [[защита памяти|защиту памяти]] между различными приложениями. Также позволяет программисту использовать больше памяти, чем установлено в компьютере, за счет откачки неиспользуемых [[Страничная память|страниц]] на вторичное хранилище (см. [[Подкачка страниц]]).
При использовании виртуальной памяти упрощается программирование, так как программисту больше не нужно учитывать ограниченность памяти или согласовывать использование памяти с другими приложениями. Для программы выглядит доступным и непрерывным все допустимое адресное пространство, вне зависимости от наличия в ЭВМ соответствующего объёма ОЗУ.
<!--
'''Виртуа́льная па́мять''' — технология, которая была разработана с целью увеличения <! — ? — -> общего объема [[память (компьютер)|памяти]], организации множества адресных пространств памяти, их [[защита памяти|защиты]] и автоматизации процесса перемещения машинного кода и данных между основной памятью [[компьютер]]а и вторичным хранилищем. -->
Применение механизма виртуальной памяти позволяет:
* упростить адресацию памяти клиентским программным обеспечением;
* рационально управлять оперативной памятью компьютера (хранить в ней только активно используемые области памяти);
* изолировать процессы друг от друга (процесс полагает, что монопольно владеет всей памятью).
В настоящее время эта технология имеет аппаратную поддержку на всех современных бытовых процессорах. В то же время во встраиваемых системах и в системах специального назначения, где требуется либо очень быстрая работа, либо есть ограничения на длительность отклика ([[системы реального времени]]) виртуальная память используется относительно редко. Также в таких системах реже встречается многозадачность и сложные [[иерархия памяти|иерархии памяти]].
== История ==
В [[1940-е]] и [[1950-е]] годы, все программы, размер которых превышал объём оперативной памяти, должны были содержать логику управления оперативной и внешней памятью, такую как [[Overlay (программирование)|оверлей]]. В связи с этим, виртуальная память была введена не только для увеличения объёма оперативной памяти, но и для того, чтобы сделать такое увеличение наиболее простым в использовании для программистов.<ref name="denning">{{статья
| автор=Peter J. Denning
| заглавие=Before Memory Was Virtual
| издание=In the Beginning: Recollections of Software Pioneers
| год=1997
| ссылка=http://cs.gmu.edu/cne/pjd/PUBS/bvm.pdf
}}</ref> Для поддержки [[Мультипрограммирование|мультипрограммирования]] и [[Многозадачность|многозадачности]] во многих ранних компьютерных системах разделение памяти между несколькими программами осуществлялось без виртуальной памяти, с помощью [[Сегментная адресация памяти|сегментации]] (например, в компьютерах [[PDP-10]]).
Понятие виртуальной памяти было впервые введено в 1956 году немецким [[физик]]ом [[Гюнтш, Фриц-Рудольф|Фрицем-Рудольфом Гюнтшем]] ({{lang-de|Fritz-Rudolf Güntsch}}) из [[Берлинский технический университет|Берлинского технического университета]] в его докторской диссертации «Логическое проектирование цифровой вычислительной машины с несколькими асинхронными вращающимися барабанами и автоматическим высокоскоростным управлением памятью». В ней описывается машина с 6 блоками [[Память на магнитных сердечниках|памяти на магнитных сердечниках]] ёмкостью 100 слов каждый, и адресным пространством в 1000 блоков по 100 слов. Аппаратное обеспечение машины автоматически перемещает блоки между основной и внешней памятью на [[Магнитный барабан|магнитных барабанах]].<ref>{{статья
| автор=Elke Jessen
| заглавие=Origin of the Virtual Memory Concept
| издание=IEEE Annals of the History of Computing
| том=26
| выпуск=4
| год=2004
| страницы=71-72
}}</ref><ref name=springer>{{статья
| автор=Elke Jessen
| заглавие=Die Entwicklung des virtuellen Speichers
| издание=Informatik-Spektrum
| издательство=Springer-Verlag
| том=19
| выпуск=4
| год=1996
| страницы=216–219
| doi=10.1007/s002870050034
| issn=0170-6012
}}</ref> [[Подкачка страниц]] впервые была реализована в [[Манчестерский университет|Манчестерском университете]] как способ расширения памяти компьютера [[Atlas (компьютер)|Atlas]] путём объединения его основной памяти на магнитных сердечниках объёмом 16000 слов с памятью на магнитных барабанах ёмкостью 96000 слов. Первая поставка машины Atlas состоялась в 1962 году, но работающие прототипы подкачки страниц были разработаны уже в 1959 году.<ref name="denning"/><ref>{{статья
| автор=R. J. Creasy
| ссылка=http://pages.cs.wisc.edu/~stjones/proj/vm_reading/ibmrd2505M.pdf
| заглавие=The origin of the VM/370 time-sharing system
| издание=IBM Journal of Research & Development
| том=25
| номер=5
| год=1981
| страницы=486
}}</ref><ref>[http://www.computer50.org/kgill/atlas/atlas.html Atlas design includes virtual memory]</ref> В 1961 году [[Burroughs Corporation]] независимо выпустила первый промышленно производившийся компьютер с виртуальной памятью [[B5000]], использующий сегментацию вместо подкачки страниц.<ref>[http://web.archive.org/web/20080213220156/http://web.mac.com/joynerian/iWeb/Ian%20Joyner/Burroughs.html Ian Joyner on Burroughs B5000]</ref><ref>{{книга
| автор=Harvey G. Cragon
| заглавие=Memory Systems and Pipelined Processors
| издательство=Jones and Bartlett Publishers
| страницы=113
| год=1996
| ссылка=http://books.google.com/?id=q2w3JSFD7l4C|isbn=0-86720-474-5}}</ref>
В 1965 году виртуальная память была реализована в отечественной машине [[БЭСМ-6]], хотя реализованный механизм не позволял расширить 15-разрядное адресное пространство процесса и ограничивал удобство программирования.<ref>{{cite web
| author = Королёв Л. Н.
| url = http://www.parallel.ru/history/besm6.html
| title = Архитектура ЭВМ БЭСМ-6
| work = Из книги Л. Н. Королёва «Структуры ЭВМ и их математическое обеспечение» (1978)
| publisher = PARALLEL.RU - Информационно-аналитический центр по параллельным вычислениям:
| accessdate = 2009-08-07
| archiveurl = http://www.webcitation.org/61GH8DCpC
| archivedate = 2011-08-28
}}</ref>
Прежде чем виртуальная память смогла быть использована в распространённых операционных системах, должен был быть решен ряд проблем. Динамическая трансляция адресов требовала дорогого и сложного в изготовлении специального оборудования. Первые реализации замедляли доступ к памяти.<ref name="denning" /> Существовали опасения, что новые общесистемные алгоритмы, использующие внешнюю память, будут менее эффективны, чем ранее использовавшиеся алгоритмы конкретных приложений. К 1969 году дебаты вокруг виртуальной памяти для промышленно выпускаемых компьютеров были завершены: команда исследователей из [[IBM]] под руководством Дэвида Сейра ({{lang-en|David Sayre}}) показала, что созданная ими система виртуальной памяти во всех отношениях превосходит самые лучшие системы, управляемые вручную.<ref name="denning" /><ref>{{статья
| автор=D. Sayre
| заглавие=Is automatic "folding" of programs efficient enough to displace manual?
| издание=Communications of the ACM
| издательство=ACM
| том=12
| выпуск=12
| год=1969
| страницы=656-660
| doi=10.1145/363626.363629
| issn=0001-0782
}}</ref>
Первым [[миникомпьютер]]ом, в котором была использована виртуальная память, был норвежский NORD-1. В 1970-е годы реализации виртуальной памяти появились в других миникомпьютерах, наиболее известным является [[VAX]], работающий под управлением операционной системы [[OpenVMS|VMS]].
Виртуальная память в архитектуре [[x86]] была реализована с появлением [[Защищенный режим|защищенного режима]] процессора [[80286]], однако она использовала сегментацию памяти, и метод подкачки сегментов плохо масштабировался для больших размеров сегментов. В процессоре [[80386]] была введена поддержка подкачки страниц, не приводящая к возникновению двойной ошибки, если во время обработки другого исключения возникло исключение ошибки страницы. Поверх системы подкачки страниц работал существующий механизм сегментации памяти. Однако загрузка дескрипторов сегментов являлась дорогостоящей операцией, заставляя разработчиков операционных систем полагаться только на механизм подкачки страниц, а не на комбинацию подкачки страниц и сегментации.
== Страничная организация виртуальной памяти ==
{{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
== Ссылки ==
* [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]
[[Категория:Виртуальная память| ]]
[[Категория:Защита памяти]]' |
Вики-текст новой страницы после правки (new_wikitext ) | ''''Виртуа́льная па́мять''' ({{lang-en|Virtual memory}}) — технология управления памятью ЭВМ, разработанная для многозадачных операционных систем. При использовании данной технологии для каждой программы используются независимые схемы адресации памяти, отображающиеся тем или иным способом на [[физические адреса]] в памяти ЭВМ. Позволяет увеличить эффективность использования памяти несколькими одновременно работающими программами, организовав множество независимых {{не переведено|надо=адресное пространство (информатика)|текст=адресных пространств|есть=:en:Address space}}, и обеспечить [[защита памяти|защиту памяти]] между различными приложениями. Также позволяет программисту использовать больше памяти, чем установлено в компьютере, за счет откачки неиспользуемых [[Страничная память|страниц]] на вторичное хранилище (см. [[Подкачка страниц]]).
<!--
'''Виртуа́льная па́мять''' — технология, которая была разработана с целью увеличения <! — ? — -> общего объема [[память (компьютер)|памяти]], организации множества адресных пространств памяти, их [[защита памяти|защиты]] и автоматизации процесса перемещения машинного кода и данных между основной памятью [[компьютер]]а и вторичным хранилищем. -->
Применение механизма виртуальной памяти позволяет:
* упростить адресацию памяти клиентским программным обеспечением;
* рационально управлять оперативной памятью компьютера (хранить в ней только активно используемые области памяти);
* изолировать процессы друг от друга (процесс полагает, что монопольно владеет всей памятью).
В настоящее время эта технология имеет аппаратную поддержку на всех современных бытовых процессорах. В то же время во встраиваемых системах и в системах специального назначения, где требуется либо очень быстрая работа, либо есть ограничения на длительность отклика ([[системы реального времени]]) виртуальная память используется относительно редко. Также в таких системах реже встречается многозадачность и сложные [[иерархия памяти|иерархии памяти]].
== История ==
В [[1940-е]] и [[1950-е]] годы, все программы, размер которых превышал объём оперативной памяти, должны были содержать логику управления оперативной и внешней памятью, такую как [[Overlay (программирование)|оверлей]]. В связи с этим, виртуальная память была введена не только для увеличения объёма оперативной памяти, но и для того, чтобы сделать такое увеличение наиболее простым в использовании для программистов.<ref name="denning">{{статья
| автор=Peter J. Denning
| заглавие=Before Memory Was Virtual
| издание=In the Beginning: Recollections of Software Pioneers
| год=1997
| ссылка=http://cs.gmu.edu/cne/pjd/PUBS/bvm.pdf
}}</ref> Для поддержки [[Мультипрограммирование|мультипрограммирования]] и [[Многозадачность|многозадачности]] во многих ранних компьютерных системах разделение памяти между несколькими программами осуществлялось без виртуальной памяти, с помощью [[Сегментная адресация памяти|сегментации]] (например, в компьютерах [[PDP-10]]).
Понятие виртуальной памяти было впервые введено в 1956 году немецким [[физик]]ом [[Гюнтш, Фриц-Рудольф|Фрицем-Рудольфом Гюнтшем]] ({{lang-de|Fritz-Rudolf Güntsch}}) из [[Берлинский технический университет|Берлинского технического университета]] в его докторской диссертации «Логическое проектирование цифровой вычислительной машины с несколькими асинхронными вращающимися барабанами и автоматическим высокоскоростным управлением памятью». В ней описывается машина с 6 блоками [[Память на магнитных сердечниках|памяти на магнитных сердечниках]] ёмкостью 100 слов каждый, и адресным пространством в 1000 блоков по 100 слов. Аппаратное обеспечение машины автоматически перемещает блоки между основной и внешней памятью на [[Магнитный барабан|магнитных барабанах]].<ref>{{статья
| автор=Elke Jessen
| заглавие=Origin of the Virtual Memory Concept
| издание=IEEE Annals of the History of Computing
| том=26
| выпуск=4
| год=2004
| страницы=71-72
}}</ref><ref name=springer>{{статья
| автор=Elke Jessen
| заглавие=Die Entwicklung des virtuellen Speichers
| издание=Informatik-Spektrum
| издательство=Springer-Verlag
| том=19
| выпуск=4
| год=1996
| страницы=216–219
| doi=10.1007/s002870050034
| issn=0170-6012
}}</ref> [[Подкачка страниц]] впервые была реализована в [[Манчестерский университет|Манчестерском университете]] как способ расширения памяти компьютера [[Atlas (компьютер)|Atlas]] путём объединения его основной памяти на магнитных сердечниках объёмом 16000 слов с памятью на магнитных барабанах ёмкостью 96000 слов. Первая поставка машины Atlas состоялась в 1962 году, но работающие прототипы подкачки страниц были разработаны уже в 1959 году.<ref name="denning"/><ref>{{статья
| автор=R. J. Creasy
| ссылка=http://pages.cs.wisc.edu/~stjones/proj/vm_reading/ibmrd2505M.pdf
| заглавие=The origin of the VM/370 time-sharing system
| издание=IBM Journal of Research & Development
| том=25
| номер=5
| год=1981
| страницы=486
}}</ref><ref>[http://www.computer50.org/kgill/atlas/atlas.html Atlas design includes virtual memory]</ref> В 1961 году [[Burroughs Corporation]] независимо выпустила первый промышленно производившийся компьютер с виртуальной памятью [[B5000]], использующий сегментацию вместо подкачки страниц.<ref>[http://web.archive.org/web/20080213220156/http://web.mac.com/joynerian/iWeb/Ian%20Joyner/Burroughs.html Ian Joyner on Burroughs B5000]</ref><ref>{{книга
| автор=Harvey G. Cragon
| заглавие=Memory Systems and Pipelined Processors
| издательство=Jones and Bartlett Publishers
| страницы=113
| год=1996
| ссылка=http://books.google.com/?id=q2w3JSFD7l4C|isbn=0-86720-474-5}}</ref>
В 1965 году виртуальная память была реализована в отечественной машине [[БЭСМ-6]], хотя реализованный механизм не позволял расширить 15-разрядное адресное пространство процесса и ограничивал удобство программирования.<ref>{{cite web
| author = Королёв Л. Н.
| url = http://www.parallel.ru/history/besm6.html
| title = Архитектура ЭВМ БЭСМ-6
| work = Из книги Л. Н. Королёва «Структуры ЭВМ и их математическое обеспечение» (1978)
| publisher = PARALLEL.RU - Информационно-аналитический центр по параллельным вычислениям:
| accessdate = 2009-08-07
| archiveurl = http://www.webcitation.org/61GH8DCpC
| archivedate = 2011-08-28
}}</ref>
Прежде чем виртуальная память смогла быть использована в распространённых операционных системах, должен был быть решен ряд проблем. Динамическая трансляция адресов требовала дорогого и сложного в изготовлении специального оборудования. Первые реализации замедляли доступ к памяти.<ref name="denning" /> Существовали опасения, что новые общесистемные алгоритмы, использующие внешнюю память, будут менее эффективны, чем ранее использовавшиеся алгоритмы конкретных приложений. К 1969 году дебаты вокруг виртуальной памяти для промышленно выпускаемых компьютеров были завершены: команда исследователей из [[IBM]] под руководством Дэвида Сейра ({{lang-en|David Sayre}}) показала, что созданная ими система виртуальной памяти во всех отношениях превосходит самые лучшие системы, управляемые вручную.<ref name="denning" /><ref>{{статья
| автор=D. Sayre
| заглавие=Is automatic "folding" of programs efficient enough to displace manual?
| издание=Communications of the ACM
| издательство=ACM
| том=12
| выпуск=12
| год=1969
| страницы=656-660
| doi=10.1145/363626.363629
| issn=0001-0782
}}</ref>
Первым [[миникомпьютер]]ом, в котором была использована виртуальная память, был норвежский NORD-1. В 1970-е годы реализации виртуальной памяти появились в других миникомпьютерах, наиболее известным является [[VAX]], работающий под управлением операционной системы [[OpenVMS|VMS]].
Виртуальная память в архитектуре [[x86]] была реализована с появлением [[Защищенный режим|защищенного режима]] процессора [[80286]], однако она использовала сегментацию памяти, и метод подкачки сегментов плохо масштабировался для больших размеров сегментов. В процессоре [[80386]] была введена поддержка подкачки страниц, не приводящая к возникновению двойной ошибки, если во время обработки другого исключения возникло исключение ошибки страницы. Поверх системы подкачки страниц работал существующий механизм сегментации памяти. Однако загрузка дескрипторов сегментов являлась дорогостоящей операцией, заставляя разработчиков операционных систем полагаться только на механизм подкачки страниц, а не на комбинацию подкачки страниц и сегментации.
== Страничная организация виртуальной памяти ==
{{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
== Ссылки ==
* [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]
[[Категория:Виртуальная память| ]]
[[Категория:Защита памяти]]' |
Унифицированная разница изменений правки (edit_diff ) | '@@ -1,6 +1,5 @@
'''Виртуа́льная па́мять''' ({{lang-en|Virtual memory}}) — технология управления памятью ЭВМ, разработанная для многозадачных операционных систем. При использовании данной технологии для каждой программы используются независимые схемы адресации памяти, отображающиеся тем или иным способом на [[физические адреса]] в памяти ЭВМ. Позволяет увеличить эффективность использования памяти несколькими одновременно работающими программами, организовав множество независимых {{не переведено|надо=адресное пространство (информатика)|текст=адресных пространств|есть=:en:Address space}}, и обеспечить [[защита памяти|защиту памяти]] между различными приложениями. Также позволяет программисту использовать больше памяти, чем установлено в компьютере, за счет откачки неиспользуемых [[Страничная память|страниц]] на вторичное хранилище (см. [[Подкачка страниц]]).
-При использовании виртуальной памяти упрощается программирование, так как программисту больше не нужно учитывать ограниченность памяти или согласовывать использование памяти с другими приложениями. Для программы выглядит доступным и непрерывным все допустимое адресное пространство, вне зависимости от наличия в ЭВМ соответствующего объёма ОЗУ.
<!--
'''Виртуа́льная па́мять''' — технология, которая была разработана с целью увеличения <! — ? — -> общего объема [[память (компьютер)|памяти]], организации множества адресных пространств памяти, их [[защита памяти|защиты]] и автоматизации процесса перемещения машинного кода и данных между основной памятью [[компьютер]]а и вторичным хранилищем. -->
' |
Новый размер страницы (new_size ) | 23041 |
Старый размер страницы (old_size ) | 23686 |
Изменение размера в правке (edit_delta ) | -645 |
Добавленные в правке строки (added_lines ) | [] |
Удалённые в правке строки (removed_lines ) | [
0 => 'При использовании виртуальной памяти упрощается программирование, так как программисту больше не нужно учитывать ограниченность памяти или согласовывать использование памяти с другими приложениями. Для программы выглядит доступным и непрерывным все допустимое адресное пространство, вне зависимости от наличия в ЭВМ соответствующего объёма ОЗУ.'
] |
Все внешние ссылки, добавленные в правке (added_links ) | [] |
Все внешние ссылки в новом тексте (all_links ) | [
0 => 'http://cs.gmu.edu/cne/pjd/PUBS/bvm.pdf',
1 => 'http://www.sigla.ru/table.jsp?f=8&t=3&v0=0170-6012&f=1003&t=1&v1=&f=4&t=2&v2=&f=21&t=3&v3=&f=1016&t=3&v4=&f=1016&t=3&v5=&bf=4&b=&d=0&ys=&ye=&lng=&ft=&mt=&dt=&vol=&pt=&iss=&ps=&pe=&tr=&tro=&cc=UNION&i=1&v=tagged&s=0&ss=0&st=0&i18n=ru&rlf=&psz=20&bs=20&ce=hJfuypee8JzzufeGmImYYIpZKRJeeOeeWGJIZRrRRrdmtdeee88NJJJJpeeefTJ3peKJJ3UWWPtzzzzzzzzzzzzzzzzzbzzvzzpy5zzjzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzztzzzzzzzbzzzzzzzzzzzzzzzzzzzzzzzzzzzvzzzzzzyeyTjkDnyHzTuueKZePz9decyzzLzzzL*.c8.NzrGJJvufeeeeeJheeyzjeeeeJh*peeeeKJJJJJJJJJJmjHvOJJJJJJJJJfeeeieeeeSJJJJJSJJJ3TeIJJJJ3..E.UEAcyhxD.eeeeeuzzzLJJJJ5.e8JJJheeeeeeeeeeeeyeeK3JJJJJJJJ*s7defeeeeeeeeeeeeeeeeeeeeeeeeeSJJJJJJJJZIJJzzz1..6LJJJJJJtJJZ4....EK*&debug=false',
2 => 'http://dx.doi.org/10.1007%2Fs002870050034',
3 => 'http://pages.cs.wisc.edu/~stjones/proj/vm_reading/ibmrd2505M.pdf',
4 => 'http://www.computer50.org/kgill/atlas/atlas.html',
5 => 'http://web.archive.org/web/20080213220156/http://web.mac.com/joynerian/iWeb/Ian%20Joyner/Burroughs.html',
6 => 'http://books.google.com/?id=q2w3JSFD7l4C',
7 => 'http://www.parallel.ru/history/besm6.html',
8 => 'http://www.webcitation.org/61GH8DCpC',
9 => 'http://www.sigla.ru/table.jsp?f=8&t=3&v0=0001-0782&f=1003&t=1&v1=&f=4&t=2&v2=&f=21&t=3&v3=&f=1016&t=3&v4=&f=1016&t=3&v5=&bf=4&b=&d=0&ys=&ye=&lng=&ft=&mt=&dt=&vol=&pt=&iss=&ps=&pe=&tr=&tro=&cc=UNION&i=1&v=tagged&s=0&ss=0&st=0&i18n=ru&rlf=&psz=20&bs=20&ce=hJfuypee8JzzufeGmImYYIpZKRJeeOeeWGJIZRrRRrdmtdeee88NJJJJpeeefTJ3peKJJ3UWWPtzzzzzzzzzzzzzzzzzbzzvzzpy5zzjzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzztzzzzzzzbzzzzzzzzzzzzzzzzzzzzzzzzzzzvzzzzzzyeyTjkDnyHzTuueKZePz9decyzzLzzzL*.c8.NzrGJJvufeeeeeJheeyzjeeeeJh*peeeeKJJJJJJJJJJmjHvOJJJJJJJJJfeeeieeeeSJJJJJSJJJ3TeIJJJJ3..E.UEAcyhxD.eeeeeuzzzLJJJJ5.e8JJJheeeeeeeeeeeeyeeK3JJJJJJJJ*s7defeeeeeeeeeeeeeeeeeeeeeeeeeSJJJJJJJJZIJJzzz1..6LJJJJJJtJJZ4....EK*&debug=false',
10 => 'http://dx.doi.org/10.1145%2F363626.363629',
11 => 'http://portal.acm.org/citation.cfm?id=621004',
12 => 'http://www.acc.umu.se/~bosse/',
13 => 'http://pcfresh.ru/uvelichenie-razmera-fajla-podkachki.html',
14 => 'http://www.winblog.ru/2007/09/04/04090701.html'
] |
Ссылки на странице до правки (old_links ) | [
0 => 'http://books.google.com/?id=q2w3JSFD7l4C',
1 => 'http://cs.gmu.edu/cne/pjd/PUBS/bvm.pdf',
2 => 'http://dx.doi.org/10.1007%2Fs002870050034',
3 => 'http://dx.doi.org/10.1145%2F363626.363629',
4 => 'http://pages.cs.wisc.edu/~stjones/proj/vm_reading/ibmrd2505M.pdf',
5 => 'http://pcfresh.ru/uvelichenie-razmera-fajla-podkachki.html',
6 => 'http://portal.acm.org/citation.cfm?id=621004',
7 => 'http://web.archive.org/web/20080213220156/http://web.mac.com/joynerian/iWeb/Ian%20Joyner/Burroughs.html',
8 => 'http://www.acc.umu.se/~bosse/',
9 => 'http://www.computer50.org/kgill/atlas/atlas.html',
10 => 'http://www.parallel.ru/history/besm6.html',
11 => 'http://www.sigla.ru/table.jsp?f=8&t=3&v0=0001-0782&f=1003&t=1&v1=&f=4&t=2&v2=&f=21&t=3&v3=&f=1016&t=3&v4=&f=1016&t=3&v5=&bf=4&b=&d=0&ys=&ye=&lng=&ft=&mt=&dt=&vol=&pt=&iss=&ps=&pe=&tr=&tro=&cc=UNION&i=1&v=tagged&s=0&ss=0&st=0&i18n=ru&rlf=&psz=20&bs=20&ce=hJfuypee8JzzufeGmImYYIpZKRJeeOeeWGJIZRrRRrdmtdeee88NJJJJpeeefTJ3peKJJ3UWWPtzzzzzzzzzzzzzzzzzbzzvzzpy5zzjzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzztzzzzzzzbzzzzzzzzzzzzzzzzzzzzzzzzzzzvzzzzzzyeyTjkDnyHzTuueKZePz9decyzzLzzzL*.c8.NzrGJJvufeeeeeJheeyzjeeeeJh*peeeeKJJJJJJJJJJmjHvOJJJJJJJJJfeeeieeeeSJJJJJSJJJ3TeIJJJJ3..E.UEAcyhxD.eeeeeuzzzLJJJJ5.e8JJJheeeeeeeeeeeeyeeK3JJJJJJJJ*s7defeeeeeeeeeeeeeeeeeeeeeeeeeSJJJJJJJJZIJJzzz1..6LJJJJJJtJJZ4....EK*&debug=false',
12 => 'http://www.sigla.ru/table.jsp?f=8&t=3&v0=0170-6012&f=1003&t=1&v1=&f=4&t=2&v2=&f=21&t=3&v3=&f=1016&t=3&v4=&f=1016&t=3&v5=&bf=4&b=&d=0&ys=&ye=&lng=&ft=&mt=&dt=&vol=&pt=&iss=&ps=&pe=&tr=&tro=&cc=UNION&i=1&v=tagged&s=0&ss=0&st=0&i18n=ru&rlf=&psz=20&bs=20&ce=hJfuypee8JzzufeGmImYYIpZKRJeeOeeWGJIZRrRRrdmtdeee88NJJJJpeeefTJ3peKJJ3UWWPtzzzzzzzzzzzzzzzzzbzzvzzpy5zzjzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzztzzzzzzzbzzzzzzzzzzzzzzzzzzzzzzzzzzzvzzzzzzyeyTjkDnyHzTuueKZePz9decyzzLzzzL*.c8.NzrGJJvufeeeeeJheeyzjeeeeJh*peeeeKJJJJJJJJJJmjHvOJJJJJJJJJfeeeieeeeSJJJJJSJJJ3TeIJJJJ3..E.UEAcyhxD.eeeeeuzzzLJJJJ5.e8JJJheeeeeeeeeeeeyeeK3JJJJJJJJ*s7defeeeeeeeeeeeeeeeeeeeeeeeeeSJJJJJJJJZIJJzzz1..6LJJJJJJtJJZ4....EK*&debug=false',
13 => 'http://www.webcitation.org/61GH8DCpC',
14 => 'http://www.winblog.ru/2007/09/04/04090701.html'
] |
Была ли правка сделана через выходной узел сети Tor (tor_exit_node ) | 0 |
Unix-время изменения (timestamp ) | 1425481507 |