Управление памятью позволяет процессам перемещаться между оперативной памятью и жестким диском во время выполнения программы. Более того, этот процесс отслеживает каждую ячейку памяти для корректного выделения процессов и освобождения памяти. Физическая память — это основная память, в которой находятся выполняющиеся в данный момент программы. С другой стороны, виртуальная память увеличивает емкость основной (физической) памяти (за счет жесткого диска) для выполнения программ, размер которых превышает объемы установленной в компьютере физической памяти.
Что такое физическая память?
Физическая память (или «ОЗУ», «RAM», «оперативка») — это энергозависимая память, установленная в компьютере. Для её работы требуется непрерывный поток электричества. Перебои с электропитанием или внезапное выключение компьютера могут привести к стиранию хранящихся в ней данных. Кроме того, эта память является линейно адресуемой. Другими словами, значения адресов памяти увеличиваются линейным образом.
Запуская и исполняя программы, процессор напрямую обращается к физической памяти. Обычно программы хранятся на жестком диске. Время доступа процессора к диску значительно превышает аналогичное время доступа к физической (оперативной) памяти. Чтобы процессор мог выполнять программы быстрее, они сначала помещаются в физическую (оперативную) память. После завершения своей работы, они возвращаются обратно на жесткий диск. Освобожденная таким образом память может быть выделена новой программе. При выполнении данные программы называются процессами.
Что такое виртуальная память?
Виртуальная память (или «логическая память») — это метод управления памятью, осуществляемый операционной системой, который позволяет программам задействовать значительно больше памяти, чем фактически установлено в компьютере. Например, если объем физической памяти компьютера составляет 4 ГБ, а виртуальной 16 ГБ, то программе может быть доступен объем виртуальной памяти вплоть до 16 ГБ.
Физическая память vs. Виртуальная память
Основное различие между физической и виртуальной памятью заключается в том, что физическая память относится к оперативной памяти компьютера, подключенной непосредственно к его материнской плате. Именно в ней находятся выполняемые в данный момент программы. А виртуальная память — это метод управления, расширяющий при помощи жесткого диска объем физической памяти, благодаря чему у пользователей появляется возможность запускать программы, требование к памяти которых превышает объем установленной в компьютере физической памяти.
Физическая память | Виртуальная память |
Непосредственно установленная в компьютере оперативная память. | Метод управления памятью, с помощью которого для программ создается иллюзия наличия в системе (физической) памяти, гораздо больше реально установленной. |
Работает быстрее. | Работает медленнее. |
Ограничена размером чипа ОЗУ. | Ограничена размером жесткого диска. |
Может напрямую обращаться к процессору. | Не может напрямую обращаться к процессору. |
Использует swapping. | Использует paging. |
Рассмотрим данные пункты:
#1: Тип памяти:
Физическая память является фактической памятью.
Виртуальная память является логической памятью.
#2: Скорость:
Физическая память быстрее виртуальной памяти.
#3: Размер:
Физическая память ограничена размером чипа ОЗУ.
Виртуальная память ограничена размером жесткого диска.
#4: Процессор:
Физическая память может напрямую обращаться к процессору, в то время как виртуальная память — нет.
#5: Методы, лежащие в основе:
Физическая (оперативная) память использует swapping. Swapping — это концепция управления памятью, при которой всякий раз, когда системе для хранения данных некоторого процесса не хватает оперативной (физической) памяти, она берет её из вторичного хранилища (например, жесткого диска), сбрасывая на него временно неиспользуемые данные. В Linux есть специальная программа управления памятью, которая управляет этим процессом. Всякий раз, когда ОЗУ не хватает памяти, программа управления памятью ищет все те неактивные блоки данных (страницы), присутствующие в ОЗУ, которые не использовались в течение длительного времени. Когда она успешно находит подобные блоки, то перемещает их в память подкачки (например, на жесткий диск). Таким образом, освобождается пространство оперативной памяти, и, следовательно, его можно использовать для некоторых других программ, которые нуждаются в срочной обработке.
Виртуальная память использует paging. Paging — это метод выделения памяти, при котором разным несмежным блокам памяти назначается фиксированный размер. Размер обычно составляет 4 КБ. Paging всегда выполняется между активными страницами (pages).
Команды для управления памятью в Linux
Давайте рассмотрим некоторые команды для управления памятью в Linux.
Файл /proc/meminfo
Файл /proc/meminfo содержит всю информацию, связанную с памятью. Для просмотра данного файла используйте команду cat:
$ cat /proc/meminfo
Эта команда выводит множество параметров, связанных с памятью. Чтобы получить информацию о физической памяти из файла /proc/meminfo, используйте:
$ grep MemTotal /proc/meminfo
Чтобы получить информацию о виртуальной памяти из файла /proc/meminfo, используйте:
$ grep VmallocTotal /proc/meminfo
Команда top
Команда top позволяет отслеживать процессы и использование системных ресурсов в Linux в режиме реального времени. Когда вы запустите команду, то заметите, что значения в выходных данных продолжают изменяться с некоторым небольшим интервалом:
$ top
В верхней части отображается текущая статистика использования системных ресурсов. Нижняя часть содержит информацию о запущенных процессах. Вы можете перемещаться вверх и вниз по списку с помощью клавиш со стрелочками вверх/вниз и использовать q
для выхода.
Команда free
Команда free отображает объем свободной и используемой памяти в системе.
$ free
Значения для каждого поля указаны в кибибайтах (КиБ).
Чтобы получить вывод в более удобочитаемом формате, используйте:
$ free -h
Команда vmstat
Команда vmstat — это инструмент мониторинга производительности в Linux, который предоставляет полезную информацию о процессах, памяти, операциях ввода-вывода, подкачке, диске и планировании процессора, а также приводит статистику виртуальной памяти вашей системы.
$ vmstat
После прочтения возникло несколько вопросов.
Хотелось бы узнать, как операционная система взаимодействует с памятью?
Является ли paging чисто программной фишкой операционной системы, где каждому процессу принадлежат свои страницы?
Сама память имеет страничную адресацию на аппаратном уровне при работе в защищенном режиме.
Приложения состоят из секций
Стандартный .exe файл в винде
Состоит как минимум из заголовка
И секций .соde и .data
Каждая секция имеет свои права доступа, нпример в секцию с кодом нельзя добавлять данные.
Раньше в реалтном режиме на x86 процессорах можно было писать что угодно куда угодно.
Таким образом можно было случайно записать данные в код потом процессор это благополучно выполнял если в жто место передать управление.
Вернее была сегментная адресация за пределы сегмента нельзя бвло выйти.
Но в защищенном режиме защита уже аппаратно реализованна начиная с 286.
Все мы помним death screen в windows тн окно смерти вызванное ошибкой доступа к памяти. Вот жтот самый доступ к памяти контролируется процечсопом на аппаратном уровне.
Слово paging первый раз слышу.
Как это работает я не знаю но суть такая есть некая таблица дискрипторов с описанием прав доступа к каждой странице. Таким образом приложение не может рисать на страницы которые ему не принадлежат. Все это управлется командами вшитыми вмикроядро процессра на аппаратном уровне а на програмеом видимо апи функциями самой ос.