Нажмите "Enter", чтобы перейти к содержанию

Физическая и виртуальная память компьютера: Физическая и виртуальная память.

Содержание

Физическая и виртуальная память.

Физическая и виртуальная память.

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

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

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

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

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

В некоторых случаях отображение пространства имен на физическую память тождественно отображению на виртуальное пространство. Получается абсолютная двоичная программа, где виртуальные адреса в точности соответствуют физическим. К таким программам относятся часть модулей ОС, которые каждый раз располагаются в ОП по одним и тем же адресам.
При работе на компьютере может встретиться наличие трех ситуаций:
- V(вирт) < V(оп) - виртуальное адресное пространство меньше объема ОП;
- V(вирт) = V(оп) - виртуальное адресное пространство равно объему ОП;
- V(вирт) > V(оп) - виртуальное адресное пространство больше объема ОП.
В первых двух случаях никаких трудностей в распределении оперативной памяти возникнуть не может. Программ мало, все команды и данные находятся в ОП. Распределение ресурсов памяти обеспечивается разными методами.

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

Виртуальная и физическая память. Операционная система UNIX

Виртуальная и физическая память

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

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

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

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

? В-третьих, подобное распределение памяти между процессами вряд ли можно назвать оптимальным. Объем физической оперативной памяти будет существенным образом ограничивать число процессов, одновременно выполняющихся в системе. Так восемь процессов, каждый из которых занимает 1 Мбайт памяти, исчерпают 8 Мбайт оперативной памяти, а операционная система при средней загрузке насчитывает более 80 процессов!

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

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

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

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

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

Рис. 3.4. Виртуальная и физическая память

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

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

Данный текст является ознакомительным фрагментом.

Продолжение на ЛитРес

Виртуальная память и физическая память

Я не совсем понимаю, что такое моя виртуальная память? Кроме того, физические и логические адреса, кажется, теперь сбивают с толку? Делает ли это (виртуальная память) существует в реальности или нет?

Вы можете прочитать приличное объяснение в Википедии о виртуальной памяти . Я не собираюсь обсуждать все это здесь.

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

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

Спасибо Дэвиду Шварцу за помощь в улучшении контента. Тем не менее во встроенных устройствах виртуальная память используется только для отображения страниц, это родное назначение, для которого она была определена. Но теперь, в современном OS', он принял совершенно иную форму. Люди эксплуатируют использование виртуальной памяти в paging/segmentation,thus обмене, который является наиболее важным.60 байт) памяти. На практике это меньше. Эта память-то, что вы можете

использовать как RAM .

Кроме того, что такое логическое адресное пространство?

Логическое адресное пространство - это адресное пространство, состоящее из адресов, по которым элементы (ячейка памяти, элемент хранения, сетевой узел), по-видимому, находятся с точки зрения выполняемой прикладной программы.

Логический адрес может отличаться от физического адреса из-за работы транслятора адресов или функции отображения. Такие функции отображения могут быть, в случае архитектуры компьютерной памяти, блоком управления памятью (MMU) между CPU и шиной памяти или уровнем трансляции адресов, например уровнем канала передачи данных, между аппаратным обеспечением и протоколами межсетевой связи (Internet Protocol) в компьютерной сетевой системе.

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

Каждый процесс должен быть в основной памяти для выполнения, в противном случае он находится на жестком диске. Несколько адресов, приведенных в инструкции моей код, находящийся на жестком диске, - это то, что я называю логическим адресом? И когда он загружается в RAM, потому что местоположение не фиксировано и, следовательно, код может быть загружен в любом месте, адреса, назначенные здесь (i RAM), называются Физические Адреса? Это отображение я полагаю называется Логико-физическое сопоставление адресов.

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

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

Теперь, потому что размер моего кода или процесса может быть больше, чем размер RAM доступно, здесь идет использование виртуальной памяти. Как я понял, это абстракция, чтобы дать программисту представление о том, что у него есть бесконечный объем доступной памяти в системе. Это в основном область жесткого диска, некоторые процессы (которые редко используются) из RAM заменяются. Одновременно нужные страницы заносятся в основную память. Так ли это? Тогда что же определяет размер этой области на жестком диске?

Точно так же, как описано выше. И этот размер зарезервированного места на жестком диске (виртуальной памяти) рекомендуется разными типами OS по-разному. Но, как правило, он определяется как находящийся на другом разделе на Unix/Linux OS (раздел подкачки). Windows имеет файл подкачки по сравнению с *nix's разделом подкачки; хотя между ними существует много технических различий.. Это специфично для OS, но концепция почти та же. В системах *nix я видел, что рекомендуется держать размер раздела подкачки в два раза больше размера RAM в системе. Я не могу больше спорить об этом, может быть, кто-то может предложить более подробную информацию.

Кроме того, RAM дешев, тогда зачем нам нужен такой механизм? Разве мы не можем увеличить наш размер RAM вместо того, чтобы включать эти накладные расходы на обмен?

Нет, по сравнению со стоимостью RAM, цена жесткого диска все еще намного экономичнее. Кроме того, RAM стоит дорого, и не все PCs могут быть модернизированы, чтобы увеличить RAM. К счастью, увеличение виртуальной памяти-лучший вариант, когда у вас мало памяти. Кроме того, Корпорация Майкрософт рекомендует установить виртуальную память не менее чем в 32 раза и не более чем в 3 раза больше объема RAM на вашем компьютере. (Источник последней строки ).

#факты | Виртуальная память компьютера

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

Зачем нужен файл подкачки?


Как работает и какой бывает оперативная память, нам уже известно. И вновь за примером для повествования обратимся к истории: немногим более десятилетия тому назад обычный компьютер располагал всего 32 или 64 мегабайтами оперативной памяти. Это невероятно мало по сегодняшним меркам. В наши дни оперативная память компьютера измеряется в гигабайтах. Но и требования возросли.

