Виртуальная память

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

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

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

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

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