Как распределить оперативную память

от admin

Как выделить больше оперативной памяти для игры

Способ 1: Общие рекомендации по оптимизации оперативной памяти

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

Как выделить оперативную память на игру-017

Способ 2: Повышение приоритета игры

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

  1. Запустите нужную игру, затем сверните ее, щелкните правой кнопкой мыши по кнопке «Пуск» и из появившегося контекстного меню выберите пункт «Диспетчер задач». Как выделить оперативную память на игру-01
  2. Перейдите на вкладку «Подробности» и найдите там процесс, связанный с вашей игрой. Как выделить оперативную память на игру-02

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

Способ 3: Выделение виртуальной памяти

Виртуальная память, или файл подкачки, — дополнительное пространство, выделяемое с жесткого диска для оптимизации оперативной памяти. Указанное количество виртуальной памяти используется точно так же, как и ОЗУ, при этом разгружая основное комплектующее. Мы советуем активировать файл подкачки вне зависимости от того, какой штатный объем ОЗУ установлен на вашем компьютере (не относится к 32 ГБ и выше).

Как выделить оперативную память на игру-04

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

Lumpics.ru

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

Способ 4: Завершение ненужных процессов

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

Как выделить оперативную память на игру-09

Способ 5: Изменение параметров запуска

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

  1. Запустите лаунчер, перейдите в библиотеку и в списке игр найдите ту, для которой хотите выделить нужное количество оперативной памяти. Как выделить оперативную память на игру-010
  2. Щелкните по строке с игрой правой кнопкой мыши и из контекстного меню выберите пункт «Свойства». Как выделить оперативную память на игру-011
  3. В категории «Общие» найдите строку «Параметры запуска» и напишите там -heapsize 8388608 , где число после команды — количество выделяемой оперативной памяти в КБ (1 МБ = 1024 КБ, 1 ГБ = 1024 МБ). Как выделить оперативную память на игру-012

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

  1. Найдите иконку приложения, щелкните по ней правой кнопкой мыши и из контекстного меню выберите пункт «Свойства». Как выделить оперативную память на игру-013
  2. Перейдите на вкладку «Ярлык» и установите курсор в конце строки «Объект». Не удаляйте текущее содержимое, поскольку оно определяет путь к файлу для запуска. Как выделить оперативную память на игру-014
  3. Напишите -heapsize 8388608 , заменив количество оперативной памяти на свое, и сохраните изменения. После этого запустите игру и проверьте изменения в ее производительности. Как выделить оперативную память на игру-015

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

Способ 6: Установка программы для оптимизации игр

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

Оперативная память:
замена и установка новой

Оперативная память – нехитрый компонент компьютера. У нее есть не так много параметров:

  • главные – объем, частота и тайминги;
  • на втором месте технологии и системы автоматизации, среди которых XPM 2.0;
  • последний критерий выбора памяти – эстетика и наличие радиаторов. Если раньше компьютеры редко собирались «на показ», то сейчас огромные стеклянные крышки корпуса просто обязывают делать все красиво.

Какой нужен объем памяти?

Если не вдаваться в подробности, то можно сказать, что в 2021 году после выхода консолей нового поколения минимальное количество памяти в игровом ПК увеличилось с рекомендованных 8 Gb до 16 Gb минимум. Чтобы понять причину такого резкого увеличения игровых требований, нужно понимать, как разрабатываются игры.

Мы не берем во внимание ламповые игрушки для души, игровые компы покупают под ААА-проекты. А их делают, чтобы заработать деньги. И современная целевая аудитория, как ни странно, – это консольщики: PlayStation 4 и PlayStation 5, а также их прямые конкуренты Xbox One и S/X.

Казалось бы, компьютер есть у каждого, аудитория шире быть не может. Но компьютер компьютеру рознь, игровые ПК достаточно дорогие, самая простая сборка игрового ПК стоит в районе 1500$, если уж совсем на всем экономить, то 1000-1200$. И вам еще нужно купить монитор, а также всю периферию вроде мышки, клавиатуры, колонок и т.д. При этом вы получите компьютер, который потянет игры в FullHD при максимальных настройках графики, но без RTX и DLSS 2.0 – это удел топовых решений.

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

Сколько нужно оперативной памяти топовым играм

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

Нужно оперативки, если не хватает памяти видеокарты Нужно оперативки, если видеопамяти достаточно
Red Dead Redemption 2 10 Gb 8,4 Gb
Metro Exodus: Sam’s Story 8,2 Gb 6,5 Gb
Call of Duty: Modern Warfare 11,7 Gb 8 Gb
CoD MW 2 Remastered 9,9 Gb 9,5 Gb
Star Wars Jedi: Fallen Order 6,9 Gb 6,6 Gb
Borderlands 3 10,7 Gb 8 Gb
Detroit Become Human 9,7 Gb 8 Gb
Ghost Recon Breakpoint 15,3 Gb 8,5 Gb
Need for Speed Heat 10 Gb 7,4 Gb
Total War THREE KINGDOMS 8,7 Gb 6,7 Gb
Microsoft Flight Simulator 14 Gb 10,9 Gb
Watch Dogs Legion 13,2 Gb 9,1-10 Gb
Cyberpunk 2077 13,3 Gb 8,1 Gb
HITMAN 3 9,7 Gb 7,4 Gb
Assassin’s Creed Valhalla 13,3 Gb 9,6 Gb
Anno 1800 11 Gb 10,3 Gb
Aquanox Deep Descent 10,4 Gb 8 Gb
Star Citizen 15,9 Gb 14,6 Gb

Как вы могли заметить, компьютер использует больше оперативной памяти, когда ему не хватает возможностей видеокарты. К примеру, тот же Watch Dogs Legion потребляет 14,5 Gb, только если в системе установлена RTX 2060, которая имеет запас видеопамяти 6 Gb, а если тест проводить на RTX 2080 Ti с 11 GB, то потребление резко падает до 9 GB.

Но даже с нехваткой видеопамяти игры вполне вмещаются в 16 Gb оперативной памяти, так что новый стандарт можно лицезреть в действии уже сегодня. Если же вы рассчитываете сборку на 2К или FullHD, то потребление оперативной памяти играми на таких разрешениях всего на 3-5% ниже, чем на 4К. Разрешение монитора – это не тот параметр, который сильно влияет на количество оперативки. Это влияет скорее на количество предметов, которые попадают в кадр при прохождении игр, и разница в количестве объектов всего лишь 3-5%.

Сколько нужно памяти для видеомонтажа и стримов

Если говорить о геймерских компьютерах, то нельзя упускать тему блоггинга. Для обработки видео в 4К оптимальный объем памяти – 32 Gb, в крайнем случае можно использовать 16 Gb, но комфорт при этом явно ниже, все фоновые процессы приложения придется закрыть.

Поддержка потоковой передачи видео (стриминг) не требует каких-то особых объемов памяти, обычно она выполняется аппаратными средствами видеокарты, такой подход реализован в последних линейках NVIDIA и ATI Radeon. Так что для стриминга в 2021 году нужно минимум 16 Gb, лучше – 32 Gb.

