Фигурнов В.Э. IBM PC для пользователя. Книга содержит подробное и доступное для начинающих описание возмож
Скачать 5.4 Mb.
|
Глава 39 Использование оперативной памяти в DOS MS DOS создавалась для микропроцессора Intel-8088, который мог работать только с одним Мбайтом памяти. Из этого Мбайта 384 Кбайта были зарезервированы для хра- нения BIOS и использования содержащимися в компьютере контроллерами. Так что для DOS, драйверов, резидентных программ и запускаемых пользователем прикладных программ можно было использовать лишь 640 Кбайт оперативной памяти, а этого ко- личества очень скоро стало не хватать. Вскоре после появления MS DOS были выпущены микропроцессоры, умеющие обра- щаться с гораздо большим количеством памяти (Intel-80286 Ч с 16 Мбайтами, Intel- 80286 Ч с 4 Гбайтами). Но заложенные в MS DOS принципиальные ограничения не позволяли DOS и DOS-программам использовать память сверх 640 Кбайт. Для обхода этих ограничений пришлось разрабатывать различные способы и трюки, которых было придумано достаточно много. В результате кроме обычной памяти (то есть памяти в пределах 640 Кбайт) появились EMS-память, расширенная память, верхняя память, область НМА и т.д. Как говорится в детских стихах: "хозяйка с базара домой принес- ла: картошку, капусту, морковку, горох, петрушку и свеклу. Ох!..". Но у пользователей говорить "ох" имеется куда как больше оснований: та хозяйка положила все эти овощи в суп, а пользователю приходится готовить из каждого овоща отдельное блюдо, иначе говоря, обращаться с перечисленными выше видами памяти совершенно по-разному. Разобраться во всем этом не так-то просто, но мы попробуем. Хтт",/.",- ХХч':' (., _; .ХХ.. Х. ^ j.,^ оперативной памяти в DOS Как говорилось ранее, операционная система DOS была рассчитана на компьютер с микропроцессором IntelЧ8088 или IntelЧ8086. А эти микропроцессоры могут обра- щаться только к одному Мбайту памяти. Поэтому DOS-программы могут обращаться только к первому Мбайту памяти, точнее, к памяти, имеющей адреса в первом Мбайте. Память, которую могут непосредственно использовать DOS-программы (и другие про- граммы, рассчитанные на микропроцессор Intel-8088), состоит из двух частей. Первые 640 Кбайт памяти могут использоваться прикладными программами и операци- онной системой. Как правило, эту часть памяти называют обычной памятью (по- английски Ч conventional memory). Обычно младшие адреса обычной памяти занимает DOS, драйверы и резидентные программы, а остальная часть свободна для использова- ния прикладными программами. .,Х;(, Остальные адреса памяти Ч от 640 Кбайт до 1 Мбайта Ч ("верхняя память*, по- английски Ч upper memory) зарезервированы для служебных целей, в частности: Х для хранения BIOS Ч программ, обеспечивающих тестирование компьютера, на- чальную загрузку ОС, а также выполнение основных низкоуровневых услуг ввода- вывода (обычно BIOS располагается в старших адресах первого Мбайта памяти); Х для передачи изображения на экран; Х для хранения различных расширений BIOS, которые поставляются вместе с неко- торыми контроллерами (видеоконтроллером, контроллером дисков и т.д.). " .;^ "in"<' Как правило, оперативная память, занятая BIOS и расширениями BIOS, дос- . тупна только для чтения, запись каких-либо данных туда невозможна, 1акая память назы- ] вается ROM (read only memory), а память, доступная и для чтения, и для записи Ч RAM Часть 7. DOS для опытного пользователя Объем свободной обычной памяти Барьер 640 Кбайт (random access rnernory, память с произвольным доступом). Содержимое ROM-памяти со- храняется и при выключении компьютера, а содержимое RAM-памяти Ч пропадает. Для DOS-программ особо важен объем свободной обычной памяти компьютера, то есть обычной памяти, не занятой DOS, драйверами и резидентными программами. Как пра- вило, общий объем обычной памяти компьютера составляет 640 Кбайт, из них от 16 до 100 Кбайт занято DOS, драйверами и резидентными программами. Остальная часть обычной памяти может использоваться прикладными программами. Итак, для DOS-программ доступная оперативная память должна была составлять не более 640 Кбайт. В начале 80-х годов, когда разрабатывался компьютер IBM PC, воз- можность работы с 640 Кбайтами была большим шагом вперед: остальные компьютеры тогда могли работать только с 64 Кбайтами памяти. Кстати, первые модели IBM PC были оснащены всего 256 Кбайтами памяти, хотя стоили около 5000 дол. Но очень скоро выяснилось, что для многих программ 640 Кбайт мало (тем более что из этих 640 Кбайт до 100 Кбайт могут занимать DOS и различные системные програм- мы Ч драйверы устройств и резидентные программы). А очень широкому кругу про- грамм (табличным процессорам, издательским системам, графическим редакторам, многим научным и инженерным программам и т.д.) для эффективной работы на реаль- ных задачах был необходим доступ к гораздо большему количеству памяти Ч как ми- нимум в несколько Мбайт. Ведь 640 Кбайт Ч это на поверку не так уж и много: даже одна матрица вещественных чисел размером 300х300 требует больше места! И очень скоро способы увеличения количества оперативной памяти, доступной про- граммам, были найдены. А именно, были внедрены два новых вида памяти Ч EMS- память и расширенная память. 39.2. EMS-память Что это такое Обозначение функционирование EMS-памяти Использование EMS-памяти В начале 80-х годов некоторые фирмы-производители оборудования для компьютеров стали выпускать платы расширения памяти (memory extension cards), содержащие дополнительные блоки памяти. Доступ к памяти на этих платах осуществляется через специальную программу Ч драйвер управления дополнительной памятью (expanded memory manager, EMM). Для обеспечения совместимости этих программ фирмами Lotus, Intel и Microsoft был разработан стандарт Ч спецификация дополнительной па- мяти (expanded memory specification, EMS). В настоящее время, как правило, исполь- зуется версия 4.0 этой спецификации Ч LIM EMS 4.0. В ней максимальный объем до- полнительной памяти составляет 32 Мбайта. Часто память, доступную через EMS-драйвер, называют EMS-памятью. В англоязыч- ной литературе принят также термин "expanded memory". Хотя максимальный объем EMS-памяти составляет 32 Мбайта, из них одновременно доступны могут быть не более 64 Кбайт. Действительно, если микропроцессор Intel- 8088 может работать с адресным пространством в 1 Мбайт, то 32 Мбайта туда помес- титься никак не могут. Поэтому для обмена с EMS-памятью используется специальное окно размером в 64 Кбайта. Это окно (по-английски оно называется EMS Frame) рас- положено в верхней памяти, то есть в адресах от 640 Кбайт до 1 Мбайта. А сама EMS- память разделена на страницы размером по 16 Кбайт, и в EMS-окне могут быть дос- тупны любые 4 страницы EMS-памяти. Таким образом, для чтения или записи любой страницы EMS-памяти надо обратиться к EMS-драйверу, который отобразит данную страницу в EMS-OKHO, после чего она станет доступной и с ней можно будет работать. Это, разумеется, весьма неудобно, так как заставляет программы заботиться о смене страниц памяти. Кроме того, это делает EMS-память значительно более медленной, чем обычная Ч ведь на смену страниц в окне требуется время. В начале 80-х годов EMS-память получила широкое распространение, так как это единственный способ увеличения количества памяти, пригодный для компьютеров класса IBM PC XT (с микропроцессором Intel-8088 или 8086). Многие DOS-программы (Microsoft Word, Ventura Publisher, Paradox и др.) могут использовать EMS-память, установленную в компьютере. При этом они обрабатывают большие объемы информа- ции значительно быстрее, так как им не приходится производить операции ввода-выво- да с диском для "подкачки" этой информации. Замечание. EMS-память используется в следующих программах, входящих в MS DOS: FastOpen, VSafe, в драйвере компакт-дисков MSCDEX и в драйвере электронного диска Глава 39. Использование оперативной памяти в DOS 'л.' 1 ' 14111." RAMDRIVE. В версиях 4 и 5 MS DOS EMS-память могла использоваться также и командой Buffers файла CONFIG.SYS и драйвером кэширования дисков SmartDrv. Однако уже в середине и конце 80-х годов, в связи с вытеснением компьютеров типа IBM PC XT компьютерами на основе микропроцессоров Intel-80286, 80386 и т.д., большую популярность приобрел другой способ увеличения количества доступной про- граммам памяти Ч применение расширенной памяти. По сравнению с EMS-памятью расширенная память значительно дешевле, удобнее в использовании, а доступ к ней осуществляется быстрее. Так что очень скоро EMS-платы вымерли, как мамонты. А для работы с программами, применяющими EMS-память, были созданы EMS-драйверы, которые используют для имитации (часто говорят Ч эмуляции) EMS-памяти часть расширенной памяти. В MS DOS, начиная с версии 5.0, входит такой драйвер для про- цессоров 80386 и выше Ч EMM386.ЕХЕ. ^ир^1"и'!ая память Определение ^Х"^<:Х. '!')11>,31){-'.р!НИ(" P^iC!lii'':PХ'! и 14:; l;.jM>i !И Расширители DOS Другая возможность увеличения размера доступной программам оперативной памяти появилась в 1982 г., когда фирма Intel стала выпускать микропроцессоры Intel-80286. Эти и последующие микропроцессоры (80386, 80486, Pentium и Pentium Pro) обеспе- чивают совместимость с Intel-8088, но предоставляют и множество других возможно- стей. В частности, эти микропроцессоры могут непосредственно работать с оператив- ной памятью большего размера, чем 1 Мбайт. На системной плате компьютеров с эти- ми микропроцессорами может устанавливаться более 1 Мбайта оперативной памяти: теоретически Ч до 16 Мбайт для компьютеров на основе микропроцессоров Intel- 80286 и 80836SX, и до 4 Гбайт для остальных компьютеров. Однако память с адресами свыше 1 Мбайта в этих микропроцессорах доступна только в так называемом защищенном режиме, в котором не может работать DOS. А в ре- жиме совместимости с Intel-8088, в котором работает DOS Ч этот режим называется обычным, или реальным (real mode) Ч программам, как и на IBM PC XT, доступна память только в пределах первого Мбайта. Исключением являются лишь первые 64 Кбайта расширенной памяти (см. ниже). Часть оперативной памяти сверх первого мегабайта, доступного в реальном режиме, называется расширенной памятью (extended memory). Долгое время расширенную память компьютера можно было использовать только для размещения "электронного диска" или кэш-буфера для диска. Дело в том, что операци- онная система DOS работает в обычном режиме процессора, поэтому для доступа к расширенной памяти необходимо переключаться из обычного в защищенный режим ра- боты процессора и обратно, что не так-то просто Ч ведь вся организация памяти в этих режимах совершенно различна. Да и стандарта на то, как обращаться с расши- ренной памятью, не было, что делало невозможным одновременную работу с расши- ренной памятью нескольких программ. Однако в середине 80-х годов эти проблемы были решены. Были разработаны стандарт по работе с расширенной памятью (XMS) и реализующие его драйверы расширенной памяти (например, HIMEM.SYS), которые предоставили удобные средства для использования расширенной памяти DOS- программам. Так что теперь большинство программ использует именно расширенную память, а не EMS-память. К числу таких программ относятся Windows 3.1 и Windows 95. Для многих DOS-программ производители указывают, сколько обычной и расши- ренной памяти им необходимо. Если количество требуемой обычной памяти невелико, то часто указывают лишь общее количество памяти, которое должен иметь компьютер. 3пм^ч:11 inc. Расширенная память используется в следующих программах, входящих в MS DOS: в драйвере электронного диска RAMDRIVE, драйвере кэширования дисков SmartDrv и антивирусной программе VSale. Кроме того, в первые 64 Кбайта расширенной памяти DOS может перемещать практически все свое ядро (см. ниже), освобождая обычную память для прикладных программ. DOS была создана для работы в реальном режиме процессора, и DOS-программы тоже должны были работать в реальном режиме процессора Ч ведь DOS может предостав- лять свои услуги только в реальном режиме процессора. Однако для таких программ расширенная память (кроме ее первых 64 Кбайт) не может использоваться непосредст- венно, что весьма неудобно. Для обработки данных в расширенной памяти необходимо с помощью запроса к XMS-драйверу переместить блок расширенной памяти в первый Мбайт, то есть в обычную или верхнюю память, там выполнить обработку и затем с Часть 7. DOS для опытного пользователя помощью запроса к XMS-драйверу переместить этот блок обратно. По существу, при этом расширенная память превращается в некое подобие диска, только очень быстрого. Более эффективное решение состоит в другом Ч если сама программа выполняется в защищенном режиме процессора, то расширенная память доступна ей непосредствен- но. При этом код программы и обрабатываемые данные могут располагаться в любом месте доступной расширенной памяти. А для того, чтобы при этом программа могла пользоваться услугами DOS, многими фирмами (Phar Lap, Borland и др.) были созданы специальные системные программы Ч расширители DOS (DOS-extenders) Ч позво- ляющие вызывать функции DOS из защищенного режима микропроцессора. Поэтому во многих программах, требующих эффективной работы с большими объемами данных Ч компиляторах, базах данных, играх и т.д., применяются расширители DOS. Приме- ром может служить известная игра DOOM. Разумеется, Windows (начиная с версии Windows/386 2.0) также включает в себя внутренний расширитель DOS. 39.4. Первые ПОЧЕМУ ОНИ И! ;'....:Ui особую роль Обозначение Испол1-.:юп,1ии('.' '/W-i b^ ^'ui Особую роль в расширенной памяти играют первые 64 Кбайта расширенной памяти. Дело в том, что при создании микропроцессора Intel-80286 фирма Intel допустила ошибку, из-за которой в реальном (совместимом с Intel-8088) режиме оказалось воз- можным получать доступ к первым 64 Кбайтам (точнее, 65520 байтам) расширенной памяти. Некоторое время эта особенность рассматривалась как курьез, но затем было осознано, что из нее можно извлечь немалую пользу. Начиная с версии 5.0, MS DOS может перемещать на компьютерах с микропроцессором Intel-80286 и выше свое ядро в первые 64 Кбайта расширенной памяти. Это позволяет значительно увеличить объем обычной памяти, доступной DOS-программам. По-английски первые 64 Кбайта расширенной памяти часто называются High Memory Area, сокращенно Ч НМА. Для перемещения ядра DOS в НМА надо использовать драйвер HIMEM.SYS и указать в файле CONFIG.SYS команду DOS=HIGH (или DOS=HIGH,UHB ). Подробнее об этом гово- рится в главе 40. Х ^ Х . Ошибка при создании Intel-80286 состояла в следующем. Адрес каждого байта памяти в микропроцессоре Intel-8088 задавался с помощью двух двухбайтовых чисел: сег- мента и смещения. Он вычислялся по формуле: адрес = сегментх16+смещение. Но если адрес получался больше 1 Мбайта (220), то лишний Мбайт отбрасывался (ведь Intel-8088 мог работать только с 1 Мбайтом памяти), и обращение происходило в начало (первые 64 Кбайта) памяти. Впрочем, на практике никто этот способ адресации не использовал, поэто- му при разработке Intel-80286 об отбрасывании "лишнего" Мбайта в режиме совместимости с Intel-8080 забыли. В результате стало возможным обращаться и к первым 64 Кбайтам (точнее, 65520 байтам) расширенной памяти. 39.5. Эффективное ис^^ль. Проблема дефици" обычной ЧЗМЯЧ.1 Хотя многие прикладные DOS-программы научились работать с расширенной памятью и/или EMS-памятью, место в первых 640 Кбайт оперативной памяти не перестало быть крайне дефицитным ресурсом. Наоборот, оснащение компьютеров значительно расширилось, многие компьютеры стали снабжаться различными дополнительными устройствами: дисководами для компакт-дисков, стримерами, сканерами, магнитоопти- ческими дисками и т.д., а драйверы для доступа к этим устройствам занимают память. Да и разные полезные резидентные программы, Ч программы кэширования дисков, работы со сжатыми дисками и т.д., Ч занимают много оперативной памяти. Между тем, разработчики прикладных программ, работающих в DOS, вовсе не собирались сажать создаваемые программы на режим жесткой экономии, ведь в расширенной па- мяти они могли хранить только данные, а код программы должны были держать в обычной памяти. Так что многие программы требовали не менее 550-570 Кбайт сво- бодной памяти. В результате некоторые пользователи оказались перед крайне непри- ятным выбором: или работать с тем или иным устройством, или запускать нужную им прикладную программу. Опытные пользователи выходили из положения, создавая раз- |