Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
1222.doc
Скачиваний:
50
Добавлен:
17.04.2015
Размер:
944.13 Кб
Скачать
      1. Запуск программы

Одной из основных задач, которые должна решать система, является запуск программ на выполнение. Для этого предназначена системная функция Exec, которая может быть вызвана либо программойCOMMAND.COM, выполняющей команду пользователя, либо непосредственно программой пользователя, через программное прерываниеint 21h.

Функция Execтребует указания ряда параметров, из которых важны:

  • Имя файла запускаемой программы. Если имя не содержит пути к каталогу, то файл ищется в текущем каталоге, а также в каталогах, перечисленных в переменной PATH.

  • Командная строка. Так принято называть строку параметров, передаваемых программе. При запуске программы по команде пользователя командная строка задается после имени программы, она отделена от имени пробелом. Анализ содержимого командной строки полностью возлагается на запускаемую программу, система лишь передает эту строку программе.

  • Адрес массива, содержащего параметры среды программы. Если он не задан, то для запускаемой программы создается копия среды программы-родителя.

В MS-DOSиспользуются два формата выполняемых программ.

Файл формата COMсодержит только коды позиционно-независимой программы, которая может быть без изменения загружена для исполнения по любому свободному адресу памяти. Все программа должна помещаться в единственном сегменте, поэтому размер файла ограничен 64 Кб.

Файл формата EXEпредставляет собой перемещаемую программу. Файл состоит из заголовка, словаря перемещений и собственно кода. Информация в заголовке позволяет указать размер части файла, которая должна загружаться в память при запуске программы, максимальный и минимальный размер памяти, дополнительно резервируемой для размещения данных, начальный адрес стека, адрес запуска программы. Размер файла практически не ограничен, но размер загружаемой части должен быть в пределах, предоставляемыхDOS, т.е. примерно 500 – 550 Кб.

Первые два байта EXE-файла содержат сигнатуру (признак) файла форматаEXE, в качестве которой используются две буквы 'MZ'1. Считается, что это инициалы программиста Марка Збиковского, который участвовал в разработкеMS-DOS.

При запуске программы система выполняет следующие действия:

  • Выделяет два непрерывных блока памяти: для параметров среды (блок среды) и для самой программы (блок PSP). Для программы, как правило, выделяется максимально возможный непрерывный блок памяти, если только в заголовкеEXE-файла не задан меньший размер.

  • Определяет размер загружаемой части программы (для COM-файла это весь файл), и считывает из файла коды программы.

  • Для EXE-файла выполняет настройку программы на адрес загрузки, прибавляя этот адрес к тем местам программы, которые перечислены в словаре перемещений.

  • Формирует в начале блока программы массив, который называется PSP(ProgramSegmentPrefix). ВPSPсодержатся, в частности, адрес блока среды, адрес возврата в родительскую программу, адрес и размер таблицыJFT, сама эта таблица, командная строка программы.

  • Заполняет первые 5 элементов таблицы JFT(стандартные хэндлы), копируя их изJFTродительской программы.

  • Заносит начальные значения в регистры процессора.

  • Запоминает адрес PSPпрограммы в качестве идентификатора текущего процесса (PID,ProcessIDentifier).

  • Наконец, выполняет переход на адрес запуска программы. Для COM-файла этот адрес следует сразу заPSP, дляEXE-файла в заголовке может быть указан любой адрес.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]