Частота и тайминги

Само понятие RAM (Random Access Memory) – означает, что это память с возможностью доступа к любому блоку в тот момент, когда это нужно. Информация в оперативной памяти сохраняется только пока на нее подается напряжение, как только вы выключили компьютер, она сразу же пропадает. Именно поэтому нужно время, чтобы компьютер выключился, он должен сохранить необходимые данные в долгосрочную память. Такая технология позволяет очень быстро записывать и считывать данные.

Частота – это количество тактов, то есть количество допустимых обращений в секунду к конкретной ячейке памяти, а значит, циклов перезаписи. 2800 МГц равно 2,8 млрд циклов в секунду. Понятно, что чем больше таких циклов, тем быстрее память, но тут есть одно «но» – тайминги.

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

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

Можно разбираться с таймингами, пытаться разогнать неразгоняемое, подбирая значения задержек и вольтажа, а можно довериться бренду. На данный момент рынок захватила HyperX, подразделение компании Kingston Technology, которое ориентирует свою продукцию на геймеров. Среди достойных конкурентов можно выделить Corsair, G. Skill, Samsung, но пока они позади.

HyperX представлен на рынке тремя линейками оперативной памяти:

  • Fury – стандартная линейка памяти с радиаторами и без, в зависимости от модели. Поддерживает технологию XPM, полностью совместима с последней серией Ryzen и новыми моделями Intel i5, i7 и i9 11-го поколения.
  • Predator – профильная игровая память с топовыми показателями частоты до 4600 МГц, именно такая память используется почти во всех компьютерах HYPERPC. При таких высоких частотах тайминги сохраняются на достаточно низком уровне, CL15 – CL19. Конечно, во время работы и разгона они могут поменяться, но есть платы с уже высокими частотами и такими же таймингами «с завода». Если подобрать штатную частоту уже под свой процессор с материнской платой, то можно добиться хороших результатов.
  • Impact – компактная память для ноутбуков и мини-компьютеров. Она не оснащена радиаторами за ненадобностью, но также поддерживает XPM и совместима с последними моделями процессоров от обоих производителей.

Что такое технология XPM

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

Сегодня это кажется обыденным, никого не удивишь принципом Plug-and-Play, но без этой технологии вам пришлось бы лезть в BIOS и настраивать частоты, а потом подбирать нужный вольтаж и тайминги для стабильной работы памяти. И после нескольких часов ковыряния настроек, вы могли бы зайти в систему, запустить игру игру, платы немного нагрелись бы и выдали синий экран смерти (BSOD), так как настроено все не верно. Муки выбора подходящей конфигурации для своих плашек памяти – это не то, чем вам захотелось бы заниматься ближайшие несколько дней после покупки новой памяти.

Охлаждение

Еще года 3-4 назад можно было сказать, что любой радиатор на планке памяти – это просто декорация, охлаждение ей не нужно. Сейчас, когда все активно используют DDR4 на высоких частотах, становится понятно, что на больших нагрузках перегрев чипов может быть критичным. Напомним, что процессор имеет критическую температуру перегрева в районе 92-100 °C, для видеокарт критичными является такой же диапазон температур. Память же не выдерживает больше 70 °C.

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

Рендеринг каждый раз испытывает ваш компьютер на прочность. Данные загружаются и выгружаются гигабайтами, особенно если процессор или видеокарта мощные. Хотя многое зависит от того, на чем вы проводите этот самый рендер – на GPU или на CPU. Если вы используете для рендеринга GPU, можете выдохнуть с облегчением – в этом процессе используется видеопамять, которая в разы быстрее обычной оперативки.

Эстетика

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

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

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

Технология Infrared Sync от HyperX

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

Каналы и версия памяти

Версия памяти – DDR3 или DDR4 – частично относится к частоте. DDR3 поддерживает частоты до 2133 МГц, а DDR4 до 3200 МГц и даже до 4600 МГц, но только в теории – еще нет оборудования, которое поддерживало бы такую частоту. Пока современные десктопные решения уперлись в границу 3200 МГц, что в общем неплохо.

Теперь нужно упомянуть форм-фактор и совместимость. DDR3 и DDR4 несовместимы, вы даже физически не сможете вставить чужую плату в гнездо. Там предусмотрена «защита от дурака», технологическая перемычка не даст вам перепутать платы. Конструктивно они отличаются только перемычкой и количеством контактов, у DDR3 – 240 Pin, у DDR4 288 Pin.

Стоит также сказать, что материнская плата, как правило, поддерживает только один тип памяти, как и процессор. И если у вас не допотопная модель ЦП, то вы скорее всего используете DDR4 прямо сейчас.

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

Поэтому лучше использовать планки меньшим объемом, но в большем количестве. Единственным исключение из этого правила является запас для апгрейда. Если вы сейчас хотите поставить 16Gb, чтобы в будущем расширить объем, то лучше купить 2х8Gb, чем 4х4Gb.

Слоты

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

Процессоры топового уровня имеют 4 канала памяти, и на таких материнках уже установлено 8 слотов под оперативную память. К таким процессорам относятся Ryzen Threadripper на сокете xTR4 и последние Intel серии X на сокете 2066. Использование большего количества памяти на большем числе каналов – это возможность установить очень много оперативной памяти и заставить ее работать быстро.

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

«Соответствующая» планка – это та, которая подходит по версии, частоте и желательно производителю к той, которая уже стоит. Размеры планок оперативной памяти для ноутбуков меньше, чем для настольных ПК, и в них 204 Pin у DDR3 и 260 Pin у DDR4. Обязательно есть маркировка SODIMM. Также существует два вида планок – стандартные и с пониженным энергопотреблением, они имеют приставку «L» в конце.

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

Замена оперативной памяти

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

Снять крышку

Крышка прикручена сзади двумя винтами и сдвигается в сторону задней части корпуса.

Если у вас корпус со стеклом на боку, то, скорее всего, оно прикручено четырьмя винтами. У них бывают самые разные шлицы – под крестовую отвертку, плоскую, шестигранник и т.д. Это зависит от стиля самого корпуса. Также бывают накатки для откручивания пальцами без инструментов. Будьте осторожны со стеклом: хотя чаще всего используются каленые стекла, они более устойчивы к нагрузкам, ронять его все же не стоит.

Снять старые плашки

Теперь вам нужно отогнуть пластиковые крепления вверху и внизу планок, при открытии зажимы вытолкнут платки из своих слотов.

Поставить новую оперативную память

Достаточно легко вставить плашки в слоты, зажимы защелкнутся. Все готово!

Замена оперативки на ноутбуке

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

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

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

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

Частые вопросы по замене или добавлению оперативной памяти

Где находятся слоты для оперативной памяти?

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

В каком порядке устанавливать оперативную память?

Это не имеет значения, просто поставьте все платки на свои места и закрепите их зажимами.

Как правильно установить двухканальную оперативную память?

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

Можно ли устанавливать оперативную память разного объема?

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

