Электронная библиотека книг Александра Фролова и Григория Фролова.
Shop2You.ru Создайте свой интернет-магазин
Библиотека
Братьев
Фроловых

MS-DOS для программиста

© Александр Фролов, Григорий Фролов
Том 19, М.: Диалог-МИФИ, 1995, 253 стр.

[Назад] [Содеожание] [Дальше]

6.2. Увеличение быстродействия дисковой памяти

Производительность дисковой системы очень сильно влияет на общую производительность компьютера. После оптимизации дисковой памяти вы с приятным удивлением обнаружите, что многие программы стали работать заметно быстрее. Поэтому мы начнем именно с оптимизации дисковой системы, а затем расскажем о настройке других систем компьютера.

Почему диск работает медленно

Прежде чем приводить рекомендации по увеличению быстродействия дисковой системы, мы расскажем вам об основных причинах, приводящих к замедлению работы дисков. Их может быть несколько:

  • неправильный выбор фактора чередования при форматировании диска на низком уровне;
  • сильная фрагментация файлов;
  • отсутствие буферизации или неправильное использование такой буферизации;
  • отсутствие драйвера кэширования дисковой памяти;
  • нерациональное размещение временных и рабочих файлов.

Каждая из приведенных выше причин сама по себе может привести к замедлению работы дисковой памяти или отдельных программ в несколько раз! А если у вас комбинация нескольких или всех неблагоприятных факторов? В этом случае даже современные быстродействующие накопители будут по скорости напоминать диски первых моделей IBM PC/XT.

Фактор чередования

Начнем с фактора чередования .

Первое, что вам следует сделать с НМД нового компьютера (или с новыми дисками, установленными в старом компьютере) - выполнить низкоуровневую инициализацию или, другими словами, низкоуровневое форматирование . Эта процедура не нужна, если такое форматирование уже выполнено. Как правило, современные компьютеры оборудуются НМД с интерфейсом IDE , низкоуровневая инициализация которых выполняется только на заводе-изготовителе.

Для выполнения низкоуровневой инициализации вы должны запустить специальную программу, находящуюся на дискете, которая поставляется вместе с вашим жестким диском, или соответствующий модуль базовой системы ввода/вывода BIOS.

Ни одна из команд операционной системы MS-DOS не может выполнить низкоуровневую инициализацию жесткого диска. Даже программа format.com не поможет вам в этом. Для инициализации диска на низком уровне вам не обойтись без специально предназначенных для этого программ.

Что делает программа низкоуровневой инициализации?

Как мы уже говорили, блоки данных, записанные на дорожках, содержат служебную информацию. Например, для каждого блока в области служебной информации записывается его порядковый номер, равный номеру соответствующего сектора данных. Эта структура магнитной дорожки формируется во время процедуры низкоуровневого форматирования.

Обратите внимание: низкоуровневое форматирование (или низкоуровневая инициализация , что одно и то же) формирует логическую структуру дорожки. Дорожка разделяется на секторы, для каждого сектора записывается служебная информация. Область данных размером 512 байт обычно заполняется значением 0E6h. Низкоуровневое форматирование выполняется для всех имеющихся дорожек.

Дискеты инициализируются программой format.com . Эта программа выполняет низкоуровневое форматирование только для дискет. Накопители на жестких магнитных дисках форматируются на низком уровне при помощи специальных программ.

Теперь можно перейти к фактору чередования.

Смысл фактора чередования очень прост - он равен количеству оборотов диска, за которое можно последовательно в порядке возрастания номеров секторов прочитать одну дорожку. Если секторы расположены подряд в порядке возрастания номеров, при достаточном быстродействии контроллера диска можно прочитать дорожку за один оборот диска. Если фактор чередования равен двум, потребуется два оборота.

Обычно секторы на дорожке располагаются в порядке возрастания их порядковых номеров. Сначала идет первый сектор, за ним второй и так далее. Предположим теперь, что программа желает прочитать с диска два сектора, имеющих соседние порядковые номера, например, первый и второй.

Во время процедуры чтения контроллер диска устанавливает головки на нужную дорожку и начинает сканировать подряд все секторы для того чтобы найти нужный. В нашем случае этот сектор имеет первый номер. При поиске контроллер пользуется номером сектора, записанным в области служебной информации.

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

Однако пока контроллер записывал данные в память компьютера, пока компьютер выдавал команду на чтение следующего сектора, диск, разумеется, продолжал вращаться! И если производительность контроллера диска недостаточна, к моменту начала чтения второго сектора головка уже может проскочить управляющую запись второго сектора. Поэтому следующий сектор, который обнаружит контроллер, будет иметь номер три.

Теперь контроллер будет ждать, пока диск повернется на один оборот, и только затем он сможет прочитать второй сектор. Таким образом, если программа будет читать несколько секторов с последовательными номерами (а она обычно так и делает) на чтение каждого сектора будет затрачено время, равное времени оборота диска!

Например, если дорожка диска содержит 17 секторов, для чтения всей дорожки потребуется 17 оборотов диска вместо одного.

Как можно улучшить временные характеристики?

Например, можно располагать секторы через один. В таком случае после чтения одного сектора будет достаточно времени для чтения следующего, и вся дорожка может быть считана за 2 оборота диска. Это уже намного лучше.

Описанная выше ситуация встречается особенно часто на малопроизводительных компьютерах IBM PC/XT и IBM PC/AT с контроллером ST506/412 . Поэтому если вы пользуетесь таким компьютером, не упускайте случая увеличить производительность диска в несколько раз.

Если же у вас современный диск с высокопроизводительным контроллером IDE или SCSI , можно забыть про фактор чередования : эти контроллеры обладают достаточным быстродействием.

Кроме того, современные дисковые контроллеры содержат, как правило, быстродействующий электронный буфер, в который синхронно с вращением диска копируется информация, прочитанная с дорожки. Запись информации на диск также выполняется с использованием промежуточного буфера. Поэтому при низкоуровневом форматировании необходимо задавать фактор чередования равным единице - такой контроллер всегда успеет прочитать или записать всю дорожку за один оборот диска.