Итак, представим себе старенький компьютер с 32 мегабайтами оперативной памяти. Обычно на такой машине требовалось одновременно открыть почтовую программу, веб-браузер и текстовый редактор. Памяти на это не хватало. И если бы на помощь не приходила виртуальная память, компьютер сказал бы своему пользователю что-то вроде: «Извините, но вы больше не можете открыть ни одного приложения. Пожалуйста, закройте какое-либо приложение, чтобы получить возможность загрузки нового.» Точнее, это сказала бы операционная система, а не сам компьютер. Но виртуальная память не дремлет и ищет в ОЗУ области, которые не используются в настоящий момент, чтобы переместить их на жесткий диск. Это позволяет освободить в оперативной памяти пространство для очередной необходимой пользователю программы.

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

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

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

Область жесткого диска, в которой хранится образ оперативной памяти называется файлом подкачки. По-английски «page file» («файл страницы»). Не исключено, что вам доведется встретить и другие его разговорные названия: «свап-файл» или «своп-файл» («swap file»). В этом файле хранятся страницы из оперативной памяти. Операционная система перемещает данные между файлом подкачки и оперативной памятью в обоих направлениях.

И еще немного «технололингвистики». В английском языке сам процесс использования жесткого диска для хранения данных из оперативной памяти нередко называют «paging» («пейджирование»).

Настройка виртуальной памяти в Windows 8

В наши дни, конечно, компьютер с 32-мегабайтной оперативной памятью встретить непросто. Но многие пользователи и сегодня располагают сравнительно маломощными машинами с оперативной памятью до 4 гигабайт. Таким системам может потребоваться установка максимального размера файла подкачки. Разумеется, самостоятельно настраивать систему могут только опытные пользователи, понимающие, что они делают и в полной мере осознающие, что вносимые ими изменения влияют на работу компьютера. Если нет уверенности в том, что настройки получится «вернуть на место», то лучше ничего этого не делать.

Для этого необходимо осуществить ряд простых настроек:

  1. Правой кнопкой мыши щелкните на значке «Компьютер» рабочего стола операционной системы
  2. Откройте диалоговое окно опций в расширенных системных настройках
  3. Во вкладке, позволяющей задавать расширенные параметры, выберите настройки производительности
  4. Из настроек производительности выберите расширенные
  5. Чтобы отобразить диалоговое окно виртуальной памяти, в расширенных настройках производительности выберите осуществление изменений
  6. В настройках виртуальной памяти вы обнаружите текущие параметры ее конфигурации. Общий размер файла подкачки указывает на рекомендованный объем виртуальной «оперативной памяти» для данной системы. Там же отображается объем виртуальной памяти, установленный в данный момент
  7. По умолчанию Windows 8 управляет размером файла подкачки для всех дисков. Если вы желаете вручную конфигурировать виртуальную память, снимите «птичку» автоматического управления размером файла для всех дисков
  8. Затем выберите опцию указания произвольного размера и задайте два параметра: исходный и максимальный размеры файла подкачки
  9. После изменения этих параметров система предложит произвести перезагрузку. Нажимать «ОК» можно только в том случае, если вы уверены в том, что хотите внести сделанные изменения

По материалам computer.howstuffworks.com, trainingtech.net

Что такое виртуальная память?

Я постараюсь начать медленно, а затем соберу все это для вас. Это вот так:

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

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

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

Человеческое решение состоит в том, чтобы использовать блокнот. Мы записываем на страницах все вещи, которые мы не можем вспомнить сразу, но обращаемся к ним, делая суммы. Возможно, нам не удастся запомнить огромный список данных о продажах за месяц, но мы можем просматривать страницы, получать информацию постепенно и обрабатывать каждый бит. Это похоже на то, как компьютер «пейджирует» свою память - пишет страницы, полные информации, и помещает ее в «виртуальную память» для последующего использования, понимая, что ему нужна страница, и загружая эту страницу обратно из виртуальной памяти в реальную память. В Linux и Unix место, где хранятся эти страницы, буквально называется «файл подкачки», а страницы данных в памяти буквально называются «страницы». Различные системы имеют разные названия для этих вещей, но общая концепция во многом одинакова.

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

Теперь все усложняется тем, что современные системы поддерживают отображение памяти и защиту памяти, которые обычно обрабатываются одной и той же аппаратной системой компьютера: блоком управления памятью или MMU.

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

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

Таким образом, когда программа запрашивает память по определенному «адресу памяти», на самом деле происходит то, что страницы памяти для этой программы и их соответствующие адреса («адресное пространство» программы) ищутся, и страница, которая соответствует этот блок памяти найден. Эта страница может быть либо загружена где-то в реальной памяти, в этом случае программе предоставляется доступ, либо она может быть выгружена на диск. Если он выгружен, то он вызывает «сбой страницы» - доступ к диску и страница загружаются в память. Таким образом, программа работает даже тогда, когда не хватает памяти, но работает МЕДЛЕННО, если ей приходится использовать диск для того, что обычно обеспечивает очень быстрый доступ к памяти.

Теперь, если недостаточно места для загрузки этой страницы в память, у вас есть проблема. В этом случае некоторую ДРУГУЮ страницу, которая уже находится в памяти, необходимо «переставить» на диск, чтобы можно было загрузить страницу первой программы. Или это могут быть страницы из одной и той же программы. Это иногда можно увидеть в графических программах, например, в сильно загруженных системах, когда часть изображения загружается медленно и рисуется быстро, затем следующая часть загружается одинаково медленно и рисуется быстро, и когда вы возвращаетесь к работе с первым часть, она медленная СНОВА. Это потому, что они загружаются для дальнейшей работы, а затем снова заменяются, так что можно заняться чем-то другим. Очевидно, это очень медленный способ работы, и вам действительно нужно больше РЕАЛЬНОЙ памяти.

Виртуальная и физическая память

Оперативная память является одним из наиболее дорогих компонентов компьютерной системы.

Ранние системы UNIX имели в своем распоряжении 64 Кбайт оперативной памяти, и это количество было явно недостаточным, современные компьютеры обладают гигабайтами опера­тивной памяти, но и этого уже мало.

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

Эти адреса использует процессор, обмениваясь данными с ОП.

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

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

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

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

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

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

Физическая память распределяется максимально эффективно - она не зависит от распределения виртуальной памяти отдельного процесса.

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

