Весьма важным вопросом при разработке является выбор размера страниц — здесь следует учесть сразу несколько факторов. Один из них — внутренняя фрагментация. Понятно, что внутренняя фрагментация, которую желательно уменьшить для оптимизации использования основной памяти, находится в прямой зависимости от размера страницы. С другой стороны, чем меньше размер страниц, тем больше их требуется для процесса, что означает увеличение таблицы страниц. Для больших программ в загруженной многозадачной средеэто можетозначать, что часть таблиц страниц активных процессов будет находиться в виртуальной памяти и при обращении к памяти будет возникать двойное прерывание из-за отсутствия страницы: сперва при получении требуемой записи из таблицы страниц, а затем — при обращении к странице процесса. Еще одним фактором, который следует учесть, являются физические характеристики большинства устройств вторичной памяти, приводящие к тому, что передача больших блоков осуществляется более эффективно.
Вопрос усложняется еще и тем, что на частоту возникновения прерывания из-за отсутствия страницы в основной памяти влияет размер страницы. На рис. 8.11,а показано обычное поведение частоты возникновения прерываний из-за отсутствия страницы с учетом принципа локализации. Если размер страницы очень мал, то в памяти размещается относительно большое количество страниц процесса. Через некоторое время страницы в памяти будут содержать части процесса, сосредоточенные вблизи последних обращений, и частота возникновения прерывания из-за отсутствия страницы должна быть невелика.По мере увеличения размера страницы каждая отдельная страница будет содержать данные, которые располагаются все дальше и дальше от последних выполненных обращений к памяти. Соответственно, действие принципа локализации ослабевает, и наблюдается рост количества прерываний из-за отсутствия страницы. В конце концов, когда размер страницы начинает становиться сравнимым с размером процесса (точка Р на графике), прерывания из-за отсутствия страницы становятся все реже, а по достижении размера этого процесса прекращаются вовсе.
Следует учитывать также влияние количества кадров, распределенных процессу. На рис. 8.11,6 показано, что для фиксированного размера страницы частота возникновения прерываний из-за отсутствия страницы уменьшается с ростом числа страниц, находящихся в основной памяти. Таким образом, на программную стратегию (объем памяти, выделяемой процессу) влияет аппаратное решение (размер страницы).
В табл. 8.2 приведены размеры страниц на разных машинах.
Таблица 8.2. Примеры размеров страниц
Компьютер
Размер страницы
Atlas
512 48-битовых слов
Honeywell-Multics
1024 36-битовых слова
IBM 370/ХА и 370/ESA
4 Кбайт
Семейство VAX
512 байт
IBM AS/400
512 байт
DEC Alpha
8 Кбайт
MIPS
от 4 Кбайт до 16 Мбайт
UltraSPARC
от 8 Кбайт до 4 Мбайт
Pentium
от 4 Кбайт до 4 Мбайт
PowerPC
4 Кбайт
И, наконец, решениеоб используемом размере страниц связано с размером физической основной памяти и размером программы. Ведь растет не только объем основной памяти в компьютерах, но и адресное пространство, используемое приложениями. Эта тенденция наиболее заметна в персональных компьютерах и рабочих станциях, где особенно резко проявляется увеличение размеров и возрастание сложности используемых приложений. Кроме того, современные технологии программирования, используемые в больших программах, приводят к снижению локализации ссылок процесса [HUCK93]. В качестве примеров можно привести следующие:
· Объектно-ориентированные технологии, стимулирующие использование множества мелких модулей кода и данных с обращениями к большому количеству объектов за относительно короткое время.
· Многопоточные приложения, приводящие к внезапным изменениям в потоке команд и обращениям к памяти, разбросанным по разным адресам.
Результативность поиска в TLB определенного размера с ростом размера процессов и уменьшением локализации снижается. При таком положении дел TLB может стать узким местом, ограничивающим производительность [CHEN92].
Один из способов повышения производительности TLB — использование большого TLB с большим количеством записей. Однако увеличение размера TLB связано с другими аспектами аппаратного решения вопросов обращения к памяти — такими, как размер кэша основной памяти и количество обращений к памяти при выполнении одной команды [TALL92], что заставляет сделать вывод о невозможности роста размера TLB такими же темпами, как и увеличение размера основной памяти. Альтернативой может быть использование больших размеров страниц с тем, чтобы каждая запись в TLB ссылалась на большой блок памяти. Однако мы уже видели, что использование больших размеров страниц может привести к потере производительности.
Учитывая обстоятельства, рассмотренные нами ранее, ряд разработчиков пришли к использованию множественных размеров страниц [TALL92, KHAL93], и некоторые из микропроцессоров, такие, как MIPS R4000, Alpha, UltraSPARC и Pentium, поддерживают эту методику. Множественные размеры страниц обеспечивают необходимую для эффективного использования TLB гибкость. Большие непрерывные области адресного пространства процесса, например программный код, могут отображаться с использованием небольшого количества больших страниц, в то время как стеки потоков могут использовать для отображения страницы малого размера. Однако большинство коммерческих операционных систем все еще поддерживают только один размер страниц, независимо от способности аппаратного обеспечения работать со страницами разного размера. Причина этого отставания в том, что с размером страниц связано большое количество разнообразных аспектов операционных систем, и переход на множественный размер страниц оказывается очень сложным[GANA98].