А что делать, если НМД вашего компьютера уже используется и содержит важные данные, которые вам не хотелось бы терять в результате выполнения низкоуровневого форматирования? Есть выход и из этой ситуации. Существуют программы, позволяющие изменить фактор чередования диска без потерь записанной на нем информации. Это такие программы, как CALIBRAT из пакета Norton Utilities и утилита SPINRITE.

Далее в этой главе мы расскажем о том, как определить в каждом конкретном случае оптимальное значение фактора чередования и оптимизировать диск по этому параметру. А сейчас продолжим перечисление причин, по которым обычно снижается производительность дисковой подсистемы компьютера.

Сдвиг цилиндров

Предположим, ваша программа считывает (или записывает) большой файл, занимающий на диске несколько цилиндров (цилиндром называется совокупность дорожек диска, расположенных друг над другом). Что происходит в тот момент, когда завершается чтение последней дорожки текущего цилиндра? Теперь надо установить головки на нулевую дорожку следующего цилиндра. Очень хорошо, контроллер выдает соответствующую команду, головки устанавливаются на другой цилиндр и начинается поиск первого сектора нулевой дорожки.

Но пока головки перемещались, диск повернулся и головки проскочили мимо первого сектора. Теперь надо ждать, пока диск повернется на один оборот и первый сектор окажется снова напротив блока головок.

Здесь мы неявно предполагали, что все дорожки на всех цилиндрах расположены как бы параллельно, то есть первые секторы на всех дорожках для всех цилиндров располагаются на одинаковом расстоянии от маркера начала дорожки.

Некоторые НМД, в частности, использующие интерфейс ESDI , можно отформатировать "со сдвигом цилиндров" (Cylinder Skew ). В этом случае цилиндры, расположенные ближе к центру, будут сдвинуты вперед по направлению вращения относительно внешних цилиндров. При переходе от одного цилиндра к другому головки успеют как раз к началу следующей дорожки, то есть к первому цилиндру. И если величина сдвига выбрана правильно, дополнительный оборот диска не потребуется.

Сдвиг головок

Аналогичные проблемы возникают и при переключении головок, то есть при переходе с одной дорожки на другую в пределах одного цилиндра. Если переключение головок происходит медленно, а первый сектор дорожки расположен близко относительно маркера начала дорожки, головка может проскочить первый сектор дорожки. Потребуется еще один дополнительный оборот диска, и это будет так при каждом переходе с одной дорожки на другую.

Для выбора правильного расположения первого сектора некоторые программы низкоуровневого форматирования позволяют задавать сдвиг головок (Head Skew ) относительно маркера дорожки.

Фрагментация файлов

Для того чтобы понять причины появления фрагментированных файлов, нам необходимо вспомнить основы логической структуры файловой системы MS-DOS.

Мы уже говорили о том, что физически информация на диске храниться в секторах, которые для MS-DOS имеют размер 512 байт. Сектор - минимальный элемент данных, читаемый с диска или записываемый на диск. Для работы с файлами операционная система MS-DOS пользуется элементами данных, называемых кластерами. Кластер - это просто совокупность секторов, имеющих смежные номера. Кластер может состоять из одного сектора (для дискет) или содержать несколько секторов (для жесткого диска).

Операционная система выделяет для файлов, которые записываются на диск, некоторое количество кластеров, в зависимости от размера файла. Если файл маленький (например, в нем всего один или два байта), выделяется один кластер. Это, в частности, означает, что при размере кластера, равном 8 секторам, для хранения файла размером в один байт используется 4 Кбайт дисковой памяти.

Где же располагаются кластеры, выделяемые файлу?

Номер первого кластера, выделенного файлу, хранится в дескрипторе файла, то есть в каталоге. Для выделения остальных кластеров можно использовать две стратегии.

В первом случае можно было бы выделять для каждого файла необходимое количество кластеров, расположенных рядом. Однако в процессе работы с диском при записи и удалении файлов разного размера на диске появятся свободные и занятые области разной длины. Рано или поздно наступит такой момент, когда для записи нового файла операционная система не сможет найти свободный участок достаточной длины, несмотря на то, что суммарная длина свободных областей на диске будет превышать длину записываемого файла.

В этом случае можно говорить о сильной фрагментации свободного пространства на диске. Получается ситуация, когда на диске есть много свободного места, но оно разделено на много участков маленького размера.

Операционная система MS-DOS поступает по-другому. Для нового файла распределяются любые свободные кластеры, даже если они расположены в разных местах диска. Для каждого файла MS-DOS хранит номера всех занимаемых им кластеров в специальной таблице - таблице размещения файлов FAT .

Таблица размещения файлов FAT содержит элементы для каждого кластера, который есть на диске. Эти элементы могут хранить определенные значения, характеризующие состояние соответствующего кластера. Например, свободный кластер отмечается нулевым значением.

После форматирования диска программой format.com все кластеры, предназначенные для хранения файлов, помечаются в FAT как свободные. В процессе записи на диск нового файла в FAT записываются номера всех кластеров, распределенных данному файлу. Эти номера хранятся в виде односвязного списка.

Список строится следующим образом. Перед началом записи нового файла на диск MS-DOS просматривает FAT и находит первый свободный кластер. Номер этого кластера записывается в дескриптор файла. Далее в секторы этого кластера записываются данные. Если файл короткий и помещается целиком в один кластер, после записи данных в элемент FAT, соответствующий первому кластеру, записывается специальное значение, означающее конец цепочки кластеров (0FFFFh или 0FFFh в зависимости от типа FAT).

Если же длина файла больше размера одного кластера, MS-DOS ищет следующий свободный кластер, который может оказаться в любом месте диска. Номер найденного свободного кластера записывается в элемент FAT для первого кластера, распределенного файлу. Таким образом, элемент FAT, соответствующий первому кластеру будет содержать ссылку на второй кластер, распределенный файлу. Ссылка представляет собой просто порядковый номер следующего кластера.