Что делать после установки дополнительной оперативной памяти?

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

Единственный нюанс – если у вас установлена система х32, она же х86, то вам нужно ее переустановить и заменить на х64. Дело в том, что х32/х86 поддерживает только 3,6 Gb оперативной памяти, больше она просто не увидит. В х64 такой проблемы нет.

Глава 5 Управление памятью

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

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

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

Функциями ОС по управлению памятью в мультипрограммной системе являются:

отслеживание свободной и занятой памяти;

выделение памяти процессам и освобождение памяти по завершении процессов;

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

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

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

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

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

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

Символьные имена присваивает пользователь при написании программы на алгоритмическом языке или ассемблере.

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

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

Совокупность виртуальных адресов процесса называется виртуальным адресным пространством. Диапазон возможных адресов виртуального пространства у всех процессов является одним и тем же. Например, при использовании 32-разрядных виртуальных адресов этот диапазон задается границами 0000000016и FFFFFFFF16. Тем не менее каждый процесс имеет собственное виртуальное адресное пространство — транслятор присваивает виртуальные адреса переменным и кодам каждой программе независимо (рис. 5.2).

Рис. 5.1. Типы адресов

Рис. 5.2. Виртуальные адресные пространства нескольких программ

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

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

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

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

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

Рис. 5.3. Типы виртуальных адресных пространств: плоское (а), сегментированное (б)

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

Существуют два принципиально отличающихся подхода к преобразованию виртуальных адресов в физические.

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

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

Рис. 5.4. Схема динамического преобразования адресов

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

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

Необходимо различать максимально возможное виртуальное адресное пространство процесса и назначенное (выделенное) процессу виртуальное адресное пространство. В первом случае речь идет о максимальном размере виртуального адресного пространства, определяемом архитектурой компьютера, на котором работает ОС, и, в частности, разрядностью его схем адресации (32-битная, 64-битная и т. п.). Например, при работе на компьютерах с 32-разрядными процессорами Intel Pentium операционная система может предоставить каждому процессу виртуальное адресное пространство до 4 Гбайт (2 32 ). Однако это значение представляет собой только потенциально возможный размер виртуального адресного пространства, который редко на практике бывает необходим процессу. Процесс использует только часть доступного ему виртуального адресного пространства.

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

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

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

Рис. 5.5. Соотношение объемов виртуального адресного пространства и физической памяти: виртуальное адресное пространство превосходит объем физической памяти (а), виртуальное адресное пространство меньше объема физической памяти (б)

Однако соотношение объемов виртуальной и физической памяти может быть и обратным. Так, в мини-компьютерах 80-х годов разрядности поля адреса нередко не хватало для того, чтобы охватить всю имеющуюся оперативную память. Несколько процессов могло быть загружено в память одновременно и целиком (рис. 5.5, б).

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

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

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

Обычно виртуальное адресное пространство процесса делится на две непрерывные части: системную и пользовательскую. В некоторых ОС (например, Windows NT, OS/2) эти части имеют одинаковый размер — по 2 Гбайт, хотя в принципе деление может быть и другим, например 1 Гбайт — для ОС, и 2 Гбайт — для прикладных программ 1 . Часть виртуального адресного пространства каждого процесса, отводимая под сегменты ОС, является идентичной для всех процессов. Поэтому при смене активного процесса заменяется только вторая часть виртуального адресного пространства, содержащая его индивидуальные сегменты, как правило, — коды и данные прикладной программы (рис. 5.6). Архитектура современных процессоров отражает эту особенность структуры виртуального адресного пространства, например, в процессорах Intel Pentium существует два типа системных таблиц: одна — для описания сегментов, общих для всех процессов, а другая — для описания индивидуальных сегментов данного процесса.

1 Деление виртуального адресного пространства на две непрерывные области не является обязательным — можно представить себе ОС, которая обходится без него и чередует свои сегменты и сегменты прикладных программ, размещая их в виртуальном адресном пространстве в произвольном порядке.

При смене процесса первая таблица остается неизменной, а вторая заменяется новой.

Рис. 5.6. Общая и индивидуальные части виртуальных адресных пространств

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

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

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

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

Алгоритмы распределения памяти

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

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

Рис. 5.7. Классификация методов распределения памяти

Распределение памяти фиксированными разделами

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

Очередной новый процесс, поступивший на выполнение, помещается либо в общую очередь (рис. 5.8, а), либо в очередь к некоторому разделу (рис. 5.8, 6).

Рис. 5.8. Распределение памяти фиксированными разделами: с общей очередью (а), с отдельными очередями (б)

Подсистема управления памятью в этом случае выполняет следующие задачи:

Сравнивает объем памяти, требуемый для вновь поступившего процесса, с размерами свободных разделов и выбирает подходящий раздел;

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

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

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

Распределение памяти динамическими разделами

В этом случае память машины не делится заранее на разделы. Сначала вся память, отводимая для приложений, свободна. Каждому вновь поступающему на выполнение приложению на этапе создания процесса выделяется вся необходимая ему память (если достаточный объем памяти отсутствует, то приложение не принимается на выполнение и процесс для него не создается). После завершения процесса память освобождается, и на это место может быть загружен другой процесс. Таким образом, в произвольный момент времени оперативная память представляет собой случайную последовательность занятых и свободных участков (разделов) произвольного размера. На рис. 5.9 показано состояние памяти в различные моменты времени при использовании динамического распределения. Так, в момент t0 в памяти находится только ОС, а к моменту t1 память разделена между 5 процессами, причем процесс П4, завершаясь, покидает память. На освободившееся от процесса П4 место загружается процесс П6, поступивший в момент t3.

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

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

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

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

После завершения процесса корректировка таблиц свободных и занятых областей.

Рис. 5.9. Распределение памяти динамическими разделами

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

Распределение памяти динамическими разделами лежит в основе подсистем управления памятью многих мультипрограммных операционных системах 60-70-х годов, в частности такой популярной операционной системы, как OS/360.

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

Рис. 5.10. Распределение памяти перемещаемыми разделами

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

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

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

Свопинг и виртуальная память

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

Рис. 5.11. Зависимость загрузки процессора от числа задач и интенсивности ввода-вывода

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

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

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

Виртуализация оперативной памяти осуществляется совокупностью программных модулей ОС и аппаратных схем процессора и включает решение следующих задач:

размещение данных в запоминающих устройствах разного типа, например часть кодов программы — в оперативной памяти, а часть — на диске;

выбор образов процессов или их частей для перемещения из оперативной памяти на диск и обратно;

перемещение по мере необходимости данных между памятью и диском; Q преобразование виртуальных адресов в физические.

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

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

Виртуализация памяти может быть осуществлена на основе двух различных подходов:

свопинг (swapping) — образы процессов выгружаются на диск и возвращаются в оперативную память целиком;

виртуальная память (virtual memory) — между оперативной памятью и диском перемещаются части (сегменты, страницы и т. п.) образов процессов.

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

