|
|
|
|
Блок операционной среды программы
При загрузке программы в память 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. Блок среды
|
|
|