По мере того как файл записывается на диск, MS-DOS формирует в FAT список кластеров, распределенных файлу. В элементе FAT, соответствующему последнему кластеру, распределенному файлу, записывается число, означающее конец цепочки кластеров.

При удалении файла все кластеры, принадлежащие файлу, помечаются как свободные - в соответствующие элементы FAT записывается нулевое значение. В каталоге первая буква имени файла заменяется на русскую букву "х" (в альтернативной кодировке символов). Это означает, что файл удален. Те кластеры, которые раньше занимал удаленный файл, становятся доступными для записи новых файлов.

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

Однако при использовании описанного выше метода файл становится фрагментированным - он как бы "размазан" по диску. К чему это может привести?

К тому, что для доступа к файлу необходимо перемещать магнитные головки от одного участка файла к другому. А на это требуется время, и весьма значительное.

Реально время чтения сильно фрагментированного файла по сравнению с файлом, занимающим непрерывную область на диске, может отличаться в несколько раз! Внешне это выглядит так, как будто программа стала работать в несколько раз медленнее, при этом наблюдается интенсивное перемещение головок диска от одного участка файла к другому.

Существуют различные методы дефрагментации диска. Наиболее очевидный и наименее удобный - выгрузка всего диска на дискеты или стример, форматирование диска и восстановление всех файлов, соответственно, с дискет или стримера.

Лучше всего использовать специальные программы, такие как defrag.exe , входящую в состав MS-DOS или speedisk.exe из пакета утилит Нортона.

Буферизация

Еще один путь к увеличению быстродействия дисковой системы лежит в использовании буферизации ввода/вывода. Что здесь имеется в виду?

Пусть нам надо скопировать некоторый, достаточно большой файл и этот файл располагается в начале диска, в области первых нескольких цилиндров. Пусть копия файла будет располагаться в конце диска (например, потому, что там имеется свободное пространство).

Как можно копировать файл?

Мы уже говорили, что наименьший элемент данных, который может быть прочитан с диска или записан на диск - это сектор длиной 512 байт. Можно копировать файл по секторам. Для этого сначала надо прочитать первый сектор первого кластера исходного файла, затем записать сектор в первый сектор первого кластера нового файла. Затем надо прочитать второй сектор первого кластера и записать прочитанные данные во второй сектор нового файла. И так далее до конца файла.

Однако после чтения каждого сектора необходимо переместить головки в конец диска для записи в сектор нового файла, а затем переместить головки снова в начало диска. При этом головки диска будут постоянно перемещаться от первых цилиндров к последним и обратно. Сколько копируется секторов, столько будет перемещений! А так как перемещение блока головок - длительный процесс, может получится так, что время, затраченное на перемещение, будет гораздо больше времени, затраченного собственно на чтение и запись данных.

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

Чем больше будет размер буфера, тем меньше будет затрачено времени на перемещение головок и тем быстрее будет копироваться файл.

Операционная система MS-DOS имеет специальные средства для управления процессом буферизации ввода/вывода.

Кэширование дисковой памяти

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

Можно привести много примеров, когда в процессе работы программы происходит частое обращение к одним и тем же областям диска, или даже к одним и тем же секторам диска.

Напрашивается мысль - нельзя ли некоторые, наиболее часто используемые секторы диска прочитать один раз в оперативную память и затем пересылать программам содержимое этих секторов непосредственно из памяти, без выполнения операций чтения диска?

При этом когда программе в первый раз потребуется содержимое, скажем, таблицы FAT , ее можно считать в некоторый буфер. Когда эта таблица потребуется еще раз, ее не надо читать с диска, так как она уже находится в оперативной памяти.

Разумеется, если программа записывает новые данные в считанные и размещенные в буфере секторы, эти секторы необходимо записать на диск. Запись можно выполнить сразу, по истечении заданного времени или во время простоев процессора, когда компьютер не занят выполнением полезной работы.

Описанный выше механизм хранения в оперативной памяти наиболее часто используемых секторов диска называется кэшированием дисковой памяти или просто кэшированием диска. Существуют различные способы организации кэширования диска в MS-DOS. Все они реализуются специальными драйверами, которые необходимо подключать в файлах config.sys или autoexec.bat.

Схематически реальный алгоритм кэширования дисковой памяти выглядит так.

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

Если требуемого сектора в буфере кеша нет, он читается с диска и записывается в буфер кеша, например, на место самого "старого" сектора данных. То есть на место сектора, к которому давно не было обращений. Таким образом, новая информация вытесняет из кеша старую. Разумеется, если в буфере кеша есть свободное место, никакого вытеснения не происходит, сектор просто записывается в буфер.

Кэширование диска для некоторых программ дает увеличение быстродействия в несколько раз.

Еще одна область, в которой желательно применение кэширования - базы данных. Если вы обратились к какой-либо записи базы данных, в первый раз она будет считана с диска и на это может уйти весьма ощутимое время. В следующий раз эта запись появится на экране сразу, так как она уже прочитана в оперативную память.

Физически кеш диска обычно реализуется с использованием расширенной или дополнительной оперативной памяти. Чем больше размер области памяти, отведенной для буфера кеша, тем больше вероятность того, что требуемый сектор уже хранится в памяти и его не надо заново считывать с диска.

Электронный диск

Если в вашем компьютере имеется расширенная или дополнительная память, вы можете организовать так называемый электронный диск . Подключив в файле config.sys драйвер ramdrive.sys , поставляемый вместе с операционной системой MS-DOS, вы получите дополнительный псевдодиск, организованный в оперативной памяти. От обычного диска он будет отличаться значительно более высоким быстродействием.

Так как данные, записанные на электронный диск , хранятся в оперативной памяти, при выключении питания компьютера содержимое электронного диска будет потеряно.

Электронный диск больше всего подходит для хранения временных и рабочих файлов, так как после выключения питания компьютера (в том числе после аварийного отключения питающей сети) содержимое этих дисков пропадает.