1 В некоторых современных ОС, например версиях UNIX, основанных на коде SVR4, механизм свопинга используется как дополнительный к виртуальной памяти, включающийся только при серьезных перегрузках системы.

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

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

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

Сегментная виртуальная память предусматривает перемещение данных сегментами — частями виртуального адресного пространства произвольного размера, полученными с учетом смыслового значения данных,

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

Для временного хранения сегментов и страниц на диске отводится либо специальная область, либо специальный файл, которые во многих ОС по традиции продолжают называть областью, или файлом свопинга, хотя перемещение информации между оперативной памятью и диском осуществляется уже не в форме полного замещения одного процесса другим, а частями. Другое популярное название этой области — страничный файл (page file, или paging file). Текущий размер страничного файла является важным параметром, оказывающим влияние на возможности операционной системы: чем больше страничный файл, тем больше приложений может одновременно выполнять ОС (при фиксированном размере оперативной памяти). Однако необходимо понимать, что увеличение числа одновременно работающих приложений за счет увеличения размера страничного файла замедляет их работу, так как значительная часть времени при этом тратится на перекачку кодов и данных из оперативной памяти на диск и обратно. Размер страничного файла в современных ОС является настраиваемым параметром, который выбирается администратором системы для достижения компромисса между уровнем мультипрограммирования и быстродействием системы.

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

Вся оперативная память машины также делится на части такого же размера, называемые физическими страницами (или блоками, или кадрами). Размер страницы выбирается равным степени двойки: 512, 1024, 4096 байт и т. д. Это позволяет упростить механизм преобразования адресов.

Рис. 5.12. Страничное распределение памяти

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

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

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

признак присутствия, устанавливаемый в единицу, если виртуальная страница находится в оперативной памяти;

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

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

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

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

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

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

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

Виртуальный адрес при страничном распределении может быть представлен в виде пары (р, sv), где р — порядковый номер виртуальной страницы процесса (нумерация страниц начинается с 0), a sv — смещение в пределах виртуальной страницы. Физический адрес также может быть представлен в виде пары (n, sf), где n — номер физической страницы, a sf — смещение в пределах физической страницы. Задача подсистемы виртуальной памяти состоит в отображении (р, sv) в (n, sf).

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

Первое из них состоит в том, что объем страницы выбирается равным степени двойки — 2 k . Из этого следует, что смещение s может быть получено простым отделением k младших разрядов в двоичной записи адреса, а оставшиеся старшие разряды адреса представляют собой двоичную запись номера страницы (при этом неважно, является страница виртуальной или физической). Например, если размер страницы 1 Кбайт (2 10 ), то из двоичной записи адреса 50718 = 101 000 111 0012 можно определить, что он принадлежит странице, номер которой в двоичном выражении равен 102 и смещен относительно ее начала на 1 000 111 0012 байт (рис. 5.13).

Рис. 5.13. Двоичное представление адресов

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

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

Рис. 5.14. При отображении виртуального адреса в физический смещение не изменяется

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

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

1. Из специального регистра процессора извлекается адрес AT таблицы страниц активного процесса. На основании начального адреса таблицы страниц, номера виртуальной страницы р (старшие разряды виртуального адреса) и длины отдельной записи в таблице страниц L (системная константа) определяется адрес нужного дескриптора в таблице страниц: a=AT+(pxL).

2. Из этого дескриптора извлекается номер соответствующей физической страницы — n.

3. К номеру физической страницы присоединяется смещение s (младшие разряды виртуального адреса).

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

Рис. 5.15. Схема преобразования виртуального адреса в физический при страничной организации памяти

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

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

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

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

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

Другим важным резервом повышения производительности системы является правильный выбор размера страницы. Каким же должен быть оптимальный размер страницы? С одной стороны, чтобы уменьшить частоту страничных прерываний, следовало бы увеличивать размер страницы. С другой стороны, если страница велика, то велика и фиктивная область в последней виртуальной странице каждого процесса. Если учесть, что в среднем в каждом процессе фиктивная область составляет половину страницы, то в сумме при большом объеме страницы потери могут составить существенную величину. Из приведенных соображений еледует, что выбор размера страницы является сложной оптимизационной задачей, требующей учета многих факторов. На практике же разработчики ОС и процессоров ограничиваются неким рациональным решением, пригодным для широкого класса вычислительных систем. Типичный размер страницы составляет несколько килобайт, например, наиболее распространенные процессоры х86 и Pentium компании Intel, а также операционные системы, устанавливаемые на этих процессорах, поддерживают страницы размером 4096 байт (4 Кбайт) 1 .

1 Процессор Pentium позволяет использовать также страницы размером до 4 Мбайт одно- ‘ временно со страницами объемом 4 Кбайт.

Размер страницы влияет также на количество записей в таблицах страниц. Чем меньше страница, тем более объемными являются таблицы страниц процессов и тем больше места они занимают в памяти. Учитывая, что в современных процессорах максимальный объем виртуального адресного пространства процесса, как правило, не меньше 4 Гбайт (2 32 ), то при размере страницы 4 Кбайт (2 12 ) и длине записи 4 байта для хранения таблицы страниц может потребоваться 4 Мбайт памяти! Выходом в такой ситуации является хранение в памяти только той части таблицы страниц, которая активно используется в данный период времени — так как сама таблица страниц хранится в таких же страницах физической памяти, что и описываемые ею страницы, то принципиально возможно временно вытеснять часть таблицы страниц из оперативной памяти.

Именно такой результат может быть достигнут путем более сложной структуризации виртуального адресного пространства, при котором все множество виртуальных адресов процесса делится на разделы, а разделы делятся на страницы (рис. 5.16). Все страницы имеют одинаковый размер, а разделы содержат одинаковое количество страниц. Если размер страницы и количество страниц в разделе выбрать равными степени двойки (2 k и 2″ соответственно), то принадлежность виртуального адреса к разделу и странице, а также смещение внутри страницы можно определить очень просто: младшие k двоичных разрядов дают смещение, следующие п разрядов представляют собой номер виртуальной страницы, а оставшиеся старшие разряды (обозначим их количество т) содержат номер раздела.

Для каждого раздела строится собственная таблица страниц. Количество дескрипторов в таблице и их размер подбираются такими, чтобы объем таблицы оказался равным объему страницы. Например, в процессоре Pentium при размере страницы 4 Кбайт длина дескриптора страницы составляет 4 байта и количество записей в таблице страниц, помещающейся на страницу, равняется соответственно 1024. Каждая таблица страниц описывается дескриптором, структура которого полностью совпадает со структурой дескриптора обычной страницы. Эти дескрипторы сведены в таблицу разделов, называемую также каталогом страниц. Физический адрес таблицы разделов активного процесса содержится в специальном регистре процессора и поэтому всегда известен операционной системе. Страница, содержащая таблицу разделов, никогда не выгружается из памяти, в противном случае работа виртуальной памяти была бы невозможна.

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

Рис. 5.16. Структура виртуального адресного пространства с разделами

Проследим более подробно схему преобразования адресов для случая двухуровневой структуризации виртуального адресного пространства (рис. 5.17).:

