MS-DOS для программиста© Александр Фролов, Григорий ФроловТом 4, М.: Диалог-МИФИ, 1993, 253 стр. |
Если вам показалось, что компьютер работает слишком медленно, а диск переполнился, можно купить новый, более мощный компьютер, либо установить новый диск большей емкости, купить еще несколько модулей оперативной памяти (особенно, если вы не испытываете финансовых затруднений).
Однако есть и другие, значительно более дешевые и в то же время достаточно эффективные способы увеличения возможностей имеющейся в вашем распоряжении техники:
Проверьте, насколько сильно фрагментирован ваш диск - фрагментация сильно замедляет работу программ, активно использующих дисковую память. Обновите версию операционной системы MS-DOS до 6.22 - это даст вам дополнительно несколько десятков Кбайт основной оперативной памяти и возможность организации динамической компрессии данных. Не бойтесь расстаться с полюбившейся вам и хорошо проверенной MS-DOS версии 3.30 - есть достаточно веские причины использовать последние достижения в области операционных систем для персональных компьютеров.
Если вы используете компьютер на базе процессора i386, i486 или Pentium, проверьте оптимальность конфигурации компьютера, установленной в CMOS - не исключено, что вы сможете увеличить быстродействие системы в 1,5 - 2 раза только за счет правильной установки режима работы центрального процессора с оперативной памятью.
Отформатируйте дискеты DS/DD не на 360, а на 800 Кбайт - у вас временно исчезнет проблема с нехваткой дискет. Используйте средства динамического сжатия данных на диске - эффективная емкость диска возрастет в полтора-два раза (!), причем без заметного снижения быстродействия.
К сожалению, операционная система MS-DOS использует такой важный и дорогостоящий ресурс компьютера, как оперативная память, не лучшим образом. Запуская программы в MS-DOS, особенно игровые, вы часто сталкиваетесь с парадоксальной ситуацией: несмотря на то что в компьютере установлено 8 или 16 Мбайт памяти, на экране появляется сообщение о том, что памяти слишком мало, и программа не может работать!
Если вы активно работаете с жестким диском компьютера, то быстродействие дисковой системы постепенно снижается из-за фрагментации файлов.
В состав MS-DOS включены специальные средства, предназначенные как для улучшения использования оперативной памяти, так и для дефрагментации файлов. Используя средства буферизации и кэширования, вы сможете значительно повысить производительность дисковой системы компьютера.
Несмотря на то что стоимость дисковой памяти постоянно снижается, никакой диск не будет слишком большим по емкости. Для более экономного использования дисков вы можете воспользоваться системой динамического сжатия данных DriveSpace , которая поставляется вместе с MS-DOS версии 6.22.
Прежде чем приступить к оптимизации, необходимо выяснить конфигурацию аппаратных и программных средств вашего компьютера. В зависимости от конфигурации вы будете выполнять разные процедуры оптимизации.
В составе аппаратных средств обычно имеются:
В зависимости от наличия и типа оборудования из числа перечисленного выше вам будет необходимо выбрать те или иные процедуры оптимизации.
Прежде всего вам потребуется определить:
При оптимизации дисковой подсистемы вам, возможно потребуется выполнить процедуру низкоуровневого форматирования НМД - это стандартная процедура подготовки нового диска к работе. Низкоуровневое форматирование выполняется по-разному в зависимости от типа контроллера и типа НМД. Единственный надежный источник информации о типе контроллера и о том, как правильно выполнять низкоуровневое форматирование - техническая документация на ваш контроллер НМД.
Существует несколько типов контроллеров. Вы
можете встретиться с контроллерами, которые
используют интерфейсы ST506/412 , SCSI , ESDI , IDE и Enchanced IDE .
Узнайте тип вашего контроллера, он потребуется
на этапе оптимизации характеристик дисковой
подсистемы.
Интерфейс ST506/412 устарел. Он использовался преимущественно в компьютерах IBM PC/XT и IBM PC/AT с емкостью диска порядка 20 - 40 Мбайт. Характерный признак этого интерфейса - подключение НМД к контроллеру при помощи двух плоских кабелей. Один кабель широкий, в нем 34 жилы, второй состоит из 20 жил.
К одному контроллеру ST506/412 может быть подключено два НМД. В этом случае используется три кабеля - один широкий с двумя разъемами, и два узких. Каждый НМД подключается к контроллеру отдельным узким кабелем, но широкий кабель только один.
Если ваш НМД подключается к контроллеру таким способом, то у вас скорее всего установлен контроллер с интерфейсом ST506/412 , и вам имеет смысл заняться оптимизацией такой характеристики диска, как фактор чередования .
Интерфейс ESDI также устарел и встречается очень редко. Этот интерфейс, как правило, не требует оптимизации фактора чередования . Контроллер ESDI также подключается к НМД двумя кабелями шириной 34 и 20 жил.
Дополнительный признак, по которому можно отличить контроллер ESDI от контроллера ST506/412 - наличие на плате контроллера микросхемы постоянного запоминающего устройства. Эта микросхема установлена на панельке.
Низкоуровневое форматирование НМД, подключенного к контроллеру ESDI , должно выполняться с помощью программы, записанной в ПЗУ контроллера, как это будет описано в разделе "Низкоуровневое форматирование".
Если у вас не получается запустить программу низкоуровневого форматирования, находящуюся в ПЗУ контроллера, наиболее вероятная причина заключается в том, что тип вашего контроллера - не ESDI , а ST506/412 или IDE .
Интерфейс SCSI и его разновидности, также как и ESDI , используется для подключения дисков большой емкости (а также других устройств, например, стримера, устройства чтения компакт-дисков или магнитооптического накопителя) к высокопроизводительным компьютерам. Характерная особенность этого интерфейса - использование одного широкого кабеля (50 жил) для подключения всех НМД. При включении питания компьютера, оборудованного SCSI-контроллером, на экран выдается сообщение об инициализации контроллера. В этом сообщении есть слово "SCSI", по которому можно легко идентифицировать тип используемого интерфейса.
Если в вашем компьютере установлен SCSI -контроллер диска, вам не нужно выполнять процедуру оптимизации фактора чередования .
Контроллеры IDE и Enchanced IDE имеют производительность, сравнимую с контроллерами ESDI и SCSI . Они широко используются в современных компьютерах. Как правило, можно подключить один или два НМД, причем, как и в случае SCSI, используется один широкий кабель. Этот кабель часто подключается непосредственно к разъему, расположенному на материнской плате компьютера. Интерфейс Enchanced IDE допускает подключение и использование в MS-DOS НМД большой емкости (больше 500 Мбайт).
Контроллер, использующий интерфейс IDE , не имеет отдельного ПЗУ. Оптимизация фактора чередования для диска, подключенного с помощью такого контроллера, не нужна.
Тип используемого процессора можно выяснить из документации на компьютер. Если у вас компьютер IBM PC или IBM PC/XT, то скорее всего это 8086, 8088 или аналог 8088 - процессор NEC20 . Иногда встречаются компьютеры XT/286, в которых используется процессор i286. Компьютеры IBM PC/AT оборудованы процессорами i286, i386, i486 или Pentium.
Расширенная память - это память, расположенная в адресном пространстве выше границы 1 Мбайт. Такая память отсутствует в компьютерах IBM PC и IBM PC/XT. Компьютер IBM PC/AT в стандартной конфигурации имеет по крайней мере 384 Кбайт расширенной памяти, расположенной на основной плате.
Как определить объем расширенной памяти?
Для этого достаточно включить компьютер и дождаться начала теста памяти. Если после теста на экране находится сообщение о том, что проверено 2048 Кбайт памяти, значит у вас есть 2048-640=1408 байт расширенной памяти.
Эта память сейчас практически не встречается. Она может быть расположена на отдельной плате, вставляемой в слот расширения основной платы компьютера. Для ее использования необходимо установить специальный драйвер, который поставляется вместе с платой памяти. В стандартную конфигурацию компьютера плата дополнительной памяти не входит, она продается отдельно.
Дополнительную память, в отличие от расширенной, можно установить в любой компьютер, даже в IBM PC или IBM PC/XT. Расширенная память может быть только в таком компьютере, который использует процессоры i286 или более старших моделей.
Версию используемой операционной системы можно определить при помощи команды VER. В ответ на эту команду вы увидите на экране следующее (для MS-DOS версии 6.22):
MS-DOS Version 6.22
Если вы используете более ранние версии MS-DOS, мы рекомендуем вам установить версию 6.22. Только в этом случае вы сможете легко выполнить оптимизацию используемой оперативной памяти и воспользоваться динамическим сжатием данных на диске. После оптимизации для программ будет доступно 600 - 620 Кбайт памяти!
Для определения конфигурации компьютера можно запустить программу msd.exe, которая входит в состав MS-DOS. Эта программа сообщит вам тип процессора, количество и тип дисковых устройств, объем стандартной, расширенной и дополнительной памяти, а также множество других интересных сведений о конфигурации вашего компьютера (рис. 6.1).
Рис. 6.1. Определение конфигурации компьютера с помощью программы msd.exe
Выбрав при помощи мыши или клавиатуры поле "Computer", вы сможете узнать не только тип компьютера, но и версию BIOS, тип центрального процессора и шины (рис. 6.2).
Рис. 6.2. Просмотр дополнительной информации о конфигурации компьютера
После того как вы определите конфигурацию аппаратных и программных средств, можно приступить к составлению плана оптимизации.
План оптимизации зависит от типа и конфигурации используемого вами компьютера. Перечисленные процедуры будут описаны ниже в соответствующих разделах.
Если у вас компьютер типа IBM PC или IBM PC/XT, настоятельно рекомендуем заменить его на более новую модель. Тем не менее, и в этом случае можно предпринять некоторые шаги для увеличения производительности:
Процессор i286 уже не выпускается, поэтому если он установлен в вашем компьютере, мы советуем приобрести новый компьютер в самое ближайшее время. Вот какие процедуры вам следует выполнить для увеличения производительности, если вы решили повременить с покупкой:
Вы сможете улучшить использование оперативной памяти и увеличить быстродействие даже мощного компьютера с процессором Pentium, если сделаете следующее:
Производительность дисковой системы очень сильно влияет на общую производительность компьютера. После оптимизации дисковой памяти вы с приятным удивлением обнаружите, что многие программы стали работать заметно быстрее. Поэтому мы начнем именно с оптимизации дисковой системы, а затем расскажем о настройке других систем компьютера.
Прежде чем приводить рекомендации по увеличению быстродействия дисковой системы, мы расскажем вам об основных причинах, приводящих к замедлению работы дисков. Их может быть несколько:
Каждая из приведенных выше причин сама по себе может привести к замедлению работы дисковой памяти или отдельных программ в несколько раз! А если у вас комбинация нескольких или всех неблагоприятных факторов? В этом случае даже современные быстродействующие накопители будут по скорости напоминать диски первых моделей 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 , устанавливаемой в файле 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 обычно используются редко, поэтому мы поместили их в правой части строки.
В некоторых случаях на скорость работы программы сильно влияет расположение файлов на диске или на дисках (если компьютер оборудован несколькими накопителями на магнитных дисках). Мы уже рассказывали вам о проблемах, связанных с перемещениями блока магнитных головок НМД при копировании файлов. Ситуация будет еще более серьезной, если выполняется не копирование, а, например, слияние двух файлов в один. При этом головки будут перемещаться уже между тремя зонами диска.
Если ваш компьютер имеет несколько НМД, имеет смысл располагать одновременно используемые файлы на разных устройствах. Копирование файла с одного НМД на другой будет выполняться быстрее, чем копирование в пределах одного НМД. Это связано с тем, что на каждом НМД головки будут перемещаться только в пределах одного файла. Дополнительное время на перемещение головок между файлами не потребуется.
Рабочие или временные файлы целесообразно располагать на отдельном НМД, желательно обладающем наибольшим быстродействием.
В этом разделе мы приведем конкретные сведения об основных приемах оптимизации и опишем некоторые программы, которые специально предназначены для оптимизации дисковой системы.
Реально можно использовать два метода выбора правильного значения для фактора чередования :
При использовании этого метода вам предлагается попробовать по очереди все значения фактора чередования с измерением производительности диска.
Преимущество метода: не требуются специальные программы оптимизации фактора чередования .
Недостатки: большие затраты времени, необходимость полной предварительной выгрузки содержимого НМД.
Рекомендуем следующую последовательность действий:
Фактор | Время форматирования, сек. |
1 | |
2 | |
......... | |
16 | |
17 |
Как видите, процедура достаточно длительная, она может отнять у вас целый день. Кроме того, потребуется множество дискет для выгрузки диска. Но зато в результате вы можете получить значительную прибавку в скорости работы диска.
Существует два способа выполнить низкоуровневое форматирование НМД.
Первый способ предполагает использование специальных программ форматирования. Вместе с компьютером всегда продается дискета, содержащая средства инициализации НМД и описание к ней. Самое лучшее - воспользоваться такой дискетой и следовать инструкции по форматированию, приведенной в описании.
Второй способ основан на использовании процедуры инициализации диска, записанной в микросхеме постоянного запоминающего устройства ROM (Read Only Memory - только читаемая память), располагающейся в BIOS или в контроллере диска. Этот способ пригоден не для всех контроллеров, так как не все контроллеры содержат ROM. Подробности вы сможете узнать из документации на ваш дисковый контроллер, там же приведены все необходимые сведения о работе с программой форматирования, записанной в ROM.
В качестве примера мы рассмотрим программу низкоуровневого форматирования 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 или Format/Verify. Вам будет нужно указать требуемый фактор чередования (Interleave) и другие параметры, для которых лучше использовать те значения, которые предложит сама программа форматирования.
Обычно контроллер сам определяет оптимальные значения для сдвига цилиндров (Cylinder Skew ) и сдвига головок (Head Skew). Если ваша программа не может сама определить оптимальное значение для сдвига цилиндров, используйте величину, равную одной трети от общего количества секторов на дорожке. Аналогично, для сдвига головок укажите значение 1.
Некоторые НМД используют резервирование секторов (Sector Sparing). При этом на каждой дорожке резервируется один сектор для замены дефектного. Резервирование секторов заметно сокращает общую емкость НМД, поэтому используйте резервирование только для дисков, имеющих значительное количество дефектов.
После низкоуровневого форматирования не забудьте запустить программу fdisk.exe , создать с ее помощью разделы на диске и отформатировать их программой format.com .
Программа 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.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 версии 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
Так как 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 для переключения режимов работы драйвера рекомендуется следующая последовательность действий:
Программа fastopen.exe - еще одно средство кеширования, предоставляемое операционной системой MS-DOS. Это резидентная программа, запоминающая в оперативной памяти расположение файлов и каталогов на диске. При ее использовании сильно уменьшается время доступа к файлам.
Однако драйвер smartdrv.exe обеспечивает большую эффективность, так как он может хранить в оперативной памяти не только расположение файлов и каталогов, но и любые часто используемые файлы или участки файлов. Поэтому мы не рекомендуем вам использовать программу fastopen.exe .
Практика показывает, что независимо от емкости установленного в вашем компьютере накопителя на жестком диске, рано или поздно вы придете к выводу, что у вас слишком маленький диск и вам больше некуда записывать новые программы или данные.
В этой главе мы рассмотрим основные причины переполнения диска и наметим возможные пути решения проблемы. Будут также описаны средства, позволяющие динамически сжимать данные, хранящиеся на диске. Мы также расскажем о том, как отформатировать дискеты на нестандартную, повышенную емкость.
Частая причина переполнения диска - лишние файлы, которые вам либо совсем не нужны, либо нужны крайне редко. Следует убедиться в том, что вы понимаете назначение каждого файла, расположенного на диске. Очень часто диск оказывается заполнен временными файлами и резервными копиями рабочих файлов. Общий размер таких файлов может оказаться весьма значительным.
Многие текстовые процессоры и другие программы создают файлы резервных копий. Эти файлы имеют расширение, начинающееся с символов $, {, или расширения .BAK, .TMP, .SYD, .SVD, а также некоторые другие. Если по какой-либо причине компьютер "завис", временные файлы, созданные, например, текстовым процессором Microsoft Word или приложениями Microsoft Windows остаются на диске и засоряют его. Размеры таких файлов могут быть весьма значительны - порядка нескольких Мбайт. Поэтому в случае зависания операционной системы удалите сами все временные файлы с расширением .TMP.
Вторая причина - наличие так называемых потерянных кластеров . Мы уже говорили о том, что MS-DOS хранит файлы в кластерах, причем файл может занимать много кластеров. Иногда (в основном после "зависания" операционной системы) появляются кластеры, не описанные ни в одном каталоге. Эти кластеры помечены в таблице размещения файлов FAT как занятые файлами, но доступа к этим файлам нет (так как доступ к файлам возможен только через каталоги). Потерянные кластеры занимают место на диске, и это место нельзя освободить иначе, чем с помощью специальных средств ремонта файловой системы.
И, наконец, третья причина заключается в том, что для файла любого размера (даже для файла размером 1 байт) выделяется по крайней мере один кластер. Кластер может иметь размер от одного до 8 секторов, то есть даже для хранения файла размером 1 байт расходуется от 512 до 4096 байт дисковой памяти. Если на вашем диске хранятся сотни маленьких файлов, все вместе они могут занимать несколько сотен Кбайт дисковой памяти.
Поэтому необходимо регулярно проверять содержимое диска и удалять лишние файлы. Кроме того, очень полезно периодически запускать программы, проверяющие целостность файловой системы MS-DOS.
Существуют специальные программы-архиваторы, сжимающие файлы и хранящие их в виде библиотеки (архива). Каждый архив располагается в отдельном файле и может содержать сотни сжатых файлов.
На чем основано сжатие файлов?
На устранении избыточности информации.
Поясним это на примере. Пусть у нас есть обычный текстовый файл, причем в тексте используется русский язык.
Во-первых, в тексте обычно имеются повторяющиеся символы. Например, символ пробела. В тексте могут быть строки, содержащие десятки стоящих рядом символов пробела. В процессе сжатия программа может записать в архив вместо этих пробелов только один, снабдив его коэффициентом повторения. Если имеется десять пробелов, стоящих рядом, в архив можно записать число 10, а вслед за ним - символ пробела.
Во-вторых, вспомним, как расположены буквы русского алфавита в кодовой таблице символов. Они занимают там правую половину таблицы с кодами, большими чем 128. Это означает, что для всех русских букв старший бит всегда равен единице. Следовательно, для русского текста этот бит содержит избыточную информацию.
Реальные программы-архиваторы используют более сложные алгоритмы устранения избыточности информации, обеспечивая сжатие файлов в 1,5 - 2 раза (в зависимости от содержимого файлов).
Архиваторы удобно использовать для сжатия редко используемых файлов. Причем вы можете легко сжимать все файлы в каталоге, включая и подкаталоги, а затем, при необходимости, восстанавливать их снова.
Что же касается дискет, то для увеличения эффективности их использования можно предложить два взаимодополняющих способа:
Существуют специальные программы, позволяющие отформатировать дискеты двойной плотности (360 Кбайт) на емкость 720 или 800 Кбайт. Дискеты высокой плотности (1,2 Мбайт или 1,44 Мбайт) можно отформатировать на емкость 1,6 - 1,8 Мбайт.
В этом нет ничего фантастического. Такие программы используют большее по сравнению со стандартным число дорожек и большее по сравнению со стандартным число секторов на одной дорожке. За счет этого увеличивается общее количество секторов на дискете, и, соответственно, общая емкость дискеты.
Самый простой способ избавиться от потерянных кластеров - запустить утилиту MS-DOS scandisk.exe .
Можно также использовать старую программу chkdsk.exe . Например, если вам надо проверить файловую систему на диске C: и исправить ее возможные повреждения (в том числе устранить потерянные кластеры), введите из системного приглашения следующую команду:
chkdsk c: /F
Все имеющиеся цепочки потерянных кластеров будут оформлены в виде файлов. Эти файлы будут находиться в корневом каталоге проверяемого диска и иметь имена FILEnnnn.CHK. Вы можете просмотреть содержимое этих файлов, так как среди них могут быть нужные вам файлы, которые были потеряны при зависании операционной системы. Затем все ненужные файлы можно удалить.
Другой способ устранения потерянных кластеров заключается в использовании специальной утилиты Norton Disk Doctor из пакета утилит Нортона . Эта диалоговая утилита способна выполнить диагностику и ремонт файловой системы даже в случае ее сильных повреждений.
Операционная система MS-DOS имеет в своем составе средство динамического сжатия файлов, записанных на диске, которое называется DriveSpace .
При использовании этого средства на одном из логических дисков компьютера создается специальный файл с именем вида drvspace.00<n>, имеющий атрибуты "скрытый" и "системный". Специальный драйвер, который не виден для пользователя (не подключается в файле config.sys , а встраивается до начала обработки этого файла) делает из него еще один логический диск. За счет устранения избыточности информации размер этого логического диска получается примерно в полтора-два раза больше, чем размер использованного для него файла.
Если ваш компьютер имеет жесткий диск емкостью, например, 40 Мбайт, вы можете разместить на нем файл системы DriveSpace размером 30 Мбайт. При этом у вас останется 10 Мбайт на жестком диске, и еще прибавится примерно 60 Мбайт - это размер созданного логического диска.
Принцип работы диска DriveSpace прост: при записи файлов на этот диск они сжимаются, при чтении - восстанавливаются. Разумеется, сжатие несколько замедляет процесс записи, однако замедление небольшое и незаметно в большинстве случаев.
Нет смысла хранить на диске DriveSpace архивы, созданные программами-архиваторами. Файлы архивов не содержат избыточной информации и практически не сжимаются. Не рекомендуется также использовать диск DriveSpace для создания временных и рабочих файлов, для организации виртуальной памяти в среде Windows . В последнем случае замедление ввода и вывода может отрицательно сказаться на производительности системы.
Больше всего диск DriveSpace подходит для хранения программ, редко изменяемых текстов, справочных баз данных. Вы можете перенести на него большинство программ MS-DOS, но будьте осторожны с драйверами и резидентными программами, которые используются на этапе загрузки операционной системы. Их лучше хранить на обычном диске.
Для установки системы DriveSpace введите из приглашения MS-DOS команду drvspace:
c:\>drvspace
На экране появится сообщение, показанное на рис. 6.5.
Рис. 6.5. Установка системы DriveSpace
Для продолжения установки нажмите клавишу <Enter>.
Вам будет предложено выбрать один из двух возможных вариантов установки системы DriveSpace (рис. 6.6): быстрая автоматическая установка (Express Setup) и ручная установка (Custom Setup).
Рис. 6.6. Выбор варианта установки системы DriveSpace
При выборе автоматической установки система сама преобразует диск C: таким образом, что все записанные на нем файлы станут сжатыми. Диск C: будет преобразован в диск DriveSpace .
Очевидно, что это не всегда удобно, так как на диске C: могут находиться каталоги для временных файлов, файл виртуальной памяти Microsoft Windows или другие файлы, которые по тем или иным причинам нежелательно хранить на диске DriveSpace .
Поэтому мы рекомендуем вам выбрать второй вариант установки (Custom Setup).
Вам будет предложено два варианта создания диска DriveSpace (рис. 6.7). Вы можете преобразовать существующий диск в диск DriveSpace, выбрав строку "Compress an existing drive", или создать новый использовав для него свободное пространство, расположенное на любом диске. В последнем случае надо выбрать строку "Create a new empty compressed drive".
Рис. 6.7. Два варианта создания диска DriveSpace
Выберите второй вариант, так как он не затронет существующие файлы и, следовательно, наиболее безопасен.
Вам будет предложено выбрать логический диск, на котором будет создан скрытый системный файл drvspace.00<n> (рис. 6.8). Вы можете выбрать любой диск, содержащий свободное пространство достаточного размера.
Рис. 6.8. Выбор диска для размещения файла drvspace.00<n>
На следующем этапе вы сможете определить параметры создаваемого диска DriveSpace (рис. 6.9).
Рис. 6.9. Определение параметров создаваемого диска DriveSpace
В поле "Free space to leave on drive ...:" вы можете указать размер свободного пространства, который останется на выбранном для файла drvspace.00<n> логическом диске.
В поле "Compression ratio for new drive" можно указать желаемую степень сжатия файлов, размещенных на диске DriveSpace . Чем больше сжатие, тем будет медленнее выполняться процедура записи на диск DriveSpace. Фактическая степень сжатия может отличаться от указанной, так как она определяется в первую очередь содержимым сжимаемых файлов.
И, наконец, в поле "Drive letter of new drive" можно выбрать обозначение для создаваемого диска DriveSpace .
После выбора параметров переместите курсор на строку "Continue" и нажмите клавишу <Enter>. На экране появится сообщение о запуске процедуры создания диска DriveSpace (рис. 6.10). Вы можете приступить к созданию диска, нажав клавишу <C>, или вернуться к определению параметров, нажав клавишу <Esc>.
Рис. 6.10. Сообщение о запуске процедуры создания диска DriveSpace
В процессе создания диска DriveSpace будет выполнен перезапуск MS-DOS для загрузки драйвера drvspace.bin . Этот драйвер находится в корневом каталоге диска C:, причем его не нужно подключать в файле config.sys . Напомним, что драйвер drvspace.bin загружается до начала обработки файла config.sys.
На следующем этапе установки будет запущена программа scandisk.exe , которая входит в состав MS-DOS версии 6.22 и предназначена для проверки и ремонта файловой системы (рис. 6.11, 6.12).
Рис. 6.11. Проверка файловой системы
Рис. 6.12. Проверка поверхности диска
Далее произойдет второй перезапуск операционной системы MS-DOS, вслед за чем диск DriveSpace станет доступным для использования.
Система DriveSpace позволяет сэкономить сотню-другую долларов, отложив на время покупку нового жесткого диска. Однако при интенсивной работе рано или поздно это придется делать. В этом случае вам лучше удалить диск DriveSpace, предварительно выгрузив с него все нужные вам файлы.
Для удаления диска запустите программу drvspace.exe из командного приглашения MS-DOS. Теперь, когда система DriveSpace установлена, с помощью этой программы можно выполнять различные операции над дисками DriveSpace, такие, как проверка, дефрагментация и т. п. (рис. 6.13).
Рис. 6.13. Работа с диском DriveSpace
Для того чтобы удалить диск DriveSpace , выберите его из меню, расположенном в центре экрана. Затем из меню "Drive" выберите строку "Delete...". На экране появится предупреждающее сообщение о том, что содержимое диска будет уничтожено (рис. 6.14).
Рис. 6.14. Удаление диска DriveSpace
Выберите кнопку "OK". После этого программа удалит диск DriveSpace и освободит место, которое было занято файлом drvspace.00<n>.
В процессе установки системы DriveSpace в файл config.sys добавляется следующая строка:
DEVICE=C:\DOS\DRVSPACE .SYS /MOVE
Можно было бы подумать, что файл drvspace.sys и есть драйвер системы DriveSpace . Однако это не так.
Драйвер drvspace.sys выполняет перемещение драйвера drvspace.bin в область старших адресов памяти для освобождения основной памяти. При этом сам драйвер drvspace.sys после инициализации удаляется из оперативной памяти.
Для того чтобы полностью отключить систему DriveSpace , после удаления всех дисков DriveSpace описанным выше методом вы должны удалить из корневого каталога диска C: следующие файлы:
drvspace.bin , drvspace.ini
Затем нужно перезапустить операционную систему MS-DOS.
В настоящее время наиболее распространены дискеты с двойной (Double Density - DD) и высокой (High Density - HD) плотностью, имеющие диаметр 5,25" и 3,5", соответственно.
При помощи программы format.com можно отформатировать эти дискеты следующим образом.
Дискеты диаметром 5.25":
Плотность | Емкость отформатированной дискеты |
Двойная (DD) | 360 Кбайт |
Высокая (HD) | 1,2 Мбайт |
Дискеты диаметром 3,5":
Плотность | Емкость отформатированной дискеты |
Двойная (DD) | 720 Кбайт |
Высокая (HD) | 1,44 Мбайт |
В документации по операционной системе MS-DOS подробно описано, как форматировать дискеты двойной и высокой плотности.
Чем отличаются дискеты высокой плотности от дискет двойной плотности? Отличия заключаются в материале магнитного покрытия дискеты. Дискеты высокой плотности имеют более качественное (и, соответственно, более дорогое) магнитное покрытие, допускающее более плотную запись информации.
Мы уже рассказывали вам о том, что на дисках (и
на дискетах) информация записывается на
дорожках. Каждая дорожка делится на секторы. Ниже
мы приведем количество используемых дорожек и
секторов для дискет, отформатированных
стандартным образом:
Формат | Количество дорожек и секторов |
5,25" DD, 360 Кбайт | 40 дорожек, 9 секторов |
5,25" HD, 1,2 Мбайт | 80 дорожек, 15 секторов |
3,5" DD, 720 Кбайт | 40 дорожек, 9 секторов |
3,5" HD, 1,44 Мбайт | 80 дорожек, 18 секторов |
Оказывается, на дискетах как двойной, так и высокой плотности можно расположить большее по сравнению с приведенным в этой таблице количество дорожек и секторов!
При этом емкость дискеты увеличится. Например, дискеты DD диаметром 5.25" часто форматируют на емкость 800 Кбайт (стандартная емкость такой дискеты - 360 Кбайт). Дискета, отформатированная на 800 Кбайт, имеет 80 дорожек и 10 секторов.
Для нестандартного форматирования вам потребуются специальные программы. Наиболее распространены программы 800.com , 900.com , fdformat.exe . Кроме того, вы можете воспользоваться программой pu_1700.com , созданной Ю. И. Панковым.
Для форматирования дискет на повышенную емкость, а также для использования таких дискет вам необходимо запустить одну из перечисленных выше программ. Лучше всего это сделать, указав такую программу в файле autoexec.bat, например:
c:\utility\800.com
Если запущена программа 800.com , вы можете форматировать дискеты обычной программой format.com , задавая при помощи параметров /T: и /N: нужное количество дорожек и секторов на дорожке. Например:
format a: /T:80/N:10
В данном случае дискета, вставленная в дисковод A:, будет форматироваться на емкость 800 Кбайт.
Вы сможете пользоваться дискетой, отформатированной на повышенную емкость, только в том случае, если была запущена программа 800.com или аналогичная.
Какие параметры можно задавать программе format.com ? Это зависит от типа НГМД, установленного в вашем компьютере. Встречаются 4 типа:
При использовании программы 800.com вместе с НГМД
для дискет двойной плотности диаметром 5,25" или
3,5" для программы format.com можно указывать
следующие параметры:
Емкость дискеты, Кбайт | Параметры |
360 | /T:40 /N:9 |
400 | /T:40 /N:10 |
Если у вас дисковод высокой плотности, вам
также доступны и другие параметры:
Емкость дискеты, Кбайт | Параметры |
720 | /T:80 /N:9 |
800 | /T:80 /N:10 |
1200 | /T:80 /N:15 |
1360 | /T:80 /N:17 |
1440 | /T:80 /N:18 |
1600 | /T:80 /N:20 |
Последние две строки таблицы описывают параметры, доступные только для НГМД высокой плотности при использовании дискет диаметром 3,5".
Программа pu_1700.com является функциональным аналогом программы 800.com , но обладает большими возможностями. После ее запуска вы можете задавать программе format.com следующие параметры:
FORMAT drv:[/T:tt][/N:nn][другие параметры]
Здесь:
Приведем таблицу значений объемов
отформатированной дискеты в зависимости от типа
НГМД, типа дискеты и параметров форматирования tt
и nn:
Параметры программы format.com | Емкость дискеты, на которую рассчитан НГМД, Кбайт | Объем отформатированной дискеты, байт | |||||
tt | nn | 360 | 720 | 1200 | 1440 | Норма | Максимум |
40-41 | 9 | + | + | + | + | 362,496 | 371,712 |
- '' - | 10 | + | + | + | + | 398,848 | 409,086 |
80-83 | 9 | + | + | + | 724,480 | 752,168 | |
- '' - | 10 | + | + | + | 806,460 | 837,120 | |
- '' - | 15 | + | + | 1212,928 | 1259,008 | ||
- '' - | 16 | + | + | 1294,848 | 1344,000 | ||
- '' - | 17 | + | + | 1376,768 | 1427,968 | ||
- '' - | 18 | + | + | 1457,664 | 1512,960 | ||
- '' - | 19 | + | 1539,584 | 1596,928 | |||
- '' - | 20 | + | 1620,480 | 1681,920 | |||
- '' - | 21 | + | 1702,400 | 1765,888 |
Приведем пример команды форматирования дискеты HD на емкость 1702,400 байт:
format a:/t:80/n:21 /u
Параметр /u необходим для того, чтобы программа format.com не делала попыток сохранения на форматируемой дискете данных, нужных программе unformat.com для восстановления содержимое дискеты после ошибочного форматирования.
Приведем описание некоторых параметров программы pu_1700.com (полностью параметры описаны в документации к программе, составленной на русском языке и распространяемой в файле pu_1700.doc).
Этот параметр допустим только при первом запуске программы.
Следующие параметры можно указывать как при первом запуске программы, так и при последующих ее перезапусках:
В заключение пара советов относительно использования нестандартно отформатированных дискет.
Если вы помните историю появления персональных компьютеров, то наверное знаете, что объем оперативной памяти в них был порядка сотни-двух Кбайт. В то время этого было достаточно для всех имеющихся тогда программ.
Фирма IBM в своем первом персональном компьютере IBM PC использовала процессор Intel 8086, способный непосредственно адресовать 1024 Кбайт оперативной памяти. Из этого адресного пространства фирма IBM использовала для операционной системы и программ 640 Кбайт памяти, зарезервировав оставшиеся 384 Кбайт для системного постоянного запоминающего устройства, дисплейного адаптера и другой аппаратуры.
Однако по мере того, как компьютеры становились все мощнее и мощнее, для них находились новые задачи, требующие все большего объема оперативной памяти. Первоначально заложенного в архитектуру IBM PC объема памяти программ (640 Кбайт) стало недостаточно для решения сложных задач.
С появлением процессора Intel 80286, способного адресовать до 16 Мбайт оперативной памяти, возникли предпосылки для расширения доступного программам адресного пространства. Архитектура компьютера IBM PC/AT позволяет использовать для программ все 16 Мбайт памяти.
Казалось бы, все хорошо, однако даже если ваш компьютер содержит 16 Мбайт оперативной памяти, операционная система MS-DOS без принятия специальных мер может использовать для себя и программ только первые 640 Кбайт. При этом программам пользователя достается обычно не более 500 - 550 Кбайт основной оперативной памяти, остальная память используется MS-DOS для своих собственных нужд.
Это связано с тем, что MS-DOS использует так называемый реальный режим работы процессора 80286. В реальном режиме процессор 80286 становится несколько улучшенным аналогом старого процессора 8086, и может адресовать только первые 1024 Кбайт памяти.
Возникает странная ситуация, когда память есть, но пользоваться ей нельзя!
Для того, чтобы как-то задействовать память, расположенную выше границы 1024 Кбайт (эту память называют расширенной), в старых версиях MS-DOS использовались драйверы электронного диска ramdrive.sys и кеш дисковой памяти smartdrv.sys. Драйвер электронного диска предназначен для организации быстродействующего квазидиска. Этот диск ведет себя так же, как и обычный, но за счет того, что данные пересылаются в оперативную память, такой диск работает очень быстро.
Начиная с версии 5.0 операционная система MS-DOS может использовать расширенную память и для решения других задач.
В частности, в расширенной памяти (вернее, в ее небольшой начальной части размером около 64 Кбайт, называющейся верхней памятью) могут располагаться модули, буферы и рабочие области самой операционной системы. Если в компьютере используется процессор i386 или i486, можно поместить в расширенную память резидентные программы и драйверы.
Если расположить в расширенной памяти MS-DOS резидентные программы и драйверы, для программ останется порядка 600 - 620 Кбайт памяти. Это на 100 - 140 Кбайт больше, чем при использовании старых версий MS-DOS.
А если ваша программа имеет размер 2 Мбайт и к тому же ей требуется обрабатывать массивы данных размером в 1 Мбайт?
Для решения таких задач в среде MS-DOS можно использовать дополнительную память. Эта память располагается на отдельной плате, которая вставляется в слот расширения материнской платы компьютера. Дополнительная память может быть установлена даже в компьютерах, выполненных на базе процессоров 8086 или 8088, которые не могут адресовать память за границей одного Мбайта. Как это может быть?
Здесь все дело в том, что дополнительная память (которая может по размеру достигать 16 или даже 32 Мбайт) отображается с помощью специальных схем в область памяти, лежащую ниже границы 1024 Кбайт, то есть в стандартную память. Для работы с расширенной памятью выделяются 4 окна в области адресов выше границы 640 Кбайт, но ниже 1024 Кбайт. Причем общий размер этих окон составляет 64 Кбайт.
Программы обращаются по адресам, соответствующим одному из четырех окон. Эти адреса находятся в пределах первых 1024 Кбайт. Но специальное аппаратное устройство отображает в эти окна часть дополнительной памяти, поэтому фактически программа будет работать с дополнительной памятью.
При необходимости окна могут двигаться по дополнительной памяти, позволяя программам адресовать весь объем дополнительной памяти.
Запомните: расширенная память и дополнительная память - разные вещи!
Еще одно замечание, касающееся использования программами дополнительной памяти: для получения доступа к дополнительной памяти программы должны непосредственно вызывать драйвер дополнительной памяти. То есть для того чтобы использовать дополнительную память, программы должны быть составлены специальным образом.
Для иллюстрации сказанного выше на рис. 6.15 изображена упрощенная карта распределения оперативной памяти .
Рис. 6.15. Упрощенная схема распределения оперативной памяти
Область от 0 до 640 Кбайт - это так называемая стандартная память. В области стандартной памяти располагаются векторы прерываний, часть ядра операционной системы, резидентные программы, драйверы. В эту же область загружаются запущенные на выполнение программы. В результате оптимизации нам было бы желательно максимально расширить пространство, доступное программам, переместив ядро операционной системы, драйверы и резидентные программы в расширенную память.
Область от 640 до 1024 Кбайт зарезервирована фирмой IBM для аппаратного обеспечения. В ней находятся:
Память с адресами от 640 до 1024 Кбайт - это зарезервированная память, она играет ключевую роль в механизме расположения драйверов и резидентных программ в расширенной памяти. Эта память также используется драйверами дополнительной памяти.
Как правило, зарезервированная память задействована не полностью, в ней есть свободные области. Эти свободные области и используются при работе с расширенной или дополнительной памятью.
Драйвер emm386.exe , входящий в MS-DOS, отображает свободные области на расширенную память, пользуясь виртуальным режимом работы процессоров i386, i486 или Pentium (режим виртуального процессора 8086). К сожалению, в этой книге нет места для детального описания виртуального режима работы. Для нас важно, что процессор, находясь в виртуальном режиме при использовании драйвера emm386.exe адресуется к свободным областям зарезервированной памяти. При этом процессор использует механизм адресации, соответствующий реальному режиму работы. Однако на эти свободные области зарезервированной памяти отображаются участки расширенной памяти, находящиеся выше границы 1024 Кбайт.
Если поместить в свободные участки зарезервированной памяти, отображаемые на расширенную память, драйверы или резидентные программы, физически они окажутся в расширенной памяти. Но сами они об этом не будут знать ничего, продолжая работать так, как будто они находятся в стандартной памяти ниже границы 1024 Кбайт.
Драйверы дополнительной памяти также используют свободные участки зарезервированной памяти. Они располагают там окно размером 64 Кбайт, обычно отображаемое с помощью специальной аппаратуры на дополнительную память, установленную на отдельной плате. Как мы уже говорили, дополнительная память не входит в адресное пространство процессора и не может адресоваться им непосредственно ни в реальном, ни в защищенном режиме. Она отображается в окно, расположенное в зарезервированной памяти и программы адресуются к ней только через это окно.
Разумеется, программы могут передвигать окно, адресуя через него по частям всю дополнительную память.
Область от 1024 Кбайт и выше - это расширенная память. Ее начальный участок от 1024 до 1088 Кбайт - область старшей памяти (High Memory Area - HMA ). Именно в эту область MS-DOS может помещать значительную часть своего ядра и области данных. Интересной особенностью области HMA является то, что она доступна для процессора, работающего в реальном режиме, то есть как раз в том режиме, который использует MS-DOS.
Как такое может быть? Для того, чтобы это понять, необходимо вспомнить механизм сегментной адресации памяти, используемый процессорами серии Intel. Физический адрес получается из двух компонент - сегментного адреса и смещения. Каждая компонента - двухбайтовая. Для вычисления адреса в реальном режиме работы процессора к сегментной компоненте, сдвинутой влево на четыре бита, прибавляется компонента смещения.
Например, пусть у нас имеется логический адрес 1234h:0005h. Сегментный адрес равен 1234h, а смещение - 0005h. Сдвигаем сегментный адрес влево на четыре бита, получаем 12340h. Затем прибавляем смещение 0005h и получаем физический адрес 12345h.
Задавая какое-нибудь значение сегментного адреса и меняя смещение, мы можем адресоваться к любому сегменту памяти размером 64 Кбайт в пределах первого Мбайт адресного пространства.
А что получится, если задать сегментный адрес FFFFh, то есть самое большое значение для сегментного адреса?
Очевидно, что конец области оперативной памяти, простирающейся от 0 до 1024 Кбайт, имеет адрес FFFFh:000Fh, так как этому логическому адресу соответствует физический адрес FFFFFh. Адрес FFFFFh - это самый большой адрес, который может быть задан при использовании 20-разрядной адресации. А реальный режим работы процессора использует именно 20-разрядную адресацию.
Зададим себе вопрос: что произойдет, если, например, при записи в память будет указан логический адрес FFFFh:0010h?
Если в вашем компьютере установлен процессор 8086 или 8088, то произойдет запись в самую первую ячейку оперативной памяти, имеющую физический адрес 00000h, так как перенос из девятнадцатого разряда в двадцатый будет игнорирован (адресные разряды в процессоре 8086 или 8088 нумеруются от 0 до 19).
Процессоры 80286, i386, i486 и Pentium имеют большее количество адресных линий, поэтому перенос в двадцатый разряд не будет потерян. Произойдет адресация памяти за пределами первого Мбайта!
За счет двадцатого разряда адресной шины процессор в реальном режиме получает доступ к памяти в диапазоне адресов от FFFFh:0010h до FFFFh:FFFFh. Это почти 64 Кбайт (без шестнадцати байт). Именно эти 64 Кбайт MS-DOS может использовать для размещения своего ядра и областей данных. Все что вам нужно для того чтобы использовать таким образом область старшей памяти HMA - это две строки в файле config.sys :
DEVICE=C:\DOS\HIMEM.SYS DOS=HIGH
Возможности, имеющиеся у вас для оптимизации использования оперативной памяти, сильно зависят от типа процессора и наличия расширенной или дополнительной памяти.
Эти компьютеры не оснащены расширенной памятью, но в него может быть установлена плата дополнительной памяти. Если есть дополнительная память, вы можете разместить в ней кеш диска или электронный диск .
Что еще вы можете сделать для увеличения объема доступной программам оперативной памяти? Можно сократить до минимума количество используемых драйверов и резидентных программ.
Ниже мы перечислим драйверы, входящие в состав
MS-DOS. Пользуясь этой таблицей, вы сможете принять
решение о необходимости включения того или иного
драйвера в состав вашей конфигурации
операционной системы.
Драйвер | Назначение драйвера и рекомендации по использованию |
ega.sys | Сохранение текущего состояния видеоадаптера EGA. Этот драйвер вам нужен только в том случае, если вы работаете с оболочкой DOSSHELL или Windows и при этом ваш компьютер оснащен видеоадаптером EGA |
country.sys | Этот драйвер нужен вам только в одном случае - если вы используете интернациональную поддержку, встроенную в MS-DOS, например, работаете с символами кириллицы |
display.sys | Аналогично предыдущему драйверу |
keyboard.sys | Аналогично предыдущему драйверу |
printer.sys | Аналогично предыдущему драйверу |
himem.sys | Драйвер предназначен для управления расширенной памятью. Он бесполезен на тех компьютерах, в которых отсутствует расширенная память. В частности, на компьютерах IBM PC и IBM PC/XT |
ansi.sys | Драйвер обеспечивает расширенное управление консолью и используется достаточно редко. Подключайте его только в том случае, если он действительно необходим для правильной работы используемых вами программ, о чем можно узнать из документации на программы |
ramdrive.sys | Этот драйвер предназначен для организации электронного диска в оперативной памяти. Используйте его только в том случае, когда в компьютере имеется расширенная или дополнительная память достаточного объема. Учтите, что более предпочтительным способом увеличения быстродействия дисковой подсистемы является кэширование дисковой памяти |
smartdrv.exe | Драйвер нужен для организации кеширования дисковой памяти. Его использование оправдано только на тех компьютерах, которые имеют расширенную или дополнительную память |
driver.sys | Этот редко используемый драйвер предназначен для поддержки нестандартных или внешних НГМД |
setver.exe | Драйвер позволяет "обмануть" программы, не рассчитанные на использование MS-DOS версии 6.22. Когда такие программы пытаются определить версию MS-DOS, драйвер setver.exe возвращает заранее оговоренное для каждой программы значение, например, 3.30. Если вы не запускаете программы, рассчитанные на конкретную версию MS-DOS, у вас нет необходимости использовать этот драйвер |
emm386.exe | Этот драйвер используется для управления расширенной памятью в компьютерах, выполненных на базе процессоров i386, i486 или Pentium. Он совершенно бесполезен, если ваш компьютер содержит процессоры 8086, 8088, NEC20 или 80286 |
Если ваш компьютер содержит процессор 80286, вы можете предпринять следующие шаги, направленные на более эффективное использование оперативной памяти:
Первое, что необходимо сделать при оптимизации использования памяти - перенести ядро операционной системы MS-DOS, ее буферы и рабочие области в область адресов, лежащую выше границы 1024 Кбайт. Эта возможность появилась в MS-DOS начиная с версии 5.0.
После установки MS-DOS на компьютере IBM PC/AT файл config.sys будет содержать следующие две строки:
DEVICE=C:\DOS\HIMEM.SYS DOS=HIGH
Первая строка нужна для подключения драйвера himem.sys , управляющего расширенной памятью. Этот драйвер необходим для размещения MS-DOS выше границы 1024 Кбайт. Вторая строка указывает, что MS-DOS и все ее рабочие области должны быть размещены в расширенной памяти.
Учтите, что эти две строки должны располагаться в файле config.sys именно в том порядке, в котором они были приведены выше - вначале необходимо подключить драйвер himem.sys , а затем указать MS-DOS о необходимости загрузки ее ядра и областей данных в старшие адреса памяти строкой DOS=HIGH.
После того, как вы переместили операционную систему в область адресов выше 1024 Кбайт, займитесь размещением кеша дисковой подсистемы и электронного диска. Здесь все зависит от того, сколько и какой памяти установлено в вашем компьютере. Вам необходимо найти компромисс между размером кеша и дополнительной или расширенной памятью, отведенной используемому программному обеспечению. При этом вы можете воспользоваться рекомендациями, приведенными в разделе, посвященной настройке дисковой системы компьютера.
Если ваш компьютер содержит процессор i386, i486 или Pentium, к перечисленным выше возможностям добавляется еще две:
Остановимся подробнее на второй возможности.
Обычно компьютеры с процессорами i386, i486 или Pentium оснащены расширенной памятью объемом от 2 до 16 Мбайт (вам могут встретиться компьютеры с еще большим объемом расширенной памяти). Однако все еще встречаются программы рассчитаны на использование дополнительной памяти.
Получается, что у вас есть очень много расширенной памяти, но вам-то нужна дополнительная! Как быть в этом случае? Не покупать же еще и плату дополнительной памяти!
В этом случае необходимо воспользоваться драйвером emm386.exe , входящим в состав MS-DOS. Этот драйвер использует часть расширенной памяти для эмуляции в ней дополнительной памяти. То есть у вас становится меньше расширенной памяти, но появляется дополнительная.
Если вы - обладатель компьютера с процессором 80386 или 80486, вам доступна возможность переноса драйверов и резидентных программ в расширенную память, а также эмуляция дополнительной памяти с использованием расширенной памяти.
Для реализации этих возможностей подключите драйвер emm386.exe :
device=c:\dos\emm386.exe [параметры]
Эта строка должна располагаться в файле config.sys после строки, подключающей драйвер himem.sys .
В качестве параметра вы можете указать размер эмулируемой дополнительной памяти в Кбайтах. Например, если вам нужна дополнительная память размером 1 Мбайт, используйте следующую строку:
device=c:\dos\emm386.exe 1024
Если вы не укажите размер эмулируемой дополнительной памяти, будет использовано значение по умолчанию - 256 Кбайт.
Для того, чтобы полностью отключить эмуляцию дополнительной памяти, задайте параметр NOEMS:
device=c:\dos\emm386.exe NOEMS
В этом случае драйвер emm386.exe будет использоваться только для загрузки драйверов и резидентных программ в расширенную память.
Однако даже если вы подключите драйвер emm386.exe , ваши резидентные программы и драйверы не попадут автоматически в расширенную память. Для того, чтобы разместить драйверы и резидентные программы в расширенной памяти, вам необходимо сделать следующее:
Для примера приведем образец файла config.sys , в котором подключен драйвер emm386.exe :
device=c:\dos\himem.sys device=c:\dos\emm386.exe 2048 dos=high,umb devicehigh=c:\dos\smartdrv.sys 320 devicehigh=c:\dos\ansi.sys
В первой строке подключается драйвер himem.sys , необходимый для управления расширенной памятью. Во второй строке подключается драйвер emm386.exe , который используется для эмуляции двух Мбайт дополнительной памяти и для загрузки резидентных программ и драйверов в расширенную память. В третьей строке указывается, что MS-DOS должен быть загружен в верхние адреса памяти, и кроме того, что должна быть использована возможность размещения драйверов и резидентных программ в расширенной памяти.
Последние две строки - пример размещения драйверов в расширенной памяти.
Для загрузки в расширенную память резидентных программ воспользуйтесь командой LOADHIGH или LH . Приведем фрагмент файла autoexec.bat, в котором используется загрузка резидентных программ в расширенную память:
LOADHIGH c:\cyryllic\cyrkeyb c LH c:\mouse.com
Первая строка демонстрирует загрузку в расширенную память драйвера клавиатуры, вторая - драйвера мыши.
Отметим еще один важный момент, связанный с использованием драйвера emm386.exe .
В состав MS-DOS входит программа mem.exe , предназначенная для исследования оперативной памяти. Запустив ее с параметром /f, вы увидите на экране примерно следующее:
Free Conventional Memory: Segment Total ------- ----------------- 033F9 224 (0K) 03407 88 992 (87K) 049C1 353 248 (345K) Total Free: 442 464 (432K) Free Upper Memory: Region Largest Free Total Free Total Size ------ -------------- -------------- -------------- 1 0 (0K) 0 (0K) 125 808 (123K) 2 0 (0K) 0 (0K) 8 192 (8K)
Программа отображает объемы свободных блоков стандартной памяти и блоков верхней памяти.
Обратите внимание, что область верхних блоков памяти фрагментирована. В ней выделяются области с номерами 1 и 2.
При загрузке драйверов и резидентных программ в верхнюю область памяти можно указать параметр /L, указав в нем номер используемой для загрузки области:
DEVICEHIGH /L:1=C:\DOS\SETVER.EXE LH /L:1 C:\DOS\MSCDEX.EXE /S /D:MITSUMI LH /L:2 SWAKEYB
Зная объем оперативной памяти, необходимый для драйверов и резидентных программ, вы можете расположить их в верхних блоках памяти оптимальным образом, указав для каждого драйвера или резидентной программы нужную область. Для определения объема резидентной части драйверов и резидентных программ вы можете использовать все ту же программу mem.exe , запустив ее с параметром /D.
Если имеется несколько свободных блоков верхней памяти и десяток драйверов, а также резидентных программ, "ручное" их размещение в областях верхней памяти может отнять много времени. К счастью, в состав MS-DOS входит программа memmaker.exe , выполняющая такое размещение в автоматическом режиме. Иногда после автоматической оптимизации бывает полезно выполнить "ручную доводку", перемести некоторые резидентные программы в другие области верхней памяти.
Детальное обсуждение программы memmaker.exe вы сможете найти во втором томе нашей серии книг "Персональный компьютер - шаг за шагом", который называется "Операционная система Microsoft Windows . Руководство пользователя". Заметим только, что программа memmaker.exe добавляет к номеру области еще и размер резидентной части драйвера или программы:
DEVICEHIGH /L:1,12048 =C:\DOS\SETVER.EXE LH /L:1,28288 C:\DOS\MSCDEX.EXE /S /D:MITSUMI LH /L:2,1520 SWAKEYB
Как ни мало время, требующееся для записи данных в оперативную память или для чтения данных из памяти, но оно отлично от нуля. Обычно процессор компьютера обрабатывает данные быстрее, чем они могут быть получены из оперативной памяти.
Для согласования скорости работы процессора со скоростью работы оперативной памяти часто приходится искусственно занижать производительность процессора, вставляя специальные такты ожидания во временной цикл работы процессора с памятью.
Разумеется, вы не сможете повлиять на быстродействие установленной в вашем компьютере оперативной памяти, не заменив микросхемы памяти на более быстрые. Но в некоторых компьютерах предусмотрена возможность работы как с быстрой памятью, так и с медленной. Для этого в CMOS-памяти необходимо задать количество используемых при работе с памятью тактов ожидания.
В CMOS-памяти хранится конфигурация аппаратных средств компьютера. После изменения конфигурации компьютера необходимо обновить содержимое CMOS-памяти. Для этого предназначена специальная программа, часто называемая SETUP-программой или программой установки конфигурации.
SETUP-программа может запускаться при включении компьютера (если нажать определенную клавишу, обычно <Del>), либо эта программа может поставляться на дискете вместе с компьютером.
Если ваш компьютер оснащен быстродействующей памятью, необходимо убедиться в том, что процессор не вставляет циклы ожидания при обращении к памяти.
Это особенно необходимо, если в вашем компьютере установлен процессор i386 или i486. Такие компьютеры обычно комплектуются быстрой памятью. И если в CMOS-памяти указано, что надо вставлять циклы ожидания при работе с памятью, компьютер не будет работать с максимальной производительностью.
Другая возможность повышения скорости работы с памятью, но на этот раз с постоянной памятью (BIOS), часто имеется в компьютерах, выполненных на процессорах i386 или i486. Эта возможность заключается в копировании содержимого относительно медленной постоянной памяти BIOS в специальную область быстродействующей оперативной памяти с последующим преобразованием адресов. Используемая область памяти имеет специальное название - теневая память.
При этом программы, обращаясь по адресам, принадлежащим BIOS, будут работать с быстрой оперативной памятью. Это значительно ускорит выполнение программ, активно обращающихся к BIOS.
Будет выполняться копирование BIOS в теневую память или нет - зависит от установки определенной ячейки CMOS-памяти. Для выбора правильного режима вам необходимо воспользоваться SETUP-программой.
Как правило, SETUP-программа описывается в документации на основную плату компьютера. Возможность изменения количества тактов ожидания и режим теневой памяти обычно имеются только в компьютерах, выполненных на процессорах i386, i486 и Pentium, однако бывают и исключения. Например, модели компьютеров фирмы SUMMIT, выполненные на основе процессора 80286, могут работать без тактов ожидания. В них также имеется возможность использования теневой памяти.