В современных компьютерных системах процесс отображения выполняется на аппаратном уровне (с помощью MMU блок управления памятью компьютера — memory management unit), обеспечивая высокую скорость трансляции. ОС осуществляет управление этим процессом.

Современные процессоры, как правило, поддерживают объединение адресного пространства в области переменного размера — сегменты и области фиксированного размера — страницы.

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

Блок управления памятью компьютера (MMU — memory management unit).

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

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

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

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

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

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

Рассмотрим механизм отображения виртуальных адресов в физические в операционной системе SCO UNIX на примере семейства процессоров Intel.

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

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


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

Требования.
Для выполнения указанных в этой статье действий, необходимо на компьютере иметь права локального администратора.
Статья действительная для Windows 98/Me/2000/XP/Vista.

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

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

Увеличение файла подкачки.
Чтобы увеличить файл подкачки, выполните действия указанные в статье Увеличение размера файла подкачки.

Рекомендуемый минимальный размер равен значению, в 1,5 раза превышающему объем оперативной памяти компьютера, а для максимального размера следует задать значение, в 3 раза превосходящее минимальный размер

Например. Если объем оперативной памяти составляет 512 МБ, минимальный размер файла подкачки следует принять равным 512 х 1,5 = 768 МБ, а максимальный 768 х 3 = 2304 МБ.

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

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

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

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

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

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

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

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

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

Хотя свопы страниц данных (определенные длины данных или тактовые импульсы данных) с помощью обменов виртуальной памяти между жестким диском и оперативной памятью очень быстрые, чрезмерное использование свопов виртуальной памяти может снизить общую производительность системы.Если объем жесткого диска, выделенного для хранения файлов подкачки, недостаточен для удовлетворения требований системы, которая в значительной степени полагается на обмен данными через виртуальную память, пользователи могут получать сообщения «НЕТ ПАМЯТИ» и сообщения об ошибках, даже хотя у них много неиспользуемого места на жестком диске.

К началу 2003 года персональные компьютеры с объемом оперативной памяти 1024 МБ (1 мегабайт = 1000000 байтов) были широко доступны в США, и многие бренды персональных компьютеров имели емкость жесткого диска 60 ГБ (1 гигабайт равен 1 миллиарду байтов). .Относительные ограничения как емкости жесткого диска, так и емкости оперативной памяти неуклонно улучшаются с развитием технологии микрочипов.

В чем разница между физической и виртуальной памятью

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

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

Основные зоны покрытия

1. Что такое физическая память
- Определение, функциональность
2. Что такое виртуальная память
- Определение, функциональность
3. В чем разница между физической и виртуальной памятью
- Сравнение ключевых отличий

Ключевые термины

Основная память, физическая память, ОЗУ, виртуальная память

Что такое физическая память

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

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

Что такое виртуальная память

Виртуальная память - это логическая память. Другими словами, это метод управления памятью, выполняемый операционной системой.Виртуальная память позволяет программисту использовать для программ больше памяти, чем доступная физическая память. Если физическая память составляет 4 ГБ, а виртуальная память - 16 ГБ, программист может использовать виртуальную память 16 ГБ для выполнения программы. Используя виртуальную память, он может выполнять сложные программы, требующие больше памяти, чем физическая.

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

Разница между физической и виртуальной памятью

Определение

Физическая память, которая фактически является ОЗУ, представляет собой форму хранения компьютерных данных, в которой хранятся выполняемые в данный момент программы. Напротив, виртуальная память - это метод управления памятью, который создает иллюзию для пользователей большей физической памяти. Таким образом, в этом основное отличие физической памяти от виртуальной.

Тип памяти

В то время как физическая память - это фактическая память, виртуальная память - это логическая память.

Скорость

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

Техника

Еще одно различие между физической и виртуальной памятью заключается в том, что физическая память использует метод подкачки, а виртуальная память использует подкачку.

Размер

Физическая память ограничена размером микросхемы RAM; однако виртуальная память ограничена размером жесткого диска.

CPU

Физическая память может напрямую обращаться к ЦП, а виртуальная память не может напрямую обращаться к ЦП.Следовательно, это еще одно различие между физической и виртуальной памятью.

Заключение

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

Артикул

1. «Конструкция операционной системы / Физическая память.»Викиучебники, доступные здесь.
2. «Виртуальная память». Википедия, Фонд Викимедиа, 20 октября 2018 г., доступно здесь.

Изображение предоставлено:

1. «Оперативная память ноутбука» Автор WannaBeEditor - Собственная работа (CC BY-SA 4.0) через Commons Wikimedia
2. «Виртуальная память» Автор Ehamberg - Собственная работа (CC BY-SA 3.0) через Commons Wikimedia

Что такое виртуальная память и как она работает?

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

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

Сегодня большинство ПК имеют до 4 ГБ оперативной памяти. Однако иногда этого недостаточно для одновременного запуска всех программ, которые пользователь может захотеть использовать.Здесь на помощь приходит виртуальная память. Виртуальную память можно использовать для обмена данными, которые не использовались в последнее время, и переноса их на запоминающее устройство, такое как жесткий диск или твердотельный накопитель (SDD). Это освободит больше места в ОЗУ.

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

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

Как работает виртуальная память

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

Если позже в какой-либо момент потребуется пространство ОЗУ для чего-то более срочного, данные могут быть выгружены из ОЗУ в виртуальную память. Диспетчер памяти компьютера отвечает за отслеживание сдвигов между физической и виртуальной памятью. Если эти данные потребуются снова, можно использовать переключение контекста для возобновления выполнения.

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

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

Типы виртуальной памяти

MMU компьютера обрабатывает операции с памятью, включая управление виртуальной памятью. В большинстве компьютеров оборудование MMU интегрировано в ЦП. Есть два способа обработки виртуальной памяти: страничная и сегментированная.