1. Путем отбрасывания k+n младших разрядов в виртуальном адресе определяется номер раздела, к которому принадлежит данный виртуальный адрес.

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

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

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

Рис. 5.17. Схема преобразования виртуального адреса для двухуровневой структуризации адресного пространства

Страничное распределение памяти может быть реализовано в упрощенном варианте, без выгрузки страниц на диск. В этом случае все виртуальные страницы всех процессов постоянно находятся в оперативной памяти. Такой вариант страничной организации хотя и не предоставляет пользователю преимуществ работы с виртуальной памятью большого объема, но сохраняет другое достоинство страничной организации — позволяет успешно бороться с фрагментацией физической памяти. Действительно, во-первых, программу можно разбить на части и загрузить в разрозненные участки свободной памяти, во-вторых, при загрузке виртуальных страниц никогда не образуется неиспользуемых остатков, так как размеры виртуальных и физических страниц совпадают. Такой режим работы системы управления памятью используется в некоторых специализированных ОС, когда требуется высокая реактивность системы и способность выполнять переменный набор приложений (пример — ОС семейства Novell NetWare 3.x и 4.x).

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

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

Итак, виртуальное адресное пространство процесса делится на части — сегменты, размер которых определяется с учетом смыслового значения содержащейся в них информации. Отдельный сегмент может представлять собой подпрограмму, массив данных и т. п. Деление виртуального адресного пространства на сегменты осуществляется компилятором на основе указаний программиста или по умолчанию, в соответствии с принятыми в системе соглашениями. Максимальный размер сегмента определяется разрядностью виртуального адреса, например при 32-разрядной организации процессора он равен 4 Гбайт. При этом максимально возможное виртуальное адресное пространство процесса представляет собой набор из N виртуальных сегментов, каждый размером по 4 Гбайт. В каждом сегменте виртуальные адреса находятся в диапазоне от 0000000016 до FFFFFFFF16. Сегменты не упорядочиваются друг относительно друга, так что общего для сегментов линейного виртуального адреса не существует, виртуальный адрес задается парой чисел: номером сегмента и линейным виртуальным адресом внутри сегмента.

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

Рис. 5.18. Распределение памяти сегментами

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

На этапе создания процесса во время загрузки его образа в оперативную память система создает таблицу сегментов процесса (аналогичную таблице страниц), в которой для каждого сегмента указывается:

базовый физический адрес сегмента в оперативной памяти;

правила доступа к сегменту;

признаки модификации, присутствия и обращения к данному сегменту, а также некоторая другая информация.

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

Как видно, сегментное распределение памяти имеет очень много общего со страничным распределением.

Механизмы преобразования адресов этих двух способов управления памятью тоже весьма схожи, однако в них имеются и существенные отличия, которые являются следствием того, что сегменты в отличие от страниц имеют произвольный размер. Виртуальный адрес при сегментной организации памяти может быть представлен парой (g, s), где g — номер сегмента, a s — смещение в сегменте. Физический адрес получается путем сложения базового адреса сегмента, который определяется по номеру сегмента g из таблицы сегментов и смещения s (рис. 5.19).

Рис. 5.19. Преобразование виртуального адреса при сегментной организации памяти

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

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

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

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

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

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

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

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

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

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

Рис. 5.20. Два способа сегментации

Для каждого процесса операционная система создает отдельную таблицу сегментов, в которой содержатся описатели (дескрипторы) всех сегментов процесса. Описание сегмента включает назначенные ему права доступа и другие характеристики, подобные тем, которые содержатся в дескрипторах сегментов при сегментной организации памяти. Однако имеется и принципиальное отличие. В поле базового адреса указывается не начальный физический адрес сегмента, отведенный ему в результате загрузки в оперативную память, а начальный линейный виртуальный адрес сегмента в пространстве виртуальных адресов (на рис. 5.20 базовые физические адреса обозначены SI, S2, S3, а базовые виртуальные адреса — fl, f2, f3).

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

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

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

Преобразование виртуального адреса в физический происходит в два этапа (рис. 5.21):

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

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

Рис. 5.21. Преобразование виртуального адреса в физический при сегментно-страничной организации памяти

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

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

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

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

Рис. 5.22. Еще одна схема преобразования виртуального адреса в физический для сегментно-страничной организации памяти

На рис. 5.22 показана схема преобразования виртуального адреса в физический для данного метода.

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

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

3. К номеру физической страницы пристыковывается младшая часть виртуального адреса — смещение.

Разделяемые сегменты памяти

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

Хотя основной задачей операционной системы при управлении памятью является защита областей оперативной памяти, принадлежащей одному из процессов, от доступа к ней остальных процессов, в некоторых случаях оказывается полезным организовать контролируемый совместный доступ нескольких процессов к определенной области памяти. Например, в том случае, когда несколько пользователей одновременно работают с некоторым текстовым редактором, нецелесообразно многократно загружать его код в оперативную память. Гораздо экономичней загрузить всего одну копию кода, которая обслуживала бы всех пользователей, работающих в данное время с этим редактором (для этого код редактора должен быть реентерабельным). Очевидно, что сегмент данных редактора не может присутствовать в памяти в единственном разделяемом экземпляре — для каждого пользователя должна быть создана своя копия этого сегмента, в которой помещается редактируемый текст и значения других переменных редактора, например его конфигурация, индивидуальная для каждого пользователя, и т. п.

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

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

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

Рис. 5.23. Два способа создания разделяемого сегмента памяти

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

При работе с разделяемыми сегментами памяти ОС должна выполнять некоторые функции, общие для любых разделяемых между процессами ресурсов — файлов, семафоров и т. п. Эти функции состоят в поддержке схемы именования ресурсов, проверке прав доступа определенного процесса к ресурсу, а также в отслеживании количества процессов, пользующихся данным ресурсом (чтобы удалить его в случае ненадобности). Для того чтобы отличать разделяемые сегменты памяти от индивидуальных, дескриптор сегмента должен содержать поле, имеющее два значения: shared (разделяемый) или private (индивидуальный).

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

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

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

Иерархия запоминающих устройств

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

На следующем уровне располагается более быстродействующая (время доступа 1 равно примерно 10-20 наносекундам) и менее объемная (от десятков мегабайт до нескольких гигабайт) оперативная память, реализуемая на относительно медленной динамической памяти DRAM.

Для хранения данных, к которым необходимо обеспечить быстрый доступ, используются компактные быстродействующие запоминающие устройства на основе статической памяти SRAM, объем которых составляет от нескольких десятков до нескольких сотен килобайт, а время доступа к данным обычно не превышает 8 нс.

1 Все перечисленные характеристики ЗУ быстро изменяются по мере совершенствования вычислительной аппаратуры. В данном случае важны не абсолютные значения времени доступа или объема памяти, а их соотношение для разных типов Запоминающих устройств.

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

Рис. 5.24. Иерархия запоминающих устройств

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

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

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

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

