Подтвердить что ты не робот

Зачем нужна виртуальная память?

Итак, я понимаю, что каждый процесс имеет собственное пространство виртуальной памяти от 0x0 до 0xFF.... F. Эти виртуальные адреса соответствуют адресам в физической памяти (ОЗУ). Почему этот уровень абстракции полезен? Почему бы просто не использовать прямые адреса?

Я понимаю, почему пейджинг полезен, но не виртуальная память.

4b9b3361

Ответ 1

Есть много причин для этого:

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

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

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

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

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

Надеюсь, это поможет!

Ответ 2

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

Два предложения

(1) Использование очень большой основной памяти для облегчения любой потребности в распределении памяти: это невыполнимо из-за очень высокой стоимости.

(2) Виртуальная память: позволяет обрабатывать процессы, которые могут не полностью выполняться в памяти при помощи автоматического распределения памяти по запросу. Термин виртуальная память относится к абстракции разделения логической памяти - памяти, как видно из процесса - из памяти ФИЗИЧЕСКОЙ памяти - как видно процессору. Из-за этого разделения программист должен знать только пространство логической памяти, в то время как операционная система поддерживает два или более уровней физической памяти.

Дополнительно:

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

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

Цели программы и достижения машин в 60-х годах сделали предсказания, необходимые для статического распределения, сложными, если не невозможными. Поэтому решение динамического распределения было принято, но мнения о реализации все еще были разделены.

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

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

CNE/модули/VM/зеленый/defn.html

Ответ 3

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

Удачи!