Однако более предпочтительным и удобным способом увеличения производительности дисковой системы компьютера является кэширование. Кэширование увеличивает скорость работы с файлами, расположенными на всех дисках. Вам не надо заботиться о том, чтобы наиболее часто используемые файлы находились на электронном диске.

Переменная среды PATH

Вам, наверное, известно назначение переменной среды PATH , устанавливаемой в файле autoexec.bat: эта переменная служит для перечисления путей доступа к каталогам, содержащим запускаемые программы. Например:

PATH  = c:\;c:\dos;c:\norton;d:\borlandc\bin;e:\word;

Когда в ответ на системное приглашение MS-DOS вы набираете имя программы, MS-DOS вначале ищет эту программу в текущем каталоге, а затем в каталогах, перечисленных в переменной среды PATH .

Допустим, вы желаете запустить текстовый процессор Microsoft Word. Для этого вы набираете: word и нажимаете клавишу <Enter>. Если переменная PATH установлена так, как в нашем примере, то после просмотра текущего каталога командный процессор в процессе поиска программы word.exe просмотрит корневой каталог диска c:, каталог, содержащий операционную систему MS-DOS c:\dos, каталоги c:\norton и d:\borlandc\bin, и, наконец, каталог e:\word. Здесь и располагается искомая программа.

Для запуска текстового процессора потребуется некоторое время. Это время будет затрачено, в частности, и на просмотр перечисленных каталогов, находящихся на разных дисках. Вы можете ускорить запуск программ, правильно расположив каталоги в определении переменной PATH . Такое ускорение заметно, если в компьютере установлен медленный диск с большим временем позиционирования головок.

Каталоги, которые содержат наиболее часто запускаемые программы, целесообразно размещать в левой части определения PATH .

Например, если вы постоянно запускаете Norton Commander и текстовый процессор Microsoft Word, а транслятором Borland C пользуетесь эпизодически, рекомендуется преобразовать приведенную выше строку следующим образом:

PATH  = c:\;c:\norton;e:\word;d:\borlandc\bin;c:\dos;

Корневой каталог c:\ мы поместили в левой части потому, что в этом каталоге описан командный процессор COMMAND.COM, нужный для запуска любых программ. Утилиты MS-DOS обычно используются редко, поэтому мы поместили их в правой части строки.

Расположение файлов

В некоторых случаях на скорость работы программы сильно влияет расположение файлов на диске или на дисках (если компьютер оборудован несколькими накопителями на магнитных дисках). Мы уже рассказывали вам о проблемах, связанных с перемещениями блока магнитных головок НМД при копировании файлов. Ситуация будет еще более серьезной, если выполняется не копирование, а, например, слияние двух файлов в один. При этом головки будут перемещаться уже между тремя зонами диска.

Если ваш компьютер имеет несколько НМД, имеет смысл располагать одновременно используемые файлы на разных устройствах. Копирование файла с одного НМД на другой будет выполняться быстрее, чем копирование в пределах одного НМД. Это связано с тем, что на каждом НМД головки будут перемещаться только в пределах одного файла. Дополнительное время на перемещение головок между файлами не потребуется.

Рабочие или временные файлы целесообразно располагать на отдельном НМД, желательно обладающем наибольшим быстродействием.

Настройка дисковой системы

В этом разделе мы приведем конкретные сведения об основных приемах оптимизации и опишем некоторые программы, которые специально предназначены для оптимизации дисковой системы.

Оптимизация фактора чередования

Реально можно использовать два метода выбора правильного значения для фактора чередования :

  • метод подбора;
  • метод, основанный на использовании специальных программ.
Метод подбора

При использовании этого метода вам предлагается попробовать по очереди все значения фактора чередования с измерением производительности диска.

Преимущество метода: не требуются специальные программы оптимизации фактора чередования .

Недостатки: большие затраты времени, необходимость полной предварительной выгрузки содержимого НМД.

Рекомендуем следующую последовательность действий:

  • убедитесь в том, что ваш диск подключен без использования контроллеров типов IDE , ESDI или SCSI , так как в этом случае должно всегда использоваться значение фактора чередования , равное 1. Использование других значений для фактора чередования в этом случае возможно, однако это не приведет к увеличению производительности дисковой системы и вы только зря потратите время;
  • выгрузите оптимизируемый диск на магнитную ленту (стример), на дискеты или скопируйте его содержимое на другой физический диск (если в компьютере установлено два физических диска, то есть два НМД);
  • запустите программу низкоуровневого форматирования. Задайте значение фактора чередования , равное 1, и выполните низкоуровневое форматирование диска.
  • Запустите программу fdisk.exe , создайте на диске небольшой раздел (порядка 3 - 5 Мбайт) и отформатируйте его программой format.com .
  • Для проверки быстродействия НМД измерьте время, затраченное на форматирование диска с данным значением фактора чередования .
  • Вернитесь снова к этапу низкоуровневого форматирования, задав значение фактора чередования , равное 2. Выполните действия по созданию раздела и его форматирования с замером времени, затраченного на форматирование.
  • Проверьте все значения фактора чередования от 1 до 17 (17 - количество секторов на дорожке НМД), записывая время форматирования при каждом значении фактора чередования в таблицу:
Фактор Время форматирования, сек.
1  
2  
.........  
16  
17  
  • Выберите из полученной таблицы значение фактора чередования , при котором форматирование выполняется за минимальное время. Выполните низкоуровневое форматирование с найденным оптимальным значением фактора чередования .
  • Создайте на диске все необходимые вам для работы разделы и выполните их форматирование программой format.com .
  • Восстановите файлы, выгруженные вами перед началом оптимизации.

Как видите, процедура достаточно длительная, она может отнять у вас целый день. Кроме того, потребуется множество дискет для выгрузки диска. Но зато в результате вы можете получить значительную прибавку в скорости работы диска.

Существует два способа выполнить низкоуровневое форматирование НМД.

