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

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

РЕДАКТИРОВАТЬ: я вижу, что все говорят, что цель виртуальной памяти состоит в том, чтобы RAM казалось больше, но разве не имеет смысла также иметь дело с адресным пространством внутри процессов, например, каждый процесс, кажется, имеет свое собственное адресное пространство? Таким образом, виртуальная память имеет отношение не только к большему размеру ...

5 ответов5

2

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

Некоторые старые компьютеры использовали диск в качестве памяти, но использование реальной памяти в качестве кеша намного НАМНОГО быстрее.

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

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

Это ответило на ваш вопрос?

2

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

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

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

Пример. Предположим, у вас есть процесс A. Процесс может начинаться с виртуального адреса 0x00400000 и иметь длину 10 МБ. Второй процесс B также может начинаться с виртуального адреса 0x00400000 и иметь длину 6 МБ. Оба процесса запускаются по одному и тому же виртуальному адресу, но физическая память обоих процессов различна. Процесс A может использовать 10 МБ в физической памяти 0x00010000, а процесс B может использовать 6 МБ в физической памяти 0x00200000.

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

  1. Виртуальная память позволяет разделять процессы. Процесс A может получить доступ только к физической памяти, которая сопоставлена с его виртуальной памятью. Процесс A не может связываться с памятью процесса B. Это проблема безопасности (процесс A не может прочитать секреты из памяти процесса B) и проблема стабильности (процесс A не будет связываться с памятью других процессов при использовании неверного указателя, но завершится сбоем без влияния на другие процессы).
  2. Если у вас есть программа с кодом 2 МБ, постоянными данными 1 МБ и динамическими данными 5 МБ, и если вы запустите эту программу дважды, то процессы A и B будут совместно использовать одну и ту же физическую память для кода и сегмента постоянных данных. Таким образом, вам не понадобится 2 * (2+1+5) МБ физической памяти, а 2+1+2 * 5 МБ.
  3. Виртуальная память не обязательно должна быть зарезервирована ОЗУ. Виртуальная память может быть ОЗУ, но также может быть дисковым пространством.
  4. Операционные системы могут дать процессу больше памяти, чем фактически резервируется физической памятью (поиск Google: перегрузка памяти linux).

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

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

Проблема здесь в том, как решить, какую оперативную память перенести на диск. В худшем случае у вас могут быть запущены два процесса: процесс A обращается к странице 1 памяти в цикле, а процесс B обращается к странице 2 памяти в цикле, и у вас есть страница 1 в ОЗУ и страница 2 на диске. Когда процесс B обращается к странице 2, страница 1 может быть перемещена на диск, страница 2 перемещается в ОЗУ, и процесс B может получить доступ к странице 2. Затем запланирован процесс A, и страница 2 перемещена на диск, страница 1 перемещена в ОЗУ, и процесс A может получить доступ к странице 1. Если вы продолжите менять эти две страницы, процессы будут работать очень плохо, и вы увидите 100% активность диска. В этом ограниченном сценарии совершенно очевидно, что другие стратегии подкачки должны работать лучше. Существует довольно сложный код, который решает, какую память перемещать из ОЗУ на диск. Например, одна стратегия будет сохранять недавно посещенные страницы и заменять наименее использованные. Конечно, вы а) не можете иметь во всех случаях оптимальную стратегию, не заглядывая в будущее, и б) проблема стоит больше, чем больше у вас процессов или меньше оперативной памяти.

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

1

Виртуальная память - это пространство памяти, которое накладывается поверх физической памяти (RAM), а также файла / раздела подкачки.

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

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

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

Причина, по которой жесткие диски перебиваются, когда у вас недостаточно оперативной памяти, заключается в том, что компьютер должен продолжать получать данные для Program A из файла / раздела подкачки и помещать их в оперативную память, но затем, когда Program B требуется доступ к ее данным, Затем компьютер должен поместить данные Program A's в ОЗУ обратно на жесткий диск, чтобы освободить место для данных Program B's

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

0

Thrashing определяется как "когда жесткий диск перегружен перемещением информации между системной памятью и виртуальной памятью"

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

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

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

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

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

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

Не имеет смысла Вы в основном говорите, почему бы не поместить весь диск в файл подкачки или в раздел подкачки. Файл подкачки или раздел подкачки - это просто область диска, предназначенная для использования системой виртуальной памяти ЦП / ОС, но она не волшебным образом быстрее остальной части диска по любой причине.

РЕДАКТИРОВАТЬ: я вижу, что все говорят, что цель виртуальной памяти состоит в том, чтобы RAM казалось больше, но разве не имеет смысла также иметь дело с адресным пространством внутри процессов, например, каждый процесс, кажется, имеет свое собственное адресное пространство?

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

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

0

БЫТЬ ПРОСТЫМ

Память компьютера - это непостоянное хранилище. например RAM L1 L2 кэш и т. д.

Диск постоянный. Памяти нету, только хранилище.

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

Так что нет, нет копии с диска на диск. просто таранить на диск и обратно.

Если вы не хотите иметь больше информации об этом, я думаю, что поиск в Google "памяти", "swap" или "pagefile" поможет вам.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .