Читайте также:
|
|
ОС MS DOS поддерживает функцию EXEC (выполнить) для запуска одной программы из другой. Это функция 4Bh int 21h. Исходную программу называют родителем, а загружаемую и выполняемую - ребенком или дочерней. Каждая программа представлена самостоятельным файлом типа.COM или.EXE.
Как родительская программа, так и дочерняя являются самостоятельными процессами. Организуется процесс системным загрузчиком, роль которого выполняет функция EXEC. При запуске программы с командной строки функцию EXEC вызывает командный процессор COMMAND.COM. Эту функцию может вызвать другая оболочка DOS или пользовательская программа. Образуется процесс, который может образовать следующий процесс вызовом функции EXEC и т.д. Такая динамическая загрузка позволяет организовать иерархические программные комплексы, в которых родительский процесс в зависимости от условий инициирует те или иные дочерние процессы, а те в свою очередь могут образовывать процессы следующего уровня.
Поскольку MS DOS не поддерживает мультипрограммирование, каждый процесс выполняется только поочередно, как подпрограммы. В мультипрограммировании каждый процесс выполняется параллельно с другими процессами, в т.ч. и родительский процесс с его дочерними процессами.
В функцию EXEC через прерывание 4Bh передаются в качестве параметров адрес строки ASCIIZ с именем файла с дочерней программой, адрес EPB (EXEC parameter Block) - блок параметров EXEC и режим «загрузить и выполнить».
Поскольку при запуске родительского процесса MS DOS выделяет ему всю память, необходимо освободить неиспользуемую память функцией DOS 4Ah. Освободившаяся память будет использована для размещения дочернего процесса.
После освобождения памяти следует подготовить блок параметров EXEC (EPB). EPB содержит сегментный адрес строки среды и сегмент и смещение командной строки.
В родительском процессе строка среды включает в себя копию CONFIG.SYS, а также последнее значение PATH, все строки команд SET и команду PROMPT. Это официальное окружение. За официальным окружением, начиная с MS DOS 3.0, следуют дополнительные строки. Первая из дополнительных строк содержит полный путь файла родительского процесса. Каждая строка имеет вид ASCIIZ. Пример окружения в мнемонике Ассемблера:
db `BREAK=OFF`,0
db `BUFFERS=20`, 0
db `COMSPEC=C:\DOS\COMMAND.COM`, 0
db `PROMPT=$p$g`, 0
db `WP=C:\WORDPROC`, 0
db `PATH=d:\;c:\dos;c:\uтils`, 0
Дата добавления: 2015-10-02; просмотров: 68 | Нарушение авторских прав
<== предыдущая страница | | | следующая страница ==> |
Префикс программного сегмента PSP | | | Db 0 ; конец дополнительного окружения |