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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Объем используемой программами памяти можно увеличить путем добавления к физической памяти (модулям оперативной памяти) виртуальной памяти.

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

Размер файла подкачки и его размещение в иерархической файловой системе можно изменить.

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

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

3.Системы кэш-памяти, сравнение различных видов памяти.

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

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

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

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

Читайте также:  Поменялся цвет на мониторе

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

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

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

Выборка блока. Кэш-память снабжается контроллером, в функции которого входит достижение максимальной эффективности кэш-памяти и управление ее ресурсами. Контроллер разбивает основную память на блоки с типичным размером 2, 4, 8 или 16 байт. 32-разрядный процессор обычно использует блоки размером 2 или 4 слова. Когда фиксируется кэш-промах, кэш-контроллер перемещает в кэш-память из основной памяти требуемое слово вместе с целым блоком, содержащим это слово. Выборка блока с данными может осуществляться одним из трех способов: 1) с упреждением — когда извлекаются данные, расположенные за требуемым байтом; 2) . с отставанием — когда извлекаются данные, расположенные перед требуемым байтом; 3) и с тем и с другим. Обычно блоки выравниваются на границу двойного слова. Обращение к любому байту блока приводит к копированию в кэш-память всего блока.

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

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

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

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

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

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

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

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

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

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

Читайте также:  Материнка для i7 7700k

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

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

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

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

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

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

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

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

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

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

Кэш центрального процессора разделён на несколько уровней. Максимальное количество кэшей — четыре. В универсальном процессоре в настоящее время число уровней может достигать трёх. Кэш-память уровня N+1, как правило, больше по размеру и медленнее по скорости доступа и передаче данных, чем кэш-память уровня N.

Самым быстрым является кэш первого уровня — L1 cache (level 1 cache). По сути, она является неотъемлемой частью процессора, поскольку расположена на одном с ним кристалле и входит в состав функциональных блоков. В современных процессорах обычно L1 разделен на два кэша — кэш команд (инструкций) и кэш данных (Гарвардская архитектура). Большинство процессоров без L1 не могут функционировать. L1 работает на частоте процессора, и, в общем случае, обращение к нему может производиться каждый такт. Зачастую является возможным выполнять несколько операций чтения/записи одновременно.

Читайте также:  Как убрать звук камеры на андроиде

Вторым по быстродействию является кэш второго уровня — L2 cache, который обычно, как и L1, расположен на одном кристалле с процессором. В ранних версиях процессоров L2 реализован в виде отдельного набора микросхем памяти на материнской плате. Объём L2 от 128 кбайт до 1−12 Мбайт. В современных многоядерных процессорах кэш второго уровня, находясь на том же кристалле, является памятью раздельного пользования — при общем объёме кэша в n Мбайт на каждое ядро приходится по n/c Мбайта, где c — количество ядер процессора.

Кэш третьего уровня наименее быстродействующий, но он может быть очень большим — более 24 Мбайт. L3 медленнее предыдущих кэшей, но всё равно значительно быстрее, чем оперативная память. В многопроцессорных системах находится в общем пользовании и предназначен для синхронизации данных различных L2.

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

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

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

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

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

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

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

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

Ссылка на основную публикацию
Уравнение окружности в полярных координатах
Определение: замкнутая плоская кривая, все точки которой одинаково удалены от данной точки (центра О), лежащей в той же плоскости, что...
Тело массой м брошено
Тело массой m = 5 кг брошено под углом α = 30° к горизонту с начальной скоростью v 0 =...
Телефоны с ик портом 2018
В большинстве домов можно обнаружить несколько устройств, которые управляются пультом дистанционного управления: телевизор, музыкальный центр, система климат-контроля, камера наблюдения и...
Уравнение пучка прямых проходящих через точку
Совокупность прямых, проходящих через некоторую точку, называется пучком прямых с центром в этой точке. Если и - уравнения двух пересекающихся...
Adblock detector