Первый способ предполагает использование специальных программ форматирования. Вместе с компьютером всегда продается дискета, содержащая средства инициализации НМД и описание к ней. Самое лучшее - воспользоваться такой дискетой и следовать инструкции по форматированию, приведенной в описании.

Второй способ основан на использовании процедуры инициализации диска, записанной в микросхеме постоянного запоминающего устройства ROM (Read Only Memory - только читаемая память), располагающейся в BIOS или в контроллере диска. Этот способ пригоден не для всех контроллеров, так как не все контроллеры содержат ROM. Подробности вы сможете узнать из документации на ваш дисковый контроллер, там же приведены все необходимые сведения о работе с программой форматирования, записанной в ROM.

Программа инициализации hdinit

В качестве примера мы рассмотрим программу низкоуровневого форматирования hdinit и способ запуска программ форматирования, находящиеся в ROM . Однако надежнее всего пользоваться документацией, поставляющейся с вашим контроллером, так как существует очень много разных типов контроллеров, имеющих свои особенности, в том числе в части низкоуровневого форматирования.

Самая простая утилита низкоуровневого форматирования - hdinit. Запустите ее (предварительно выгрузив диск) с параметром C: для первого НМД или с параметром D: для второго НМД. Например:

hdinit c:

Программа hdinit сообщит вам имя и физический адрес инициализируемого НМД (в нашем случае инициализируется диск drive c:, его адрес - 80H), количество цилиндров (cylinders), головок (heads), секторов на трек (sector/track) и другие параметры (рис. 6.3).

Далее программа сообщит вам, что она уничтожит все данные, находящиеся на диске и спросит, желаете ли вы продолжить работу. На этот вопрос вы отвечаете "y", если желаете инициализировать диск и "n" в противном случае.

Рис. 6.3. Программа hdinit

На второй вопрос - Scan for existing defective tracks (y/n) (желаете ли вы просмотреть существующие дефектные дорожки) - ответьте "n".

Продолжение диалога можно увидеть на рисунке 6.4.

Рис. 6.4. Последнее предупреждение перед началом форматирования

Сперва программа выведет на экран список дефектных дорожек диска в формате цилиндр/головка (если на диске имеются дефектные дорожки). Вы сможете пополнить список дефектных дорожек, если введете их номера в аналогичном формате, или исключить дорожки из списка дефектных, если укажите адрес дорожки в формате "-цилиндр/головка". Если дефектных дорожек нет, просто нажмите клавишу <Enter>.

На следующий вопрос (Is the list OK?) надо ответить "y".

Далее программа спросит вас, использовать ли при форматировании значение фактора чередования , равное трем (Use interleave factor of 3 (y/n)? ). На этот вопрос надо ответить "n", если, конечно, вы и в самом деле решили использовать другой фактор чередования .

После этого программа попросит вас ввести новое значение для фактора чередования (ENTER new interleave factor (2...8)). На рисунке было введено значение 4. Для подтверждения на следующий вопрос (Use interleave factor of .. (y/n)?) необходимо ответить "y".

Последний вопрос - это самое последнее предупреждение, которое программа выдает перед тем, как начать форматировать диск (LAST CHANCE: Continue with initialization (y/n)?). Мы ответили на этот вопрос "n", и на этом работа программы закончилась. Если же вам надо начать инициализацию, ответьте "y". На экране будет отображаться процесс форматирования. Он может продолжаться несколько десятков минут.

Инициализация программой, записанной в ПЗУ контроллера

Рассмотрим теперь способ низкоуровневого форматирования НМД при помощи программы, записанной в ПЗУ дискового контроллера. Мы уже говорили о том, что этот способ будет работать не для всех типов контроллеров.

Вначале запустите программу-отладчик debug.exe , входящую в состав MS-DOS:

c:\>debug

В ответ на приглашение отладчика введите:

-g=c800:5

Запустится программа низкоуровневого форматирования. Она будет задавать вопросы, аналогичные тем, что задает программа hdinit. Вам необходимо установить правильное значение для фактора чередования .

Если программа форматирования не запустилась, попробуйте вместо адреса c800:5 ввести c800:6 (работает на компьютере Bondwell B-300) или d800:5. Правильное значение адреса запуска программы можно узнать только из документации на контроллер диска.

Что вы увидите на экране после запуска описанным только что способом программы низкоуровневого форматирования? Это зависит от контроллера. Поэтому мы не будем приводить копии экранов для одного отдельного случая. Вместо этого перечислим возможные вопросы, которые может задать утилита низкоуровневого форматирования.

Сперва программа определяет физические параметры установленных НМД и выводит их на экран. Затем вам может быть предложено меню:

  • функция форматирования (Format);
  • функция проверки (Verify);
  • функция анализа поверхности (Surface Analysis).

Для выполнения низкоуровневого форматирования выберите функцию Format или Format/Verify. Вам будет нужно указать требуемый фактор чередования (Interleave) и другие параметры, для которых лучше использовать те значения, которые предложит сама программа форматирования.

Обычно контроллер сам определяет оптимальные значения для сдвига цилиндров (Cylinder Skew ) и сдвига головок (Head Skew). Если ваша программа не может сама определить оптимальное значение для сдвига цилиндров, используйте величину, равную одной трети от общего количества секторов на дорожке. Аналогично, для сдвига головок укажите значение 1.

Некоторые НМД используют резервирование секторов (Sector Sparing). При этом на каждой дорожке резервируется один сектор для замены дефектного. Резервирование секторов заметно сокращает общую емкость НМД, поэтому используйте резервирование только для дисков, имеющих значительное количество дефектов.

После низкоуровневого форматирования не забудьте запустить программу fdisk.exe , создать с ее помощью разделы на диске и отформатировать их программой format.com .

Программа CALIBRAT

Программа CALIBRAT входит в состав пакета Norton Utilities . Она значительно облегчает процедуру выбора оптимального фактора чередования , полностью автоматизируя весь процесс.

