Linux Kernel (Ядро линукса) (часть 3)


Подкачка

Подкачка была введена для предоставления дисковых образов неотображен- ным страницам. Из предшествующего обсуждения мы знаем, что есть три типа страниц, с которыми имеет дело подсистема подкачки:
- страницы, принадлежащие анонимной области памяти процесса (стек или куча режима пользователя);
- грязные страницы, принадлежащие закрытому отображению в память файла данного процесса;
- страницы, принадлежащие области памяти, совместно используемой при межпроцессном взаимодействии Подобно выделению страниц по требованию, подкачка должна проходить прозрачно для программ. Иными словами, в код программы не нужно вставлять какие-то специальные инструкции, относящиеся к подкачке. Чтобы понять, как она выполняется, вспомним главу 2, где говорится, что каждая запись Таблицы Страниц содержит флаг Present. Ядро применяет этот флаг для сигнализации того, что страница, принадлежащая адресному пространству процесса, была выгружена. Кроме этого флага, Linux пользуется оставшимися битами записи Таблицы Страниц для хранения в них идентификатора выгруженной страницы”, кодирующего местоположение выгруженной страницы на диске. Когда возникает исключение ошибка обращения к странице”, соответствующий обработчик исключений может распознать, что страницы нет в оперативной памяти, и вызвать функцию, которая загрузит недостающую страницу с диска.

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

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

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

Предыдущая страница | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 | Следующая страница




Возможно, Вас также заинтересует:

ОС Knoppix - это Linux без про...

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

Linux Kernel (Ядро линукса) (ч...

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

Linux Kernel (Ядро линукса) (ч...

Копирование при записи В системах Unix первых поколений создание процесса было реализовано довольно...

Linux Kernel (Ядро линукса) (ч...

Буферы блоков и головы буферовУ каждого буфера есть дескриптор голова буфера, имеющий тип buffer...