Я понимаю, что виртуальная память дурачит программу, отображая больше памяти, чем на самом деле доступно.
но в конечном счете он должен сопоставить логический адрес в физический адрес на самом деле. Теперь, как это увеличивает память?
Я понимаю, что виртуальная память дурачит программу, отображая больше памяти, чем на самом деле доступно.
но в конечном счете он должен сопоставить логический адрес в физический адрес на самом деле. Теперь, как это увеличивает память?
не увеличивается физическая памяти все. Его предназначение совсем другое. Что он может сделать-это сделать доступными другие резервные хранилища, которые позволяют программам использовать больше памяти, чем доступно физически.
Виртуальная память используется для разделения и изоляции процессов друг от друга, а также позволяет перенаправлять доступ к памяти в альтернативные места.
Виртуальная память позволяет системе, чтобы у каждого процесса своя память изолированные из других процессов. С программами, эффективно работающими в своем собственном пространстве, это дает им полный доступ ко всему адресному пространству, вместо того, чтобы работать вокруг других программ, которым также может потребоваться использовать "те же" адреса. Это имеет побочный эффект повышения надежности и безопасности, так как процессы не могут легко мешать друг другу.
пространство виртуальной памяти приложения создается по мере необходимости. Приложение выглядит (само по себе) как одно непрерывное блок памяти, но на самом деле может быть полностью разбросан по физической памяти.
Виртуальная память также позволяет доступ к памяти, чтобы быть захвачены и перенаправлены, что позволяет нам использовать функции, такие как файл подкачки. Это означает, что мы можем переместить на диск части памяти, которые недавно не были использованы, и установить указатель "этот блок памяти находится в файле x в местоположении y", а затем мы можем освободить физическую область памяти для использования другим приложением. Когда приложение нуждается в том, что память может быть считана с диска, помещена в какое-то место физической оперативной памяти (потенциально отличное от того, где она была раньше) и отображена обратно в то же место виртуальной памяти, что и ранее.
Так же, как файл подкачки используется виртуальная память может также позволить операционной системе делать то, что эффективно "ленивый" загрузка общих библиотек для программы. Когда основная программа сообщает операционной системе, что она хочет использовать определенную библиотеку тогда операционная система может сэкономить время, проверяя требования к библиотеке, выделяя пространство в области виртуальной памяти для приложения, но вместо того, чтобы загружать в нее всю библиотеку, можно отложить загрузку страниц библиотеки с диска до тех пор, пока они действительно не понадобятся. Таким образом, только часть библиотеки, которые загружаются в оперативную память это части, которые фактически используются в программе, Детали, которые никогда не используются, никогда не напивался и не тратьте оперативной памяти.
используя эти методы улучшить стабильность системы и позволяет несколько процессов, работать в ограниченном пространстве без ущерба для друг друга. Он не "увеличивает память", а позволяет более эффективно использовать то, что у нас есть.
файл подкачки включен системами виртуальной памяти, но в прошлом был перепутан как будучи виртуальная память.
система должна будет сопоставить каждый виртуальный адрес с физическим адресом при использовании этой памяти, но не вся память используется одновременно. Например, предположим, что в вашем браузере 20 вкладок, каждая из которых занимает 1 ГБ памяти. В ОС без поддержки виртуальной памяти для этого потребуется 20 ГБ оперативной памяти. Хитрость заключается в том, что вы не просматриваете все 20 вкладок одновременно, поэтому ОС с виртуальной памятью позволит вам использовать ваш браузер например, с парой ГБ оперативной памяти, заменяя неактивные вкладки на диск.
Виртуальная память не используется исключительно для перекачки. Это основная цель на самом деле, чтобы избежать фрагментации оперативной памяти, которая является большой проблемой на системах без управления виртуальной памятью: вы можете хорошо иметь 1 ГБ оперативной памяти бесплатно, но если он приходит в куски 10 МБ, приложение, запрашивающее 100 МБ не сможет работать.
со временем виртуальная память нашла еще больше использует, в частности, случайный доступ к файлам: многие приложения, такие как базы данных, станут болезненно медленными, если они будут вынуждены читать файлы последовательно, и работать намного быстрее, если ОС позволит им притворяться, что весь файл находится в (виртуальной) памяти и оптимизировать дисковый ввод-вывод и кэширование на основе шаблонов доступа.
Виртуальная память не увеличивает объем памяти, в смысле добавления оборудования основной памяти. Но она может увеличить диапазон используемых адресов. Таким образом, можно иметь работающую программу, состоящую из сегмента кода и сегмента данных (стек и куча), и оба они могут занимать диапазон виртуальный адреса больше, чем диапазон физическая адреса, предоставляемые физически реальным пространством хранения машины. Фокус в том, что только небольшая часть этих виртуальных адресов поддерживается физической оперативной памятью в любой момент [но все в конечном счете поддерживается дисковым хранилищем]. Это работает из-за явления расположения ссылок: в любой момент времени выполняются только инструкции в одном или нескольких небольших смежных разделах сегмента программы, и только данные в одном или нескольких небольших смежных разделах сегмента данных управляются на [конечно поведение на самом деле более сложный, но он следует этой схеме в течение большей части времени]
Я понимаю, что виртуальная память дурачит программу, отображая больше памяти, чем на самом деле доступно.
первоначальная мотивация для виртуальной памяти была формой управления памятью, чтобы обеспечить адресное пространство больше, чем физическая память.
Программное обеспечение может использовать полное адресное пространство ЦП (например, адресное пространство 2^32), в то время как фактическая установленная физическая память составляет лишь часть этого числа.
Большие программы смогли быть портативным среди компьютеров, которые использовали виртуальную память, не предъявляя огромных (установленных) требований к памяти.
Такое использование виртуальной памяти было еще во времена мэйнфреймов и ферритовых ядер (физически и дорого).
но в конечном счете он должен сопоставить логический адрес в физический адрес на самом деле. Теперь, как это увеличивает память?
Виртуальная память эволюционировала от как раз метода к предоставьте больше адресного пространства для программы.
Виртуальная память является ключевым компонентом в обеспечении безопасности для каждого процесса в современных операционных системах, так что процесс не может вмешиваться в другой процесс, ни быть поставлена под угрозу другим процессом.
Но многопроцессорность (не путайте с многопроцессорностьюors) С виртуальной памятью все еще обеспечивает более очевидную память для системы, чем физическая память.
каждого созданного процесса с собственным виртуальным адресным пространством, т. е. собственной виртуальной памятью.
Объем физической памяти, который фактически используется (и сопоставляется с виртуальной памятью) для каждого процесса, является динамическим. Как правило, только виртуальная память, содержащая код (текст) и страницы/сегменты данных для выполнения процесса, сопоставляется с физической памятью (она же находится в памяти).
несущественный код (потому что он в данный момент не выполняется) и данные (потому что он не referenced / processed) не обязательно быть резидентом памяти все время. Код и/или страницы / сегменты данных могут быть "выгружены" в резервное хранилище (например, пространство подкачки или файл подкачки на жестком диске или SSD), а затем "заменены (назад)" по мере необходимости (ака "по требованию").
Виртуальная память облегчает эффективное использование конечной физической памяти среди многочисленных процессов, каждый со своим собственным защищенным виртуальным адресным пространством. Сумма этих виртуальных воспоминаний, как правило, больше, чем установленная физическая память.
"Увеличенная память" теперь с точки зрения системы, а не только с точки зрения программы.
Виртуальная память увеличивает объем данных, к которым может обращаться программа. С точки зрения программного обеспечения нам (как правило) все равно, где хранятся данные. Он смог храниться в физической памяти драхмы, он смог храниться на внезапном приводе заткнутом в машину, или он смог даже храниться на закручивая блюде. Что заботит программное обеспечение, так это то, что, когда оно запрашивает доступ к этим данным, оно преуспевает.
на практике, мы также хотим, чтобы программы запускались быстро. Для быстрота соображения, мы заботимся, где данные. Мы хотим, чтобы данные, к которым мы чаще всего обращаемся, хранились на оборудовании, обеспечивающем самый быстрый доступ. Наши программы будут как бежать полностью из драхмы. Однако нам часто не хватает драма для этого. Виртуальная память-это решение.
с виртуальной памятью, операционная система "страницы" из данных, которые не были использованы в то время, сохраняя его на жестком диске. Это все еще доступно, просто медленно. Если программа запрашивает данные, которые находятся на жестком диске, операционная система должна потратить время на чтение данных с диска и переместить их обратно в DRAM.
в теории, оно смогл как раз прочитать данные сразу диска. Тем не менее, есть причины, по которым это не делается таким образом. Программы не хотят быть в курсе всех этих осложнений. Мы можем и пишем программное обеспечение, которое разумно помещает данные на диск (это называется кэшированием). Однако, это требует много дополнительной работы. Самые быстрые мы сделать это можно в коде:
if data is not in memory
read data from disk into memory
operate on data
проницательный читатель заметит, что даже если данные находятся в памяти, мы должны иметь условную проверить, есть ли он там. Это гораздо медленнее чем как раз работающ в памяти сразу!
Виртуальная память решает эту проблему, выполняя проверку оборудования на ЦП. Процессор в состоянии сделать эту операцию виртуальной памяти очень быстро, потому что он может выделить аппаратное обеспечение к нему. Любая попытка сделать это только в программном обеспечении должна используйте части общего назначения процессора, которые, естественно, медленнее, чем выделенные транзисторы.
это приводит к тому, что мы всегда помещаем данные обратно в память, а не просто читаем их с диска и оставляем в памяти. Мы разбиваем память на" страницы", каждая из которых помечена как присутствующая или отсутствующая в памяти. Операционная система поддерживает эту таблицу в формате, удобном для непосредственного использования ЦП. Всякий раз, когда программа обращается к настоящее время, оборудование на ЦП дает им доступ к данным в DRAM непосредственно. Когда данные не присутствуют," ошибка страницы " выдается, говоря операционной системе идти, загружают ту страницу от диска до некоторой физической страницы памяти и обновления таблица, чтобы указать ЦП на эту новую физическую страницу.
ключ ко всей этой проблеме-минимизировать ее использование. На практике мы обнаруживаем, что операционные системы очень хорошо выбирают, какие данные хранить в памяти, а какие-на странице вне к диску, поэтому подавляющее большинство доступов к памяти происходит без всегда причинять недостаток страницы.
Он делает это, делая записи карты временными.
когда программа обращается к логическому адресу, процессор ищет на карте соответствующий физический адрес. Если он найден, доступ к памяти происходит так, как ожидалось; если он не найден, то физический адрес должен быть выделен, а содержимое загружено из другого хранилища- "пространство подкачки". Если каждый физический адрес уже выделен какому-либо логическому адресу, то некоторые логические адреса должны быть "выгружены" (их контент сохранены в файл подкачки), чтобы сделать физические адреса.
максимальный размер выделенной памяти-это размер пространства подкачки, который может быть намного больше установленной памяти. Это может быть полезно думать о подкачки, как на "реальной" памяти, и ОЗУ в качестве высокоскоростного кэша для подкачки.
(Это далеко не полное описание, оно предназначено для ответа на непосредственный вопрос, не вдаваясь в соответствующие, но ненужные детали.)
основная концепция основана на том, что современный процессор может управлять таблицами преобразования, отслеживая "какие диапазоны адресов имеет определенный процесс, выделенный для использования, и какие физические адреса (думаю, A00..Линии Axx на шине памяти), если таковые имеются, в настоящее время используются для фактического хранения данных. "IF ANY", потому что" none at all "является возможным и приемлемым состоянием: в этом случае условие ошибки (так называемая" ошибка страницы") будет поднято на аппаратном уровне - и эта ошибка вызовет На уровне ОС обработчик, который может, например, загрузить содержимое памяти, которые были записаны в файл подкачки обратно в любое свободное место в физической памяти (в случае чтения) или найти реальное место, чтобы положить вещи (в случае записи), обновление вышеупомянутых переводов стол, и только потом руки управление процессом, который пытался получить доступ к этой памяти.. и это будет не мудрее того, что произошло.
Виртуальная память:
1) позволяет отображать большое виртуальное адресное пространство на меньший объем физической памяти, с избытком "выгружается" на диск или SSD, или перспективно NVRAM и других устройств.
2) позволяет отображать большее виртуальное адресное пространство (например, 64-бит) на меньшее физическое адресное пространство (например, 32 или 64 бит)
3) позволяет отображать меньшее виртуальное адресное пространство (например, 32 бита) на большее физическое адресное пространство (например, 40 и таким образом позволяет более старым приложениям использовать преимущества более физического DRAM.
4) позволяет физической памяти, что нам фрагментированные и несмежные в физическом адресном пространстве, которые будут оказываться смежными в виртуальном адресном пространстве.
5) позволяет процессам иметь свои собственные виртуальные адресные пространства и, следовательно, быть изолированными друг от друга.
6) позволяет различным виртуальным адресам, которые совместно используют одни и те же значения данных, физическая страница.
Это может произойти в рамках одного процесса, или операционной системы - большинство из BSD Unix и производных операционки есть один только для чтения страницы нулей, которые могут быть отображены в любую ноль-заполнена виртуальная страница, как правило, корова (копирование при записи - только чтение нулей, пишет в ловушке и страницы неразделенный и сделанные записи).
Это может происходить между процессами-например, Unix fork () создает дочерние процессы, которые разделяют почти всю виртуальную память коровьим образом.
Это может произойти между операционными системами - например, гостевые операционные системы на хосте виртуальной машины могут иметь дедуплицированные страницы, общую корову и т. д. (Некоторые недавние атаки безопасности воспользовались этим.)
7) виртуальная память может позволять отображать части виртуального адресного пространства в файлы или в память, отображаемую на других процессорах, будь то в той же многопроцессорной системе или через Интернет.
Постоянная ссылка на данную страницу: [ Скопировать ссылку | Сгенерировать QR-код ]