Преимущества:

  • не требуется выгружать содержимое диска перед началом процесса оптимизации;
  • выбор оптимального фактора чередования и переформатирование диска без потери содержимого выполняется самой программой автоматически;
  • перед началом оптимизации программа сама определяет возможность переформатирования данного диска, что позволяет избежать напрасных потерь времени.

Дефрагментация диска

Для дефрагментации файлов на диске у вас есть две альтернативы:

  • "ручная" дефрагментация;
  • дефрагментация при помощи специально предназначенных для этого программ.

Процедура "ручной" дефрагментации заключается в том, что вы выгружаете диск на магнитную ленту (стример) или дискеты, форматируете диск программой format.com , и восстанавливаете содержимое диска с магнитной ленты или дискет.

После форматирования на диске имеется один непрерывный свободный участок. При восстановлении файлов с ленты или дискет они записываются на диск по одному, причем каждый файл занимает некоторое количество расположенных рядом свободных кластеров.

Очевидный недостаток "ручной" фрагментации - большая трудоемкость и значительная продолжительность процесса. Кроме того, для выполнения операции вам потребуется много дискет или стример.

Гораздо лучше воспользоваться программой defrag.exe , которая входит в состав MS-DOS, или программой speedisk.exe из пакета Norton Utilities . Эти программы выполняют дефрагментацию диска "по месту", как бы переставляя кластеры.

После запуска программы defrag.exe вы должны выбрать из меню нужный диск. Программа исследует его содержимое и подберет наилучший, с ее точки зрения, метод оптимизации. Она может, например, просто сделать все файлы на диске расположенными в непрерывных областях, либо полностью оптимизировать расположение файлов на диске. В случае полной оптимизации все свободные кластеры собираются в один непрерывный блок.

Программа defrag.exe представляет собой сокращенный вариант программы speedisk.exe из пакета Norton Utilities . Для последней возможны следующие методы оптимизации.

Первый метод - полная оптимизация (Full Optimization). Программа выполняет все действия по оптимизации диска, не меняя содержимое каталогов и порядок расположения файлов. Это наиболее подходящий метод для большинства случаев.

Второй метод (Full with DIR's first) выполняет оптимизацию диска с переносом каталогов в начало диска.

Третий метод (Full with File reorder) кроме дефрагментации выполняет группировку файлов вблизи каталогов, в которых они описаны.

Для второго и третьего методов требуется несколько больше времени, чем для первого.

Четвертый метод (Unfragment Files Only) выполняет дефрагментацию файлов без изменения каталогов или изменения порядка расположения файлов. При использовании этого метода свободное пространство на диске остается фрагментированным.

Пятый метод (Unfragment Free Space) - дефрагментация свободного пространства. Все свободные кластеры собираются вместе в одной непрерывной области диска.

Во время работы программа показывает на экране все свои действия по перемещению кластеров. Стоит посмотреть на это захватывающее зрелище!

Буферизация ввода и вывода

Операционная система MS-DOS имеет средства буферизации, которые можно подключить при помощи команды BUFFERS . Эту команду необходимо поместить в файл CONFIG.SYS:

BUFFERS =n,m

В этой строке n задает количество буферов, которые MS-DOS использует для ввода и вывода. Если файл CONFIG.SYS отсутствует, или в нем нет команды BUFFERS , по умолчанию MS-DOS создает 15 буферов (если в системе установлено 640 Кбайт основной памяти).

Параметр m задает количество буферов предварительной выборки. Предварительная выборка означает, что в буфер записывается не только сектор, затребованный программой, но и некоторое количество следующих за ним секторов. Можно задать от 1 до 8 буферов предварительной выборки.

Параметр n может принимать значения от 1 до 99.

Буферы используются следующим образом: все читаемые с диска секторы записываются в буферы. Если позже какой-либо программе потребуется прочитанный ранее и записанный в буфер сектор, он извлекается из буфера. При этом чтения сектора с диска не происходит.

Буферы, созданные этой командой, располагаются в стандартной оперативной памяти, уменьшая свободное для прикладных программ пространство. Поэтому не следует злоупотреблять большим количеством буферов.

Несмотря на простоту оператора BUFFERS , большей эффективности можно достичь при использовании кэширования дисковой памяти.

Если вы используете программу кэширования, имеет смысл задать небольшое количество буферов, например, 10 или даже 5.

Кэширование дисковой памяти

Для кэширования диска можно воспользоваться либо драйвером smartdrv.exe , входящим в стандартную поставку операционной системы MS-DOS, либо специальными средствами кэширования, такими, как HyperDisk фирмы HyperWare.

Драйвер SMARTDRV

Самый простой способ организации кэширования дисковой памяти - использование драйвера smartdrv.exe . Этот драйвер можно запускать как резидентную программу из файла autoexec.bat или из командного приглашения MS-DOS:

c:\dos\smartdrv [/X] [[Диск[=|-]]...] [/U] [/C | /R] 
  [/F | /N] [/L] [/V | /Q | /S] 
  [НачРазмер] [РазмерДляWindows] 
  [/E:ElemSize] [/B:BufSize]

Необязательный параметр [НачРазмер] задает размер области оперативной памяти в Кбайтах, отводимой под кеш. Если он не задан, для кеша отводится блок памяти, размер которого зависит от общего объема расширенной памяти, установленной в компьютере.

Параметр [РазмерДляWindows] (также необязательный) задает минимальный размер кеша в Кбайтах. Этот параметр обычно используют при работе с оболочкой Microsoft Windows , которая умеет уменьшать размер кеша и использовать освободившуюся память для своих нужд. Например, может уменьшить размер кеша до нуля, что скажется отрицательно на производительности дисковой системы.

Задавая параметр [Диск], можно управлять кэшированием отдельных дисков. Если этот параметр указан без символов "+" или "-", для данного диска разрешается кэширование на чтение. Если же указан символ "+", разрешается кэширование на чтение и запись. Символ "-" полностью отключает кэширование.

Кэширование на запись предполагает "отложенное" выполнение записи на диск. То есть программа, выполняющая запись данных на диск, получает сигнал о завершении записи еще до того, как запись была фактически завершена. Запись произойдет позже, когда процессор будет свободен (если, конечно, случайно не пропадет напряжение питания, а вместе с ним и содержимое кеш-памяти). Таким образом, работа многих программ сильно ускоряется.

Приведем краткое описание других параметров.

Параметр Описание
X Отключение кеширования на запись для всех устройств, кроме указанных индивидуально в параметре [Диск+]
U Отключение кеширования устройства чтения компакт-диска
C Принудительная запись содержимого кеш-памяти на диск. Используется при запуске программы smartdrv.exe из командного приглашения MS-DOS
R Стирание содержимого кеш-памяти и перезапуск программы smartdrv.exe
F Сохранение всех изменений в кеш-памяти на диске должно происходить сразу после выполнения операции записи. Этот режим используется по умолчанию
N Сохранение всех изменений в кеш-памяти на диске должно происходить, когда процессор не занят выполнением других операций
L Отключение возможности загрузки программы smartdrv.exe в верхнюю область памяти
V Отображение состояния программы smartdrv.exe и сообщений об ошибках
Q Отключение режима отображения состояния программы smartdrv.exe
S Отображение дополнительной информации о состоянии программы smartdrv.exe
E Размер блока памяти, который записывается на диск или читается с диска при выполнении одной операции, по умолчанию равен 8 Кбайт
B Размер буфера предварительной выборки при чтении, должен быть кратен размеру блока памяти, указанному в параметре E

Если вы собираетесь использовать программу smartdrv.exe для кеширования устройства чтения компакт-дисков, загружайте ее ПОСЛЕ запуска программы mscdex.exe.

Драйвер HyperDisk

Драйвер HyperDisk - одно из самых мощных и быстродействующих средств кеширования дисковой памяти. Этот драйвер может располагать кеш в обычной, расширенной или дополнительной памяти компьютера. При использовании драйвера HyperDisk производительность дисковой системы может увеличиться в несколько раз.

Для установки драйвера HyperDisk версии 4.30 вам достаточно скопировать в корневой каталог диска C: (или в любой другой каталог любого другого диска) все файлы дистрибутива драйвера HyperDisk с расширением exe. Затем надо убедиться в том, что вы не используете другие средства кеширования дисковой памяти, такие как драйвер smartdrv.exe .

На установочной дискете драйвера HyperDisk находятся следующие файлы: hyper286.exe, hyper386.exe, hyperdkx.exe, hyperdke.exe, hyperdkc.exe, hyperdk.exe. Все эти файлы (за исключением hyperdk.exe) представляют собой различные варианты драйвера HyperDisk. Файл hyperdk.exe предназначен для динамического изменения параметров драйвера HyperDisk.

Если ваш компьютер не оборудован расширенной или дополнительной памятью (IBM PC или IBM PC/XT), вы должны использовать файл hyperdkc.exe. При этом кеш будет располагаться в стандартной памяти, сильно сокращая доступное другим программам пространство. Для подключения драйвера поместите в файл config.sys следующую строку (мы предполагаем, что вы скопировали все файлы драйвера HyperDisk в корневой каталог диска C:):

device=c:\hyperdkc.exe C:100

Параметр C:100 указывает, что кеш должен иметь размер 100 Кбайт. Если этот параметр не указывать, то по умолчанию для кеша, расположенного в основной памяти, будет отведено 128 Кбайт.

При использовании драйвера HyperDisk параметр BUFFERS в файле config.sys должен быть равен 5:

BUFFERS =5

Кроме того, в файл autoexec.bat следует добавить строку:

VERIFY=OFF

Если вы - обладатель компьютера, выполненного на базе процессора i286 (IBM PC/AT), то обычно вам доступно по крайней мере 384 Кбайт расширенной памяти. В этом случае используйте следующий вариант подключения драйвера:

device=c:\hyper286.exe

Если вы не укажите параметр C:, для кеша будет отведена вся имеющаяся расширенная память.

Для компьютеров IBM PC/AT, выполненных на базе процессора i386, используйте файл hyper386.exe:

device=c:\hyper386.exe C:2048

В данном случае для кеша отводится 2 Мбайт расширенной памяти.

Обычно набора описанных только что файлов достаточно для организации кеша практически на любых компьютерах. Однако если у вас возникли проблемы совместимости драйвера HyperDisk с другим используемым программным обеспечением, вы можете попробовать установить драйверы hyperdkx.exe или hyperdke.exe. Первый из них предназначен для использования расширенной памяти в компьютерах, выполненных на базе процессоров i286 или i386, а второй - для использования дополнительной памяти. Эти драйверы подключаются аналогично только что описанным, например:

device=c:\hyperdke.exe C:2048

Драйвер HyperDisk может выполнять множество других функций и имеет различные режимы работы, которые можно динамически изменять после загрузки операционной системы. Полный перечень и подробное описание всех возможностей драйвера приведены в документации, распространяемой в виде файла вместе с драйвером (на английском языке).

Драйвер HyperDisk может "накапливать" изменения в оперативной памяти и сбрасывать их на диск позже, во время простоев компьютера или через заданный промежуток времени. Это увеличивает производительность при записи данных на диск. Кроме того, драйвер HyperDisk может оптимизировать последовательность записываемых секторов с целью сокращения перемещений блока головок.

Однако такая задержка во времени опасна, так как если произойдет, например, внезапное отключение питающей сети, драйвер HyperDisk может не успеть записать все изменения в кеше на диск. Это может привести к логическому разрушению файловой системы на кешируемом диске.

Возможности драйвера HyperDisk реализуются необязательными параметрами. Эти параметры могут задаваться в файле config.sys :

device=c:\hyperdke.exe C:2048 H V

Кроме того, некоторые параметры можно изменять во время работы операционной системы при помощи программы hyperdk.exe. Для этого надо запустить эту программу с новыми параметрами для драйвера HyperDisk :

hyperdk H V

Приведем таблицу некоторых, наиболее полезных на наш взгляд, параметров:

Параметр Описание
H Если задан этот параметр, кэшируются только накопители НМД
F Кэшируются также и НГМД. Этот режим включен по умолчанию
V Включение проверки записываемых данных. Этот параметр используется вместо команды VERIFY. Команда VERIFY не должна использоваться вместе с драйвером HyperDisk
N Не выполнять проверку записываемых данных. Отменяет действие параметра V
C:nn Параметр определяет количество памяти, используемой драйвером для организации кеша, nn задает размер кеша в Кбайтах
W Режим немедленной записи данных на диск сразу после их обновления в кеше. Этот режим включен по умолчанию
Q Аналогично W, но для НГМД
S Запись данных на диск откладывается до тех пор, пока компьютер не перейдет в состояние ожидания
A Аналогично S, но для НГМД
XU Отключение кеша. Вся память, которая использовалась для кеша, освобождается и становится доступна другим программам

Полный список команд приведен в документации на драйвер HyperDisk .

Приведем комбинацию параметров для кеширования только накопителей на жестких дисках с отложенной записью измененных данных:

device=c:\hyper386.exe C:2048 H S

Режим отложенной записи данных рекомендуется использовать только в тех случаях, когда у вас надежно работающий компьютер, нет постоянных сбоев в питающей сети и вы не проводите экспериментов с новым программным обеспечением.

Параметры драйвера HyperDisk можно динамически изменять в процессе работы с помощью ряда комбинаций клавиш. Например, перед тем, как вы запускаете новую программу, целесообразно отключить кеширование или, по крайней мере, режим отложенной записи.

Приведем описание некоторых наиболее важных комбинаций клавиш, управляющих работой драйвера HyperDisk .

Комбинация клавиш Выполняемое действие
<Ctrl-Alt-D> Отключение драйвера HyperDisk . Эту команду целесообразно использовать при проверке нового программного обеспечения, либо при установке программ, защищенных от копирования
<Ctrl-Alt-E> Включение драйвера HyperDisk в работу. Используется после ввода предыдущей команды для возобновления кеширования
<Ctrl-Alt-S> Включение режима отложенной записи
<Ctrl-Alt-W> Выключение режима отложенной записи. Используйте эту команду при выполнении "рискованных" операций, которые могут привести к зависанию компьютера
<Ctrl-Alt-F> Команда вызывает принудительную запись содержимого кеша на диск перед запуском каждой новой программы. Эту команду удобно использовать при отладке нового программного обеспечения
<Ctrl-Alt-R> Отмена предыдущего режима
<Ctrl-Alt-Del> Перезагрузка операционной системы. Драйвер HyperDisk запишет содержимое кеша на диск. Когда начнется запись данных, вы услышите два звуковых сигнала. После завершения записи для выполнения перезагрузки операционной системы нажмите <Ctrl-Alt-Del> еще раз. Если вы используете какие-либо драйверы или резидентные программы, которые выполняют немедленную перезагрузку MS-DOS по указанной комбинации клавиш, используйте перед перезагрузкой команду <Ctrl-Alt-D> для сброса содержимого кеша на диск

Создание электронного диска

Для организации электронного диска добавьте в файл CONFIG.SYS следующую строку:

device=c:\dos\ramdrive.sys  [параметры]

В качестве первого параметра следует указать размер создаваемого электронного диска в Кбайтах. Второй параметр - число, определяющее размер сектора электронного диска. Он может принимать значения 128, 256, 512 и 1024 байт. Третий параметр - максимальное количество файлов в корневом каталоге диска.

Дополнительно можно указывать параметры /E и /A. Параметр /E вызывает размещение электронного диска в расширенной памяти, а параметр /A - в дополнительной.

Все параметры драйвера ramdrive.sys необязательные. Если ни один из них не указан, создается диск размером 64 Кбайт с размером сектора 512 байт. Максимальное количество файлов, которые можно записать в корневой каталог - 64. Кроме того, если не указан ни один ключ, электронный диск создается в стандартной памяти, отнимая память у запускаемых программ.

Если ваш компьютер оборудован расширенной памятью размером в несколько Мбайт, вы можете создать электронный диск размером в 1024 Кбайт следующим образом:

device=c:\dos\ramdrive.sys  1024 /E

Драйверы кеша и Microsoft Windows

Так как Windows может сам уменьшать размер кеша, созданного драйверами кеширования (вплоть до нуля), не забудьте указать минимальный размер используемого кеша. Для драйвера smartdrv.exe это можно сделать, например, так:

device=c:\dos\smartdrv.sys 2048 1024

В этом случае, когда программы работают непосредственно в среде MS-DOS, размер кеша составляет 2048 Кбайт. Если же запускается Microsoft Windows , размер кеша может уменьшиться до 1024 Кбайт.

Аналогично в драйвере HyperDisk размер кеша, использующегося при работе с Windows , указывается при помощи параметра CW:, например,

device=c:\hyper386.exe C:2048 CW:1024 H S

Можно использовать и такой способ:

device=c:\hyper386.exe C:2048:1024 H S

При работе драйвера HyperDisk вместе с Microsoft Windows для переключения режимов работы драйвера рекомендуется следующая последовательность действий:

  • нажмите клавишу <Pause> или <Ctrl+NumLock>;
  • нажмите комбинацию клавиш, необходимую для выбора нового режима работы драйвера HyperDisk .

Программа FASTOPEN

Программа fastopen.exe - еще одно средство кеширования, предоставляемое операционной системой MS-DOS. Это резидентная программа, запоминающая в оперативной памяти расположение файлов и каталогов на диске. При ее использовании сильно уменьшается время доступа к файлам.

Однако драйвер smartdrv.exe обеспечивает большую эффективность, так как он может хранить в оперативной памяти не только расположение файлов и каталогов, но и любые часто используемые файлы или участки файлов. Поэтому мы не рекомендуем вам использовать программу fastopen.exe .

[Назад] [Содеожание] [Дальше]