Оно стоит дороже и, как правило, имеет сравнительно небольшой объем. «Медленное» ЗУ далее будем называть основной памятью, противопоставляя ее вспомогательной кэш-памяти.

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

Принцип действия кэш-памяти

Рассмотрим одну из возможных схем кэширования (рис. 5.25). Содержимое кэш-памяти представляет собой совокупность записей обо всех загруженных в нее элементах данных из основной памяти. Каждая запись об элементе данных включает в себя:

значение элемента данных;

адрес, который этот элемент данных имеет в основной памяти;

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

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

если данные обнаруживаются в кэш-памяти, то есть произошло кэш-попадание (cache-hit), они считываются из нее и результат передается источнику запроса;

если нужные данные отсутствуют в кэш-памяти, то есть произошел кэш-промах (cache-miss), они считываются из основной памяти, передаются источнику запроса и одновременно с этим копируются в кэш-память.

Рис. 5.25. Схема функционирования кэш-памяти

Интуитивно понятно, что эффективность кэширования зависит от вероятности попадания в кэш. Покажем это путем нахождения зависимости среднего времени доступа к основной памяти от вероятности кэш-попаданий. Пусть имеется основное запоминающее устройство со средним временем доступа к данным tl и кэш-память, имеющая время доступа t2, очевидно, что t2<tl. Пусть t — среднее время доступа к данным в системе с кэш-памятью, ар — вероятность кэш-попадания. По формуле полной вероятности имеем:

Среднее время доступа к данным в системе с кэш-памятью линейно зависит от вероятности попадания в кэш и изменяется от среднего времени доступа в основное запоминающее устройство t1 при р=0 до среднего времени доступа непосредственно в кэш-память t2 при р=1. Отсюда видно, что использование кэш-памяти имеет смысл только при высокой вероятности кэш-попадания.

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

Временная локальность. Если произошло обращение по некоторому адресу, то следующее обращение по тому же адресу с большой вероятностью произойдет в ближайшее время.

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

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

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

Проблема согласования данных

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

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

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

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

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

Способы отображения основной памяти на кэш

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

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

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

Рис. 5.26. Ассоциативный поиск в кэше со случайным отображением

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

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

1 В действительности запись в кэше обычно содержит несколько элементов данных.

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

Рис. 5.27. Прямое отображение

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

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

Рис. 5.28. Комбинирование прямого и случайного отображения

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

Схемы выполнения запросов в системах с кэш-памятью

На рис. 5.29 приведена обобщенная схема работы кэш-памяти. Большая часть ветвей этой схемы уже была подробно рассмотрена выше, поэтому остановимся здесь только на некоторых особых случаях.

Рис. 5.29. Схема выполнения запроса к памяти в системе, использующей кэширование

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

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

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

Рис. 5.30. Двухуровневое кэширование

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

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

Рис. 5.31. Схема выполнения запроса на чтение в системе с двухуровневым кэшем

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

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

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

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

Рис. 5.32. Схема выполнения запроса на запись в системе с двухуровневым кэшем

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

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

Функциями ОС по управлению памятью в мультипрограммной системе являются:

отслеживание наличия свободной и занятой памяти;

выделение памяти процессам и освобождение памяти при завершении процессов;

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

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

защита памяти процессов от взаимного вмешательства.

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

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

Виртуальное адресное пространство может быть плоским (линейным) или структурированным.

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

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

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

Виртуальная память использует дисковую память для временного хранения не помещающихся в оперативную память данных и кодов выполняемых процессов ОС.

В настоящее время все множество реализаций виртуальной памяти может быть представлено тремя классами:

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

сегментная виртуальная память предусматривает перемещение данных сегментами — частями виртуального адресного пространства произвольного размера, полученными с учетом смыслового значения данных (достоинства — «осмысленность» сегментов упрощает их защиту; недостатки — медленное преобразование адреса, высокий уровень фрагментации);

сегментно-страничная виртуальная память сочетает достоинства обоих предыдущих подходов.

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

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

Каждая запись в кэш-памяти об элементе данных включает в себя:

значение элемента данных;

адрес, который этот элемент данных имеет в основной памяти;

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

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

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

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

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

Задачи и упражнения

1. Чем ограничивается максимальный размер физической памяти, которую можно установить в компьютере определенной модели?

2. Чем ограничивается максимальный размер виртуального адресного пространства, доступного приложению?

3. Может ли прикладной процесс использовать системную часть виртуальной памяти?

4. Какое из этих двух утверждений верно?

А) все виртуальные адреса заменяются на физические во время загрузки программы в оперативную память;

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

5. В каких случаях транслятор создает объектный код программы не в виртуальных, а в физических адресах?

6. Что такое виртуальная память? Какой из следующих методов распределения памяти может рассматриваться как частный случай виртуальной памяти?

А) распределение фиксированными разделами;

В) распределение динамическими разделами;

С) страничное распределение;

D) сегментное распределение;

Е) сегментно-страничное распределение.

7. Распределение памяти перемещаемыми разделами основано на применении процедуры сжатия. Имеет ли смысл использовать данную процедуру при страничном распределении? А при сегментном?

8. Поясните разные значения термина «свопинг».

9. Как величина файла подкачки влияет на производительность системы?

10. Почему размер страницы выбирается равным степени двойки? Можно ли принять такое же ограничение для сегмента?

11. На что влияет размер страницы? Каковы преимущества и недостатки большого размера страницы?

12. Пусть в некоторой программе, работающей в системе со страничной организацией памяти, произошло обращение по виртуальному адресу 012356s. Преобразуйте этот адрес в физический, учитывая, что размер страницы равен 2 14 байт и что таблица страниц данного процесса содержит следующий фрагмент:

Номер виртуальной страницы

Номер физической страницы

13. Где хранятся таблицы страниц и таблицы сегментов?

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

15. Какие характеристики содержит таблица сегментов и таблица страниц при сегментно-страничной организации памяти?

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

17. В кэше хранятся данные, которые наиболее активно используются в последнее время. Каким образом система определяет, какие данные должны быть загружены в кэш?

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

А) выгружаются данные, которые не использовались дольше остальных;

В) выгружаются данные, выбранные случайным образом.

19. Почему загрузка и выгрузка данных из кэш-памяти производится блоками?

20. Как обеспечивается согласование данных в кэше с помощью методов обратной и сквозной записи?

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

Как использовать оперативную память для видеокарты

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

Что такое VRAM

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

Видеопамять предназначена для специальной обработки видео высокой интенсивности быстрее, чем оперативная память системы. Графические карты или графический процессор используют видеопамять (VRAM), встроенную в нее для хранения изображений и видеоданных. VRAM также называется виртуальной оперативной памятью и используется как память GPU для легкой обработки графических приложений, игр, сложных текстур и 3D-графики.

В последних игр и видео, может потребоваться воспроизведение видео с разрешением 1080p или 4k, которое требует большого количества VRAM. Кроме того, VRAM обрабатывает больше пикселей для изображений с более высоким разрешением, чтобы отображать их лучше. При этом современные игры требуют более подробной детализации и точных системных требований для их запуска на вашем мониторе, а наличие недостаточного количества VRAM приведет к большой перегрузке графического процессора.

