Ускорение загрузки программ

   В Windows 98 программа дефрагментации умеет собирать в одно место файлы, которые требуются программам при их загрузке и размещать сами файлы программ на диске таким образом, чтобы ускорить их загрузку. То есть после проведения такой дефрагментации вы заметите, что программы, например редактор Word, стали загружаться быстрее (естественно, после повторной дефрагментации дополнительного ускорения вы не получите).
   За счет чего же получается ускорение? За счет (страшно сказать!) фрагментации программных файлов. Да-да, именно той самой фрагментации, которой все боятся как огня. Рассмотрим этот вопрос подробнее.
   Когда-то давно все программы были маленькими, полностью помещались в оперативной памяти, и при запуске программы она целиком считывалась в память и только потом запускалась. Но размеры программ все росли, росла потребность в памяти, и чтобы обойти затруднение, программы стали делать из нескольких модулей, так называемых оверлеев. При этом в память сначала загружается небольшой участок программы, который выполняет свою работу, затем загружает другой участок кода. Тот, в свою очередь, может вызвать первый модуль или обратиться к другому и так далее. Или же основной модуль находится в памяти постоянно и подгружает дополнительные модули, требующиеся в данный момент. Для текстового редактора это могут быть, например, модуль расстановки переносов, форматирования страницы, печати, проверки орфографии и т.п.
   С увеличением оперативной памяти компьютеров и появлением виртуальной памяти, доступной программам, выгрузку на диск неиспользуемых частей кода взяла на себя операционная система. Часто в этой выгрузке вообще не возникает потребности в связи с резко увеличившимся за последнее время объемом оперативной памяти компьютеров. Но программы по-прежнему пишутся из модулей (по множеству причин), и эти модули расположены в файле в том порядке, как их поставит программа-компилятор, вне всякой связи с тем, в каком порядке они будут обрабатываться в памяти.
   Рассмотрим конкретный пример: программу проверки системного реестра Scanregw.exe. В русской версии Windows 98 она имеет размер 86016 байт и на диске с 16-килобайтными кластерами занимает 6 кластеров. После обычной дефрагментации все эти кластеры будут расположены в одном месте диска строго друг за другом в порядке возрастания номеров. Допустим, для простоты, что вся программа разместилась на одной дорожке и заняла ее полностью, а скорость вращения диска составляет шесть тысяч оборотов в минуту, что примерно соответствует параметрам современных жестких дисков. Если бы программа считывалась в память строго последовательно, так как и записана на диск, то она была бы загружена в память не более чем за один оборот диска, то есть менее чем за 10 мсек. Однако, в реальности картина загрузки иная (на компьютере автора, у вас порядок размещения может быть иным). Сначала считывается первый кластер, затем требуется программный код, хранящийся в пятом кластере. Возникает пауза в загрузке, пока под головками пройдут второй, третий и четвертый кластер, то есть задержка в нашем примере составит примерно 5 мсек. Но после пятого кластера требуется не шестой, а третий, который прошел под головками совсем недавно. Приходится ждать еще 7 мсек. После третьего кластера без потери времени считывается четвертый, а затем проходит еще 7 мсек в ожидании второго кластера. На этом загрузка заканчивается, поскольку программный код из шестого кластера так и не понадобился. Время загрузки по сравнению с идеальным выросло почти в три раза.
   При включенном переразмещении программных файлов программа дефрагментации запишет такой файл в следующем порядке: первый кластер, затем пятый, третий, четвертый, второй и шестой. Файл будет считан в память за один оборот диска, а не за три, но обычные программы дефрагментации и даже программа CHKDSK из состава Windows 98 заявят (и формально будут правы) что файл занимает на диске пять несмежных областей.
   Реальная картина, конечно, значительно сложнее, но факт остается фактом - разумная фрагментация ускоряет запуск программ.

На главную страничку