Условие: на винчестере размером раздела А секторов предполагается хранить В файлов. Считая все файлы оставляющими полкластера потерь, определить оптимальный размер кластера в Х секторов для задания команде форматирования FAT32.
Решение: Введём промежуточные величины, характерные для FAT32 и характеризующие системные потери:
Кластерные потери Т=В*Х/2 кластеров
Число секторов в FAT Е
Число секторов данных К=А-1-2*Е
Число кластеров данных У=К/16, поскольку в одном секторе FAT помещается информация об 512/32=16 кластерах данных
Тогда Е=К/(16*Х), и 16*Х*Е=А-1-2*Е, откуда Е=(А-1)/(16*Х+2)
Сумма Т и Е должна быть минимальна, то есть (Т(Х)+Е(Х))`=0
Пренебрегая 1 по сравнению с А и 2 по сравнению с В, получаем
Х -> (А/(8*В))1/2
Проверка: для раздела в 500М (220 секторов) и инсталлированной среднеофисной машины с 500 = 29 файлов (очень немного) Х=2((20-3-9)/2)=8, значит оптимален 4-Кб кластер, что мы и видим на практике (разделы любого размера более 500 М форматируются на 4К)
Для подтверждения статистической гипотезы о том, что файл в среднем "не доедает" половину кластера, был предпринят следующий эксперимент. На стандартный домашний компьютер были проинсталлированы нижеперечисленные программы. После чистки *.doc *.hlp *.chm *.txt *.me *.bbs *.nfo *.fts образ винчестера (раздел 200М, своп на соседнем логическом разделе) был снят при помощи команды dir /s /b /a:-d /o:gn с:\*.* >1.txt в текстовый файл 1.txt, который был благополучно импортирован MS Excel с фискированными ширинами данных.
Командами F1=ЕСЛИ(ЕЧИСЛО(C1);C1;"") (в С1 лежит либо размер файла, либо ненужное значение) и G1=ЕСЛИ(ЕЧИСЛО(C1);4096-ОСТАТ(F1;4096);"") (4096-предполагаемый оптимальный размер кластера) в столбцах F и G были просуммированы размеры файлов и кластерные потери. Расчитывалась зависимость величины кластерных потерь (выраженных в %) от емкости кластера, для чего вместо 4096 подставляли соответственно размеры от 32К до 512 байт. Полученная зависимость строго линейна (ошибка корреляции менее 0,1%), что подтверждает начальную гипотезу.
Проверить ее можно и более брутально, просто расчитывая среднюю величину кластерной потери на файл и сравнивая ее с размером кластера. Эксперимент подтверждает расходимость ряда от величины 50% при уменьшении размера кластера.
Список инсталлированного ПО
Реальные данные
Кусок из файла 1.txt
WINCON SFX 13 905 19.03.99 0:01 WINCONRU SFX 14 111 21.03.99 1:18 WINRAR EXE 479 744 21.03.99 1:16 10 файл(а,ов) 883 386 байт
Содержимое каталога C:\WINDOWS
5631_DIG INI 38 690 14.07.97 17:00> 5631_HWC INI 38 120 14.07.97 17:00 5631_SWC INI 103 445 14.07.97 17:00 A3DSPLSH EXE 122 880 20.03.98 1:21 ASP4CPL EXE 243 712 08.06.98 13:00 ASP4DOS COM 37 151 31.03.98 2:29 ASP4SETP EXE 258 048 08.06.98 12:59 ASP4SETP TMP 258 048 08.06.98 12:59 ASP4TRAY EXE 202 240 08.06.98 13:00 ASPI2HLP SYS 1 105 12.11.96 12:12 CALC EXE 59 392 12.11.96 12:12 CDPLAYER EXE 89 088 12.11.96 12:12
Кусок из файла 1.xls
RAREXT | DLL | 73 728 | 21.03.99 | 1:21 | 73728 | 4096 |
UNRAR | EXE | 97 792 | 21.03.99 | 1:16 | 97792 | 512 |
WINCON | SFX | 13 905 | 19.03.99 | 0:01 | 13905 | 2479 |
WINCONRU | SFX | 14 111 | 21.03.99 | 1:18 | 14111 | 2273 |
WINRAR | EXE | 479 744 | 21.03.99 | 1:16 | 479744 | 3584 |
1 | 0 ф | айл(а,ов) | 883 3 | 86 байт | ||
Содержимо | е к | аталога C:\WIN | DOWS | |||
5631_DIG | INI | 38 690 | 14.07.97 | 17:00 | 38690 | 2270 |
5631_HWC | INI | 38 120 | 14.07.97 | 17:00 | 38120 | 2840 |
5631_SWC | INI | 103 445 | 14.07.97 | 17:00 | 103445 | 3051 |
A3DSPLSH | EXE | 122 880 | 20.03.98 | 1:21 | 122880 | 4096 |
ASP4CPL | EXE | 243 712 | 08.06.98 | 13:00 | 243712 | 2048 |