Реклама:

Если пользовательская программа и данные занимают ровно целое число страниц, то когда они время от времени загружаются в память, свободного места там не остается. В то же время, если они не занимают ровно целое число страниц, на последней странице останется неиспользованное пространство. Например, если программа и данные занимают 26 ООО байт на машине со страницами по 4096 байт, то первые 6 страниц будут заполнены целиком, что в сумме даст 6 х 4096 = 24 576 байт, а последняя страница будет содержать 26 ООО - 24576 = 1424 байта. Поскольку в каждой странице имеется пространство для 4096 байт, 2672 байта останутся свободными. Всякий раз, когда страница 7 будет оказываться в памяти, эти байты останутся неиспользуемыми, бесполезно занимая место в основной памяти. Эта проблема получила название внутренней фрагментации (поскольку неиспользуемое пространство является внутренним по отношению к странице).

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

Больше того, маленькие страницы снижают эффективность использования пропускной способности диска. Поскольку перед началом передачи данных с диска приходится ждать примерно 10 миллисекунд (время поиска плюс задержка вращения), выгодно передать побольше данных. При скорости передачи данных 10 Мбайт/с, передача 8 Кбайт по сравнению с передачей 1 Кбайт добавляет всего 0,7 миллисекунд.

Однако у маленьких страниц есть свои преимущества. Если рабочее множество состоит из большого количества маленьких отделенных друг от друга областей виртуального адресного пространства, то при небольшом размере страницы реже будет возникать пробуксовка (режим интенсивной подкачки), чем при большом. Рассмотрим матрицу А размером 10 ООО х 10 000, которая хранится в последовательных 8-байтных словах (Л[1,1], Л[2,1], Л[3,1] и т. д.). При такой записи элементы строки 1 (Л[1,1], Л[1,2], Л[1,3] и т. д.) будут начинаться на расстоянии 80 000 байт друг от друга. Программе, обрабатывающей элементы этой строки, потребуется 10 000 областей, каждая из которых отделена от следующей величиной 79 992 байт. Если бы размер страницы составлял 8 Кбайт, для хранения всех страниц понадобилось бы 80 Мбайт.

При размере страницы в 1 Кбайт для хранения всех страниц потребуется всего 10 Мбайт ОЗУ. При размере памяти в 32 Мбайт и размере страницы в 8 Кбайт программа войдет в режим интенсивной подкачки, а при размере страницы в 1 Кбайт этого не произойдет.

Политика замещения страниц || Оглавление || Сегментация