На главную
Подписка
Новости










Главная / MS-DOS / MS-DOS. РУКОВОДСТВО РАЗРАБОТЧИКА / Глава 3 / Блок операционной среды программы Сделать домашней страницей Добавить в избранное Написать писмо

НАЗАД СОДЕРЖАНИЕ ВПЕРЁД

Блок операционной среды программы

При загрузке программы в память MS-DOS всегда присоединяет в начало программы блок операционной среды (далее просто "среда"), запоминая в нем владельца блока памяти. На Рис.3-4 он показан как первый небольшой блок, который соотносится с каждой программой. Блок среды программы содержит собственную копию операционной среды MS-DOS. Среда MS-DOS представляет собой область, в которой запоминаются PATH (путь), COMSPEC (спецификация файла COMMAND.COM) и PROMPT (приглашения) вместе с любыми переменными, назначаемыми по команде SET (установить). Общей формой переменной среды является: NAME = строка . Формат блока среды приведен в примере, показанном на Рис.3-5.


Из Рис.3-5 можно видеть, что каждый элемент в блоке среды представляет собой строку в коде ASCII (American Standard Code for Information Interchange - Американский стандартный код для обмена информацией), завершаемую нулевым байтом. (Этот стандарт фирмой "Майкрософт" назван ASCIIZ). Весь список элементов заканчивается еще одним нулевым байтом, показанным на Рис.3-5 в качестве седьмого элемента. Элементы, предшествующие этому маркеру "конец списка", отображаются всякий раз при использовании команды SET. А что из себя представляют два элемента, следующие после маркера "конец списка"?


Недокументируемая возможность MS-DOS версии 3 и последующих версий состоит в том, что всякий раз при запуске процесса с помощью COMMAND.COM либо непосредственно, либо в ответ на функцию EXEC (выполнить), имя процесса помещается в блок среды процесса. На Рис.3-5 последние два элемента перед частью "не используемая" являются этим недокументируемым именем процесса. Имени процесса предшествует слово 0001h. Имя содержит собственное имя и путь процесса и запоминается в формате ASCIIZ. Из Рис.3-5 можно увидеть, что этот блок среды относится к процессу SHOWMEM.


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


Сравните в примере отображения SHOWMEM на Рис.3-4 800-байтный размер среды DOS (второй элемент с именем "SHELL") со средами RETRIEVE и SHOWMEM в 64 и 272 байта, соответственно. Несмотря на то, что DOS должна резервировать 800 байт, при загрузке RETRIEVE впереди файла AUTOEXEC.BAT среда содержит меньше, чем 64 байта. После завершения файлом AUTOEXEC.BAT установок PATH и PROMPT и изменения других переменных, среда должна увеличиться приблизительно до 200 байт.


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



         .------------------------------.
         | COMSPEC = C:\COMMAND.COM\* | 0 |
         |----------------------------------------------.
         | INCLUDE = C:\msc\*include;c:\masm\*include\* | 0 |
         |-----------------------------------------------
         | LIB = c:\msc\*lib | 0 |
         |-----------------------
         | ECHO = OFF | 0 |
         |-------------------.
         | PROMPT = $p$g | 0 |
         |-------------------------------------------------------------.
         |PATH = C:\DOS;C:\BIN;C:\BAT;C:\UTILS;C:\MASM\*;C:\WIN;C:\WS| 0 |
         |--------------------------------------------------------------
         | 0 |
         |-------.
         | 0001h |
         |-----------------------------------.
         | C:\GUIDE\EXAMPLES|SHOWMEM.EXE | 0 |
         |------------------------------------
         | Не используемая  |
         |                  |
         |/\/\/\/\/\/\/\/\/\|

                                Рис.3-5. Блок среды


НАЗАД СОДЕРЖАНИЕ ВПЕРЁД

Hosted by uCoz