Подкачка разделяет память на разделы или файлы подкачки, обычно размером около 4 КБ. Когда компьютер использует свою оперативную память, неиспользуемые страницы передаются в раздел жесткого диска, предназначенный для виртуальной памяти, с помощью файла подкачки. Файл подкачки - это пространство на жестком диске, предназначенное для расширения виртуальной памяти ОЗУ компьютера. Когда требуется файл подкачки, он отправляется обратно в ОЗУ с помощью процесса, называемого подкачкой страниц. Эта система гарантирует, что операционная система компьютера и приложения не исчерпают реальную память.

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

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

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

Как управлять виртуальной памятью

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

При ручном сбросе виртуальной памяти необходимо указать минимальный и максимальный объем места на жестком диске, который будет использоваться для виртуальной памяти. Выделение слишком маленького места на жестком диске для виртуальной памяти может привести к нехватке оперативной памяти на компьютере.Если системе постоянно требуется больше места для виртуальной памяти, может быть целесообразно рассмотреть возможность добавления ОЗУ. Обычные операционные системы могут рекомендовать пользователям не увеличивать объем виртуальной памяти сверх 1,5-кратного объема ОЗУ.

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

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

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

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

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

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

Виртуальная память и физическая память

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

Когда компьютеру требуется хранилище, в первую очередь используется ОЗУ. Виртуальная память используется при заполнении ОЗУ, потому что она медленнее.

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

История

До того, как была разработана виртуальная память, компьютеры имели оперативную и вторичную память.Ранние компьютеры использовали память на магнитных сердечниках для основной памяти и магнитные барабаны для вторичной памяти. Компьютерная память была дорогой, и ее обычно не хватало еще в 1940-х и 1950-х годах. Поскольку компьютерные программы росли в размерах и сложности, разработчикам приходилось беспокоиться о том, что их программы будут использовать всю основную память компьютера и исчерпать ее.

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

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

Первый очевидный реальный экземпляр системы виртуальной памяти поступил из Манчестерского университета в их попытке разработать одноуровневую систему хранения для компьютера Атлас.Система использовала подкачку для отображения виртуальных адресов программиста в первичную память. Атлас был разработан в 1959 году, а затем сдан в эксплуатацию в 1962 году.

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

В 1969 году исследователи IBM продемонстрировали, что системы наложения виртуальной памяти работают лучше, чем более ранние системы с ручным управлением. До этого момента по этому поводу все еще велись споры.В мэйнфреймах и мини-компьютерах в 1970-х годах обычно использовалась виртуальная память. Технология виртуальной памяти не была включена в первые персональные компьютеры, потому что разработчики думали, что нехватка памяти не будет проблемой для этих машин. Это предположение оказалось неверным. Intel представила виртуальную память в защищенном режиме процессора 80286 в 1982 году и поддержку подкачки, когда вышел 80386 в 1985 году.

Операционная система

- в чем разница между виртуальной памятью и физической памятью?

Программное обеспечение

запускается в ОС по очень простой причине - им требуется память.Операционная система устройства предоставляет его в виде оперативной памяти. Требуемый объем памяти может быть разным - для некоторых программ требуется огромная память, для некоторых - мизерная. Большинство (если не все) пользователей запускают несколько приложений в ОС одновременно, и, учитывая, что память дорогая (а размер устройства конечен), объем доступной памяти всегда ограничен. Итак, учитывая, что все программное обеспечение требует определенного количества ОЗУ, и все они могут работать одновременно, ОС должна позаботиться о двух вещах:

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

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

Возможное решение 1 : Разрешите отдельным программам явно указывать адрес памяти, который они будут использовать в устройстве.Предположим, Photoshop объявляет, что он всегда будет использовать адреса памяти в диапазоне от 0 до 1023 (представьте память как линейный массив байтов, поэтому первый байт находится в ячейке 0 , 1024 -й байт находится в ячейке 1023 ) - т.е. занимая 1 ГБ памяти . Точно так же VLC объявляет, что он будет занимать диапазон памяти от 1244 до 1876 и т. Д.

Преимущества:

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