Если у вас недостаточно VRAM, вы не сможете запускать современные игры. В таком случае вам потребуется графическая карта с большими характеристиками, чтобы легко загружать сложные текстуры с изображениями в высоком разрешении.

Проверить количество VRAM на видеокарте

Шаг 1. Откройте "Параметры" > "Система" > "Дисплей" и справа выберите "Дополнительные параметры дисплея".

Шаг 2. В новом окне выберите "Свойства видеоадаптера для дисплея".

Шаг 3. В новом окне вы увидите тип адаптера, используемый в вашей системе, и другую графическую информацию на вкладке "Адаптер". Запомните её или сделайте скриншот , чтобы сравнить память после увеличения.

Как увеличить Video RAM из BIOS

Это рекомендуемый метод перераспределения VRAM. Однако это не работает на всех материнских платах, и вам не разрешается перераспределять память на вашем ПК самостоятельно. Тем не менее, вы можете попробовать изменить настройки BIOS и проверить, есть ли у вас достаточно прав для изменения объема выделенной видеопамяти на вашем ПК.

Шаг 1. Перезагрузите ПК, ноутбук и войдите в BIOS, нажимая — F2 или клавишу Del во время загрузки. Можете посмотреть, как зайти в BIOS от разных производителей материнских плат. В BIOS вам нужно перейти Advanced > video/Graphics settings или VGA Share Memory Size или UMA Frame Buffer Size или Share Memory и выбрать значение. Ниже на картинках я привел два примера, первый — это мой UEFI Asrock на ПК, а второй — это старый ноутбук BENQ с обычным BIOS.

Вы должны понимать, что параметры BIOS у всех разные, и иногда в БИОСах есть расширенные настройки, которые по умолчанию не показывают всех параметров. Воспользуйтесь Google или Yandex "поиск по картинкам", вбив туда модель материнской платы.

Шаг 2. Как только вы выбрали значение, которое вам нужно, обязательно сохраните параметры БИОС, нажав F10.


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

Из этой статьи мы узнаем, как увеличить объем памяти, выделяемой интегрированной видеокарте.

Увеличиваем память видеокарты

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

В свою очередь, встроенные карты используют так называемую Shared memory, то есть ту, которой система с ней «делится». Размер выделенного места в оперативке определяется типом чипа и материнской платы, а также настройками БИОС.

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

    Нажимаем сочетание клавиш WIN+R и в поле ввода окна «Выполнить» пишем команду dxdiag.


Откроется панель диагностики DirectX, где нужно перейти на вкладку «Экран». Здесь мы видим всю необходимую информацию: модель графического процессора и объем видеопамяти.


Поскольку не обо всех видеочипах, особенно старых, можно легко отыскать информацию на официальных сайтах, то воспользуемся поисковой системой. Вводим запрос вида «intel gma 3100 характеристики» или «intel gma 3100 спецификация».

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

Идем дальше. Если «Средство диагностики DirectX» показывает объем памяти, отличный от максимального, то существует возможность, изменив настройки БИОС, добавить размер выделенного места в ОЗУ. Доступ к настройкам материнской платы можно получить при загрузке системы. Во время появления логотипа производителя необходимо несколько раз нажать на клавишу DELETE. Если этот вариант не сработал, то почитайте мануал к материнке, возможно, в вашем случае используется другая кнопка или комбинация.

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

Для БИОСов типа AMI нужно перейти на вкладку c названием «Advanced» с возможными дописками, например, «Advanced BIOS Features» и найти там пункт, где имеется возможность выбрать значение, определяющее объем памяти. В нашем случае это «UMA Frame Buffer Size». Здесь просто выбираем нужный размер и сохраняем настройки клавишей F10.

В UEFI БИОСах необходимо вначале включить расширенный режим. Рассмотрим пример с BIOS материнской платы ASUS.

    Здесь также нужно перейти на вкладку «Дополнительно» и выбрать раздел «Конфигурация системного агента».


Далее ищем пункт «Параметры графики».


Напротив параметра «Память iGPU» меняем значение на нужное.

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

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

Отблагодарите автора, поделитесь статьей в социальных сетях.

Как задействовать всю видеопамять на windows 7. Как добавить видеопамять из оперативной?

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

Какова роль видеопамяти в системе

Наверное, нет нужды говорить о том, что память графического адаптера в чем-то очень сильно напоминает основную оперативную память компьютерной системы.

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

Определяем тип графического адаптера

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

Они бывают двух типов: интегрированные (встроенные в материнскую плату) и дискретные (вставляемые в специальные слоты).

Визуально интегрированный адаптер можно определить по наличию рядом находящихся разъемов HDMI, USB, LAN и т.д.

Получить более подробную информацию можно в «Диспетчере устройств», вызвав его либо из «Панели управления», либо из консоли «Выполнить» (Win +R) командой devmgmt.msc.

Однако наиболее полные данные содержатся в диалоговом окне DirectX, вызываемом из меню «Выполнить» строкой dxdiag. На вкладке «Экран» и будет представлена вся информация. Кстати сказать, узнать основные характеристики интегрированных видеоадаптеров можно только таким способом.

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

Для начала рассмотрим вопрос того, как увеличить видеопамять дискретной видеокарты. В идеале, конечно, проще всего купить новую, однако современные адаптеры стоят весьма недешево, поэтому лучше заняться настройкой имеющегося в наличии.

Исходя из того, что сегодня на рынке предлагаются в основном чипы NVIDIA и AMD/ATI, стоит использовать сопутствующее программное обеспечение, которое поставляется в предустановленном виде при покупке ПК или ноутбука.

Также для Windows-систем в плане улучшения производительности прекрасно подойдут утилиты вроде ATITool или MSI Afterburner, которые позволяют постепенно увеличивать тактовую частоту графического процессора, оставляя показатель памяти без изменений.

Кроме того, можно использовать и программы вроде Catalyst, PhysX или Riva Tuner, способные оптимизировать память видеочипа для использования в определенных играх или других приложениях, высвобождая ресурсы.

Настройки буфера кадра

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

Просмотреть параметры выделенной памяти можно через «Диспетчер устройств», где из меню правого клика нужно выбрать свойства и перейти к вкладке "Драйвера". Здесь имеется строка параметров кадрового буфера UMA, где и находится требуемое значение. Но такого пункта может и не быть, поэтому вопрос о том, как увеличить видеопамять, должен решаться другим методом. Каким? Настройками BIOS, которые предполагают изменение распределяемой динамической памяти.

Как увеличить видеопамять за счет оперативной (распределяемой) через BIOS

В первичной системе ввода/вывода, которая вызывается нажатием определенных клавиш, из сочетаний или специальных кнопок, нужно найти раздел наподобие Video RAM или Shared Memory.

Как увеличить видеопамять с применением таких настроек? Для улучшения производительности изменяется параметр апертуры, обозначенный как AGP OverVoltage. При этом нужно помнить, что прирост рассчитывается по определенной формуле. Для примера возьмем 16 Мб памяти интегрированного адаптера и 256 Мб основной оперативной памяти. Результат составит 256 Мб/(16 Мб/2)=32 Мб. А вот и интересный парадокс. Для ОЗУ 256 Мб и памяти адаптера 64 Мб увеличение будет 256 Мб/(64 Мб/2)=8 Мб.

В настройках VGA Shared Memory (он же буфер UMA) нужно установить требуемый параметр, однако выставлять максимальное значение не рекомендуется. Оптимальным вариантом считается установка значения, которое только вдвое превышает установленное по умолчанию.

Стоит ли этим заниматься

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

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

Какие бывают видеокарты

Например, невидимая для пользователя, встроенная в материнскую плату видеокарта называется интегрированной. Дискретная — это внешняя видеокарта.

Интегрированная видеокарта отвечает за изображения на экране нашего компьютера. Собственной памятью она не обладает и заимствует ее у оперативной. Такая память довольно слабая и не выдерживает современный трафик. Но геймеры нашли выход. Рассмотрим, как увеличить память встроенной видеокарты. Для увеличения памяти нужно беспрерывно нажимать клавишу Delete. В появившемся на экране меню необходимо выбрать Video Ram. Потом следует навести курсор мыши на эту строку и нажать Enter. Выберите необходимый для увеличения объем. Затем сохраните настройки. После перезагрузки компьютера память увеличится. Если после проделанных действий память не изменилась, то лучше вернуть прежний объем таким же путем. Но стоит помнить, что данная функция будет бесполезной, если оперативная память вашего компьютера мала. Помимо зря потраченного времени и усилий, данное действие ухудшит работу системы.

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

Увеличиваем объём

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

Такими же свойствами и высокой производительностью насыщен гибрид SLI. Он содержит в себе и дискретную, и интегрированную видеокарту. Пользователь сам выбирает, какой из карт ему воспользоваться. Если предстоит несложная работа со стандартными программами, то используется интегрированная карта, которая сэкономит длительность заряда аккумулятора. А если пользователь решил поиграть в современную 3D игру, то нужно включить дискретную.

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

Надеемся, что в будущем у Вас больше не будет возникать вопросов о том, как увеличить память видеокарты.

Проверьте полный объем памяти, выделенный видеокарте. Для этого запустите встроенную в windows утилиту dxdiag, перейдите на вкладку "Экран" и найдите на ней значение "всего памяти". Это значение и есть полный объем памяти, который может использовать видеокарта — сумма объемов встроенной памяти и выделяемой из оперативной памяти компьютера. Если вас не устраивает это значение — можно попытаться его изменить.

Запустите "Панель управления" вашей видеокарты. На панели слева найдите пункт меню "Буфер кадров UMA". Название может различаться в зависимости от модели видеокарты. Установите ползунок в максимальное значение. Если в "Панели управления" видеокарты нет подобного меню, можно попытаться изменить объем выделяемой видеопамяти через BIOS.

Войдите в BIOS компьютера или ноутбука. Для этого сразу после включения компьютера нажмите и удерживайте клавишу "Del" на клавиатуре. Если загрузка продолжается как обычно, попробуйте клавиши клавиши "F2" и "Esc". В случае, если в BIOS зайти не удалось, обратитесь к документации, поставляемой вместе с устройством, т.к. клавиши, зарезервированные для входа в BIOS, могут различаться в зависимости от модели компьютера.

Теперь необходимо найти параметр, отвечающий за объем оперативной памяти, выделяемый для работы видеокарты. В зависимости от модели компьютера, он может называться: "BIOS VGA sharing memory", "VGA memory", "Video memory", "AGP Aperture Size". Так же возможны другие названия. Отсутствие таких или похожих пунктов меню в BIOS может означать, что ваша материнская плата не поддерживает установку максимального объема выделяемой видеопамяти. В этом случае видеопамять выделяется автоматически, по мере необходимости.

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

Сразу же стоит оговориться, что увеличение показателей встроенной видеокарты практически невозможно. Общую частоту работы можно увеличить в настройках BIOS, перейдя в раздел интегрированных устройств. Стоит отметить, что большую производительность даст связка «интегрированная видеоплата + процессор с графической начинкой». Такие процессоры чаще выпускаются компанией Intel.

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

Определите текущий объем памяти, используемый видеокарт ой. Запустите утилиту диагностики DirectX. Для этого нажмите на клавиатуре сочетание клавиш Win+R, в открывшемся диалоге введите строку dxdiag и нажмите Enter. Перейдите на вкладку «Экран». Найдите строку «всего памяти». Цифры напротив нее означают полный объем памяти (собственной и системной), которую видеокарт а использует для своих нужд. Если это значение недостаточно, можно попробовать его увеличить.

Для увеличения объема системной памяти, выделяемой для работы видеокарт ы, откройте утилиту настройки ATI Catalist Control Center. Найдите значение «Буфер кадров UMA». Установите максимально возможное значение. В драйверах от nVidia подобной настройки нет, память выделяется автоматически. Единственный способ изменить его — увеличить количество системной памяти компьютера, что вызовет увеличение объема памяти, выделяемой видеокарт е.

Разгон не является методом увеличения объема памяти видеокарт ы, но может значительно увеличить скорость ее работы. Для того чтобы разогнать железо, необходимо воспользоваться соответствующими утилитами. Для ATI это ATI Tray Tools, а для nVidia лучшей программой является RivaTuner. Форсированному ускорителю трехмерной графики наверняка потребуется более мощное охлаждение, т.к. его тепловыделение возрастет. Необходимо контролировать температуру чипа, его перегрев может привести к необратимому повреждению видеокарт ы.

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

  • Компьютер, видеокарта, программа ATItool

Если у вас интегрированная видеокарта , увеличить количество памяти можно в БИОС. Учтите тот факт, что интегрированные видеокарты вообще не обладают собственной памятью и все ресурсы берут из оперативной памяти. Если

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

Как обновить карту?

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

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

Почему нет, и что скажет профи?

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

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

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

Отличие новых от старых

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

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

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

Одно за счет другого

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

Попробуем пошагово реализовать намерение увеличить оперативную память ноутбука или компьютера.

  • Шаг под номером один. Берем свой ноутбук и отправляемся в магазин, продавцу объясняем, что хотим поставить новый слот памяти.

  • Шаг второй. Без особого фанатизма вставляем в слот модуль, если выбираем память второго поколения, а он не вставляется, значит, у техники память третьего поколения. ПомниМ: при присоединении оперативки не стоит усердствовать, ибо можно повредить устройство!
  • И третий шаг. Если мы перепробовали все модули, что показал продавец, то нас можно поздравить — мы обладаем довольно редкой энергосберегающей оперативкой (1,35 вольт). В обычных ноутбуках оперативная память рассчитана на полтора вольта.

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

Все способы, иных нет

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

Читать:
Как вывести компьютер из домена

Похожие статьи