Недостатки:

  1. Без масштабирования. Теоретически приложению может потребоваться огромный объем памяти, когда оно выполняет что-то действительно тяжелое. Таким образом, чтобы гарантировать, что он никогда не исчерпает память, выделенная для него область памяти всегда должна быть больше или равна этому количеству памяти. Что, если программное обеспечение, максимальное теоретическое использование памяти которого составляет 2 ГБ (следовательно, требует выделения памяти из ОЗУ 2 ГБ ), установлено на машине, имеющей только 1 ГБ памяти? Должно ли программное обеспечение просто прерываться при запуске, говоря, что доступная оперативная память меньше 2 ГБ ? Или он должен продолжаться, и в тот момент, когда необходимая память превысит 2 ГБ , просто прервать работу и выйти с сообщением о том, что недостаточно памяти?

  2. Невозможно предотвратить искажение памяти.Существуют миллионы программ, даже если каждому из них было бы выделено всего 1 КБ памяти , общий объем требуемой памяти превысил бы 16 ГБ , что больше, чем предлагают большинство устройств. Как же тогда разным программам можно выделить слоты памяти, которые не вторгаются в области друг друга? Во-первых, нет централизованного рынка программного обеспечения, который мог бы регулировать, что при выпуске нового программного обеспечения оно должно назначать себе столько памяти из этой еще незанятой области , а во-вторых, даже если бы они были, это невозможно сделать. потому что нет.программного обеспечения практически бесконечно (таким образом, требуется бесконечная память для размещения всех из них), а общий объем оперативной памяти, доступной на любом устройстве, недостаточен для размещения даже части того, что требуется, что делает неизбежным посягательство на границы памяти одного программного обеспечения на другой. Итак, что происходит, когда Photoshop назначают ячейки памяти с 1 по 1023 и VLC назначают 1000 на 1676 ? Что, если Photoshop хранит некоторые данные в местоположении 1008 , затем VLC перезаписывает их своими собственными данными, а затем Photoshop обращается к нему, думая, что это те же данные, которые хранились там ранее? Как вы понимаете, будут случаться плохие вещи. 32-1 ), если процесс запускается, иначе, если это запущенный процесс, запрашивающий память, он будет выделяться из последней ячейки памяти, где этот процесс все еще находится.Поскольку программное обеспечение будет выдавать адреса без учета того, какой будет фактический адрес памяти, где будут храниться эти данные, ОС должна будет поддерживать сопоставление для каждого программного обеспечения адреса, излучаемого программным обеспечением, с фактическим физическим адресом (Примечание: это одна из двух причин, по которым мы называем эту концепцию Виртуальная память . Программное обеспечение не заботится о реальном адресе памяти, где хранятся их данные, они просто выдают адреса на лету, а ОС находит нужное место чтобы подогнать его и найти позже, если потребуется).

    Допустим, устройство только что было включено, ОС только что запущена, в данный момент нет других запущенных процессов (игнорируя ОС, которая также является процессом!), И вы решили запустить VLC . Итак, VLC выделяется часть ОЗУ из младших байтовых адресов. Хороший. Теперь, пока воспроизводится видео, вам нужно запустить браузер, чтобы просмотреть какую-либо веб-страницу. Затем вам нужно запустить Блокнот , чтобы набросать текст. А затем Eclipse для написания кода.. Довольно скоро ваша память 4 ГБ будет израсходована, и ОЗУ будет выглядеть так:

    Проблема 1: Теперь вы не можете запустить какой-либо другой процесс, так как вся оперативная память израсходована. Таким образом, программы должны быть написаны с учетом максимального объема доступной памяти (фактически будет доступно еще меньше, поскольку другие программы также будут работать параллельно!). Другими словами, вы не можете запустить приложение, потребляющее много памяти, на своем ветхом ПК 1 ГБ .

    Итак, теперь вы решили, что вам больше не нужно держать открытыми Eclipse и Chrome , вы закрываете их, чтобы освободить немного памяти. Пространство, занятое этими процессами в ОЗУ, освобождается ОС, и теперь это выглядит так:

    Предположим, что закрытие этих двух освобождает 700 МБ пространства - ( 400 + 300 ) МБ. Теперь вам нужно запустить Opera , которая займет места на 450 МБ.Что ж, у вас есть всего более 450 МБ свободного места, но ... оно не является непрерывным, оно разделено на отдельные части, ни один из которых не является достаточно большим, чтобы вместить 450 МБ . Итак, вам пришла в голову блестящая идея: давайте переместим все процессы, расположенные ниже, как можно выше, в результате чего 700 МБ останется пустым местом в одном фрагменте внизу. Это называется уплотнением . Отлично, за исключением того, что ... все процессы, которые там есть, запущены.Перемещение их будет означать перемещение адреса всего их содержимого (помните, ОС поддерживает отображение памяти, выделенной программным обеспечением, на фактический адрес памяти. Представьте, что программное обеспечение выдало адрес 45 с данными 123 , и ОС сохранила его в местоположении 2012 и создала запись на карте, сопоставляя 45 с 2012 . Если программное обеспечение теперь перемещено в память, то, что раньше находилось в местоположении 2012 , больше не будет в 2012 , но в новом месте, и ОС должна обновить карту соответственно, чтобы сопоставить 45 с новым адресом, чтобы программное обеспечение могло получить ожидаемые данные ( 123 ), когда оно запрашивает место в памяти 45 .Что касается программного обеспечения, все, что ему известно, это то, что адрес 45 содержит данные 123 !)! Представьте себе процесс, который обращается к локальной переменной i . К тому времени, когда к нему снова обращаются, его адрес изменился, и он больше не сможет его найти. То же самое будет справедливо для всех функций, объектов, переменных, в основном все имеет адрес, и перемещение процесса будет означать изменение адреса всех из них. Что приводит нас к:

    Проблема 2: Вы не можете переместить процесс.Значения всех переменных, функций и объектов в этом процессе имеют жестко запрограммированные значения как выплевывается компилятором во время компиляции, процесс зависит от они находятся в одном и том же месте в течение всего срока службы, и их замена стоит дорого. Как результат, процессы оставляют после себя большие « дырки, » при выходе. Это называется Внешняя фрагментация .

    Отлично. Предположим, каким-то чудесным образом вам все же удалось сдвинуть процессы вверх.Теперь внизу 700 МБ свободного места :

    Opera плавно ложится снизу. Теперь ваша оперативная память выглядит так:

    Хорошо. Все в порядке. Однако места осталось не так много, и теперь вам нужно снова запустить Chrome , известную проблему с памятью! Для запуска требуется много памяти, а у вас ее почти не осталось ... Кроме ... вы теперь заметили, что некоторые процессы, которые изначально занимали большое пространство, теперь не требуют много места.Возможно, вы остановили свое видео в VLC , поэтому оно все еще занимает некоторое место, но не так много, как требовалось при воспроизведении видео с высоким разрешением. Аналогично для Блокнота и Фото . Теперь ваша оперативная память выглядит так:

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

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

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

    Cool.Теперь предположим, что вы снова возобновили просмотр Avatar в VLC . Его требования к памяти резко возрастут! Но ... ему не осталось места для роста, так как Notepad прижимается к его дну. Итак, опять же, все процессы должны перемещаться ниже, пока VLC не найдет достаточно места!

    Проблема 4: Если процессам необходимо расти, это будет очень дорогостоящая операция

    Отлично. Теперь предположим, что фотографий используется для загрузки некоторых фотографий с внешнего жесткого диска.Доступ к жесткому диску переносит вас из области кешей и оперативной памяти на диск, который на порядки медленнее. Уж больно, бесповоротно, запредельно медленнее. Это операция ввода-вывода, что означает, что она не связана с процессором (скорее, это полная противоположность), а это означает, что прямо сейчас ей не нужно занимать оперативную память. Тем не менее, она по-прежнему занимает оперативную память упорно. Если вы хотите запустить Firefox тем временем, вы не сможете, потому что доступной памяти не так много, тогда как если бы Photos были извлечены из памяти на время его связанной операции ввода-вывода, он бы освободил много памяти, за которым следует (дорогое) сжатие, за которым следует Firefox .

    Проблема 5: Задания с привязкой к вводу-выводу продолжают занимать ОЗУ, что приводит к недоиспользованию ОЗУ, которое в то же время могло быть использовано заданиями с привязкой к ЦП.

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


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

    Слева находится виртуальное адресное пространство процесса. Скажем, виртуальное адресное пространство требует 40 единиц памяти. Если бы физическое адресное пространство (справа) также имело 40 единиц памяти, можно было бы сопоставить все местоположения слева и справа, и мы были бы очень счастливы. Но, к несчастью, физическая память не только имеет меньше (здесь 24) единиц памяти, но и должна быть разделена между несколькими процессами! Хорошо, давайте посмотрим, как мы с этим справимся.

    Когда процесс начинается, выполняется запрос доступа к памяти для местоположения 35 . Здесь размер страницы составляет 8 (каждая страница содержит 8 ячеек, все виртуальное адресное пространство из 40 ячеек, таким образом, содержит 5 страниц). Таким образом, это местоположение принадлежит странице № 4 ( 35/8 ). На этой странице это местоположение имеет смещение 3 ( 35% 8 ).Таким образом, это местоположение может быть указано в кортеже (pageIndex, offset) = (4,3) . Это только начало, поэтому никакая часть процесса еще не хранится в реальной физической памяти. Таким образом, таблица страниц , которая поддерживает отображение страниц слева на фактические страницы справа (где они называются кадрами ), в настоящее время пуста. Таким образом, ОС освобождает ЦП, позволяет драйверу устройства получить доступ к диску и получить номер страницы. 4 для этого процесса (в основном фрагмент памяти из программы на диске с адресами от 32 до 39 ). Когда он поступает, ОС выделяет страницу где-нибудь в ОЗУ, скажем, первый кадр, и таблица страниц для этого процесса принимает к сведению, что страница 4 отображается на кадр 0 в ОЗУ. Теперь данные, наконец, находятся в физической памяти. ОС снова запрашивает в таблице страниц кортеж (4,3) , и на этот раз таблица страниц сообщает, что страница 4 уже сопоставлена ​​с кадром 0 в ОЗУ.Таким образом, ОС просто переходит к 0 -му кадру в ОЗУ, обращается к данным по смещению 3 в этом кадре (Найдите время, чтобы понять это. Вся страница , которая была извлечена с диска, перемещается в кадр . Таким образом, каким бы ни было смещение отдельной ячейки памяти на странице, оно будет таким же и в кадре, поскольку в пределах страницы / кадра блок памяти по-прежнему находится в том же месте относительно!) и возвращает данные! Поскольку данные не были найдены в памяти при первом запросе, а их нужно было извлечь с диска для загрузки в память, это составляет промах .

    Отлично. Теперь предположим, что сделан доступ к памяти для ячейки 28 . Это сводится к (3,4) . Таблица страниц сейчас имеет только одну запись, отображение страницы 4 на фрейм 0 . Итак, это снова промах , процесс освобождает ЦП, драйвер устройства извлекает страницу с диска, процесс снова получает контроль над ЦП, и его таблица страниц обновляется. Скажем, теперь страница 3 сопоставлена ​​с кадром 1 в ОЗУ.Таким образом, (3,4) становится (1,4) , и возвращаются данные в этом месте в ОЗУ. Хороший. Таким образом, предположим, что следующий доступ к памяти относится к ячейке 8 , что соответствует (1,0) . Страница 1 еще не находится в памяти, та же процедура повторяется, и страница выделяется в кадре 2 в ОЗУ. Теперь отображение RAM-процесса выглядит как на картинке выше. К этому моменту оперативная память, в которой было всего 24 единицы доступной памяти, заполнена.Предположим, что следующий запрос доступа к памяти для этого процесса поступает с адреса 30 . Он сопоставляется с (3,6) , а таблица страниц говорит, что страница 3 находится в ОЗУ, и она сопоставляется с кадром 1 . Ура! Таким образом, данные извлекаются из ячейки ОЗУ (1,6) и возвращаются. Это составляет попаданий , так как требуемые данные могут быть получены непосредственно из ОЗУ, что очень быстро. Точно так же следующие несколько запросов доступа, скажем, для местоположений 11 , 32 , 26 , 27 - все это совпадений , т.е.е. данные, запрошенные процессом, находятся непосредственно в ОЗУ без необходимости искать в другом месте.

    Теперь предположим, что поступил запрос на доступ к памяти для местоположения 3 . Он преобразуется в (0,3) и таблица страниц для этого процесса, который в настоящее время имеет 3 записи, для страниц 1 , 3 и 4 говорит, что этой страницы нет в памяти. Как и в предыдущих случаях, он загружается с диска, однако, в отличие от предыдущих случаев, оперативная память заполнена! Так что же теперь делать? В этом вся прелесть виртуальной памяти, кадр из оперативной памяти вытесняется! (Различные факторы определяют, какой фрейм нужно выселить.Это может быть , , LRU, , , где должен быть удален кадр, к которому процесс обращался меньше всего. Это может быть базис , , первый пришел - первый, , , где кадр, который был выделен наиболее давно, вытесняется и т. Д. Скажем, кадр 1 (просто выбирая его случайным образом). Однако этот кадр отображается на какую-то страницу ! (В настоящее время таблица страниц отображается на страницу 3 нашего единственного процесса).Итак, этому процессу необходимо сообщить эту трагическую новость, что один кадр , который, к сожалению, принадлежит вам, должен быть удален из ОЗУ, чтобы освободить место для других страниц . Процесс должен гарантировать, что он обновляет эту информацию в своей таблице страниц , то есть удаляя запись для этого дуэта страничного кадра, чтобы при следующем запросе для этой страницы он right сообщает процессу, что эта страница больше не находится в памяти и должна быть получена с диска.Хороший. Таким образом, фрейм 1 удаляется, страница 0 вводится и помещается в ОЗУ, а запись для страницы 3 удаляется и заменяется отображением страницы 0 на тот же фрейм 1 . Итак, теперь наше отображение выглядит так (обратите внимание на изменение цвета во втором кадре с правой стороны):

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

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


    Решение проблемы 1: процесс имеет доступ к неограниченной памяти. Когда требуется больше памяти, чем доступно, диск используется в качестве резервной копии, новые требуемые данные загружаются в память с диска, и наименее недавно использованные данные фрейм (или страница ) перемещаются на диск.Это может продолжаться бесконечно, а поскольку дисковое пространство дешевое и практически неограниченное, создается иллюзия неограниченного объема памяти. Еще одна причина для названия Virtual Memory , это дает вам иллюзию памяти, которая на самом деле недоступна!

    Cool. Раньше мы сталкивались с проблемой, когда даже при уменьшении размера процесса пустое пространство трудно было вернуть другим процессам (поскольку это потребовало бы дорогостоящего уплотнения). Теперь это просто, когда процесс становится меньше по размеру, многие из его страниц больше не используются, поэтому, когда другим процессам требуется больше памяти, простое вытеснение на основе LRU автоматически удаляет менее используемые страниц из ОЗУ и заменяет их новыми страницами из других процессов (и, конечно же, обновляет таблицы страниц всех этих процессов, а также исходный процесс, который теперь требует меньше места), все это без любая дорогостоящая операция по уплотнению!

    Решение проблемы 3: всякий раз, когда процессы уменьшаются в размере, его фрейм в ОЗУ будет меньше использоваться, поэтому простое вытеснение на основе LRU может вытеснить эти страницы и заменить их страницами , необходимыми для новых процессов, таким образом, предотвращение внутренней фрагментации без необходимости уплотнения .

    Что касается проблемы 2, найдите минутку, чтобы понять это, сам сценарий полностью удален! Нет необходимости перемещать процесс, чтобы приспособить новый процесс, потому что теперь весь процесс никогда не должен соответствовать сразу, только определенные его страницы должны соответствовать ad hoc, что происходит путем удаления кадров из ОЗУ. Все происходит в единицах страниц , поэтому сейчас нет понятия отверстие , и, следовательно, не может быть и речи о том, чтобы что-либо двигалось! Возможно, 10 страниц пришлось переместить из-за этого нового требования, тысячи страниц остались нетронутыми.Тогда как раньше все процессы (каждый бит) приходилось перемещать!

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

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

    Решение проблемы 5: Когда процесс выполняет операции ввода-вывода, он может легко отказаться от использования ОЗУ, которое может использоваться другими процессами.Это приводит к правильному использованию оперативной памяти.

    И, конечно же, теперь ни один процесс не обращается напрямую к ОЗУ. Каждый процесс обращается к области виртуальной памяти, которая отображается на физический адрес RAM и поддерживается таблицей страниц этого процесса. Отображение поддерживается ОС, ОС сообщает процессу, какой фрейм пуст, чтобы в него можно было поместить новую страницу для процесса. Поскольку это выделение памяти контролируется самой ОС, она может легко гарантировать, что ни один процесс не посягает на содержимое другого процесса, выделяя только пустые кадры из ОЗУ или вторгаясь в содержимое другого процесса в ОЗУ, связываясь с процессом. для обновления page-table .

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

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

    1. Пейджинг , в конечном счете, дает пользователю иллюзию бесконечной памяти за счет использования диска в качестве вторичной резервной копии. Извлечение данных из вторичного хранилища для размещения в памяти (называется подкачка страниц, , а событие не нахождения нужной страницы в ОЗУ называется сбой страницы ) является дорогостоящим, поскольку это операция ввода-вывода. Это замедляет процесс. Несколько таких смен страниц происходят подряд, и процесс становится мучительно медленным.Вы когда-нибудь видели, как ваше программное обеспечение работает нормально и красиво, и внезапно оно становится настолько медленным, что почти зависает, или не оставляет вам возможности перезапустить его? Возможно, происходило слишком много подкачки страниц, что замедляло процесс (называемый перебрасыванием ).

    Итак, возвращаясь к OP,

    Зачем нам нужна виртуальная память для выполнения процесса? - Как подробно объясняется в ответе, чтобы дать программному обеспечению иллюзию того, что устройство / ОС имеет бесконечную память, чтобы можно было запускать любое программное обеспечение, большое или маленькое, не беспокоясь о выделении памяти или других процессах, повреждающих его данные, даже при параллельной работе.Это концепция, реализованная на практике с помощью различных методов, одна из которых, как описано здесь, - это Paging . Это также может быть Сегментация .

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

    Кто заботится о виртуальной памяти и каков размер виртуальной памяти? - Об этом заботятся вместе ОС и программное обеспечение. Представьте себе функцию в вашем коде (которая в конечном итоге скомпилирована и преобразована в исполняемый файл, породивший процесс), которая содержит локальную переменную - int i .Когда код выполняется, i получает адрес памяти в стеке функции. Эта функция хранится как объект где-то еще. Эти адреса генерируются компилятором (компилятором, который скомпилировал ваш код в исполняемый файл) - виртуальные адреса. При выполнении i должно находиться где-то по фактическому физическому адресу, по крайней мере, на время выполнения этой функции (если это не статическая переменная!), Поэтому ОС отображает виртуальный адрес, сгенерированный компилятором i , в фактический физический адрес, так что всякий раз, когда в этой функции некоторому коду требуется значение i , этот процесс может запрашивать у ОС этот виртуальный адрес, а ОС, в свою очередь, может запрашивать физический адрес для сохраненного значения и возвращать Это.32-1 адресное пространство) каков размер виртуальной памяти? - Размер ОЗУ не связан с размером виртуальной памяти, он зависит от ОС. Например, в 32-битной Windows это 16 ТБ , в 64-битной Windows это 256 ТБ . Конечно, он также ограничен размером диска, поскольку именно на нем выполняется резервное копирование памяти.

    c - Что такое виртуальная память?

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

    Это адресное пространство разделено на страницы для упрощения управления (пример размером 4 КБ). Каждая действительная страница может находиться в 3 разных состояниях:

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

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

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

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


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


    Физическая память распределяется между процессами так же, как совместно используется блок питания компьютера или совместно используется ЦП. Это часть физического компьютера.Нормальный процесс никогда не обрабатывает фактические адреса физической памяти, все, что он видит, - это виртуальная память, которая может быть сопоставлена ​​с разными физическими местоположениями.

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


    Не уверен, что вы имеете в виду под «При сборе памяти для другого процесса» , поэтому не могу ответить на этот вопрос.

    Аппаратное обеспечение

    - поведение при распределении данных физической и виртуальной памяти

    Мне интересно понять, как компьютер распределяет переменные для физической памяти по сравнению с файлами в виртуальной памяти (например, на жестком диске), с точки зрения того, как компьютер определяет, куда помещать данные.Это почти кажется случайным в обоих типах хранилища памяти, но не потому, что он просто не может поместить данные по адресу памяти или сектору (в любом месте) жесткого диска, который уже занят или выделен для другого процесса. Когда я изучал, как скоростной диск Norton (программа, которая де-фрагментирует файлы на жестких дисках) в моей старой системе W95, я заметил, что программа отображает данные жесткого диска (цветная визуальная карта различных типов данных, например файлов подкачки всегда были первыми вверху.), состоящий из множества файлов, разбросанных по всему жесткому диску с пустыми неиспользуемыми областями.Вдобавок к некоторым из этих областей я увидел то, что выглядело как смесь данных и пустого пространства с пятнистым рисунком. Я хочу думать, что это случайно. Точно так же, когда я изучал адреса памяти простой программы, написанной на C, я заметил, что каждая версия моей программы после ее перекомпиляции после изменений показывала разные адреса для сегментов и смещений. Я ожидал, что компьютер будет использовать тот же адрес, когда я его перекомпилировал. Иногда использовался один и тот же адрес, иногда - другой.Опять же, я хочу думать, что это случайность также для ячеек памяти, выбираемых программами. Я думал, что выделение памяти или запись файла основывались на первом доступном пустом пространстве, записанном непрерывно.

    Итак, мой вопрос: я хочу знать, как и что в логической работе обычного компьютера решает, куда он записывает свои данные таким произвольным образом для любого типа местоположения (физическая RAM или динамическая)? Какую область информатики (если не язык ассемблера) мне нужно изучить, чтобы объяснить это, почти случайное поведение?

    Заранее спасибо

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

    - обзор

    10.15 Исторические заметки и дополнительная литература

    Виртуальная память была первым приложением концепций виртуализации к коммерческим компьютерам. Виртуальная память позволяла осуществлять мультипрограммирование и избавляла пользователей от необходимости адаптировать свои приложения к физической памяти, доступной в отдельных системах. Пейджинг и сегментация - это два механизма, поддерживающих виртуальную память. Пейджинг был разработан для компьютера Atlas, построенного в 1959 году в Манчестерском университете. Независимо, Burroughs Corporation разработала B5000, первый коммерческий компьютер с виртуальной памятью, и выпустила его в 1961 году; виртуальная память B5000 использовала сегментацию, а не разбиение на страницы.

    В 1967 году IBM представила 360/67, первую систему IBM с виртуальной памятью, которая, как ожидается, будет работать на новой ОС под названием TSS. Перед выпуском TSS была создана операционная система под названием CP-67; CP-67 создавал иллюзию нескольких стандартных систем IBM 360 без виртуальной памяти. Первым гипервизором, поддерживающим полную виртуализацию, была система CP-40, работавшая на S / 360-40, который был модифицирован в IBM Cambridge Scientific Center для поддержки динамической трансляции адресов, ключевой функции, позволяющей виртуализацию.В CP-40 состояние супервизора оборудования также было виртуализировано, что позволило нескольким операционным системам работать одновременно в разных контекстах виртуальных машин.

    Виртуализация была вызвана необходимостью совместного использования очень дорогого оборудования среди большого количества пользователей и приложений на раннем этапе развития вычислительной техники. Система VM / 370, выпущенная в начале 1970-х для больших мэйнфреймов IBM, оказалась очень успешной; он был основан на повторной реализации CP / CMS. В VM / 370 для каждого пользователя была создана новая виртуальная машина, и эта виртуальная машина взаимодействовала с приложениями.Гипервизор управлял аппаратными ресурсами и обеспечивал мультиплексирование ресурсов. Современные мэйнфреймы IBM, такие как линейка zSeries, сохраняют обратную совместимость с линейкой IBM S / 360 1960-х годов.

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

    Достижения в компьютерном и коммуникационном оборудовании, взрыв Интернета, частично связанный с успехом всемирной паутины в конце 1990-х годов, возобновили интерес к виртуализации для поддержки безопасности серверов и изоляции сервисов.В своей обзорной статье Розенблум и Графинкель пишут [429]: «Гипервизоры дают разработчикам ОС еще одну возможность развивать функциональность, которая больше не практична в современных сложных и закостенелых операционных системах, где инновации движутся геологическими темпами».

    Вложенная виртуализация впервые была обсуждена в начале 1970-х годов Попеком и Голдбергом [196,406].

    Дополнительная литература. Текст Зальцера и Каашука [434] является очень хорошим введением в принципы виртуализации.Виртуальные машины анализируются в статье Смита и Наира [455], а принципы архитектуры виртуальных компьютерных систем анализируются в [195,196].

    Подробное обсуждение гипервизоров содержится в статье Розенблюма и Гарфинкеля [429]. В нескольких статьях [53,340,341] подробно обсуждается гипервизор Xen и анализируется его производительность, а [529] представляет собой репозиторий кода для Xen. Система Денали представлена ​​в [522].

    Современные системы, такие как Linux Vserver (http: // linux-vserver.org /), OpenVZ (Open VirtualiZation) [378], FreeBSD Jails [419] и Solaris Zones [409] реализуют технологии виртуализации на уровне ОС . В [387] сравнивается производительность двух методов виртуализации со стандартной ОС.

    В статье 2001 г. [102] утверждается, что виртуализация позволяет добавлять новые службы без изменения ОС. Такие службы добавляются ниже уровня ОС, но этот процесс создает семантический разрыв между виртуальными машинами и этими службами. Размышления о конструкции гипервизоров являются предметом [103], а обсуждение Xen - в [110].

Ваш комментарий будет первым

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *