Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Lektsii_OS_chast_2.docx
Скачиваний:
5
Добавлен:
01.07.2025
Размер:
1.55 Mб
Скачать

Описатель, командная строка, и переменные окружения процесса.

Любому .exe и .dll модулю, загруженному в адресное пространство процесса, присваивается специальная системная характеристика, которая называется описателем процесса. Для каждого процесса эта характеристика является уникальной, и передается в программу основной функцией первичного потока как первый параметр этой функции. Значение описателя используется в ходе выполнения процесса при вызовах из процесса системных функций, загружающих в память те или иные ресурсы. Конкретное значение описателя равно базовому адресу той части адресного пространства процесса, в которую загружается образ .exe или .dll файла. Значение этого адреса определяется компоновщиком на этапе создания исполняемого файла.

Для ряда широко используемых систем программирования этот адрес имеет фиксированное значение (0x00400000). Значение этого адреса для любого процесса можно получить, если в прикладной программе вызвать системную функцию GetModuleHandle (). Параметром этой функции является строка символов, описывающая полное имя .exe или .dll файла, и заканчивающаяся нулями.

При создании, новому процессу передается строка символов, которая называется командной строкой. Она представляет собой полное имя исполняемой программы входного потока. В момент запуска программы этого потока стартовая функция читает эту строку, после чего её содержимое используется при создании процесса. Кроме того, командная строка может анализироваться и использоваться в программе любого потока процесса. Её можно прочитать, используя системную функцию GetCommandLine (). Функция возвращает адрес командной строки.

С любым процессом связывается также структура данных, которая называется «блок переменных системного окружения». Физически, он представляет собой область памяти, в которой содержатся текстовые строки, описывающие переменные системного окружения процесса. Строки имеют следующий общий формат:

<VarName1>=<VarValue1>\0

Переменные окружения используются в программах потоков процесса для детальной настройки этих программ, в частности, в них указываются полные имена файлов, каких-либо иных программ или областей данных.

После запуска программы потока, в ней проверяется наличие и значения соответствующих переменных, и реализуется соответствующая настройка программы.

В системе существует исходный набор переменных системного окружения, который хранится в файле автозапуска autoexec.bat. Переменные, представленные в этом файле доступны всем процессам, которые запускаются в текущем сеансе работы ОС.

Для работы с переменными системного окружения имеются две системные функции:

  • GetEnvironmentVariable ();

  • SetEnvironmentVariable ().

Первая функция осуществляет чтение системного окружения процессу с помощью описателя, а с помощью второй осуществляется добавление, модификация, удаление переменных системного окружения.

Создание процессов.

Для создания любого процесса служит основное системное средство, а именно – системная функция CreateProcess (), которая вызывается в прикладной программе.

Прим. В существующих системах программирования имеются дополнительные средства создания процессов, представленные в виде соответствующих классов.

Функция CreateProcess имеет следующий формат вызова:

CreateProcess (P1, P2,…, P9);

В результате выполнения этой функции, система создает объекты ядра типа «процесс» с начальным значением параметра, который называется счетчиком числа пользователей процесса, равным единице. Затем, система выделяет для нового процесса область ВАП и загружает в него программный код и данные всех .exe и .dll файлов процесса. Затем формируется объект ядра типа «поток» для первичного потока нового процесса. Перед запуском программы этого потока выполняется стартовая функция системы программирования. Затем начинают выполняться программные коды основной функции первичного потока.

Функция CreateProcess имеет несколько параметров (9), назначение и смысл которых позволяют получить более подробную информацию о действиях системы при выполнении данной функции.

Значение и смысл параметров:

  1. Представляет собой указатель на полную командную строку процесса. При выполнении функции CreateProcess эта строка читается и из неё выделяется имя исполняемого файла программы первичного потока. Если в имени этого файла полный путь доступа не указан, то функция осуществляет поиск файла, просматривая несколько каталогов:

  1. каталог, содержащий .exe-файл запускаемого процесса;

  2. текущий каталог создаваемого процесса;

  3. системный каталог Windows;

  4. основной каталог Windows;

  5. каталоги, перечисляемые в файле автозапуска;

После нахождения нужного исполняемого файла, система выполняет уже упомянутые выше действия – создает объект типа «процесс», выделяет область ВАП, и т. д.;

  1. Также и 3. Определяют атрибуты защиты объектов «процесс» и «поток». Они используются для дочернего процесса, который запускается из исходного. Эти атрибуты могут устанавливаться системой по умолчанию, либо могут задаваться пользователем с помощью двух системных структур данных;

  2. -/-

  3. Имеет логический тип и определяет возможность наследования в дочернем процессе описателя родительского процесса. Если true, то система передает дочерним процессам наследуемые описатели, и не передает в противном случае;

  4. Задает флаги, которые определяют дополнительные свойства создаваемого процесса. Таких флагов несколько, и они могут комбинироваться с помощью операции «или»:

  1. флаг, разрешающий в случае его установки выполнять отладку дочернего процесса, а также всех других процессов, которые могут быть порождены дочерним;

  2. флаг, позволяющий в случае его установки создавать новый процесс и, в то же время, приостанавливать запуск его первичного потока. Это позволяет родительскому процессу изменять содержимое памяти в адресном пространстве дочернего процесса, а также изменять приоритет первичного потока дочернего процесса, и выполнять другие действия. После выполнения всех предварительных изменений запуск дочернего процесса может быть разрешен;

  3. флаги (3), которые определяют порядок работы с консольными (текстовыми) окнами, создаваемыми в родительском или дочернем процессах;

  4. флаги (2), определяющие порядок выполнения в системе шестнадцатиразрядных программ. Для таких программ в системе создается специальный режим работы, который называется виртуальной DOS-машиной (VDM). Флаги определяют, является ли эта машина одной для всех шестнадцатиразрядных программ, либо для каждой из них создается своя отдельная VDM. Кроме того, данный параметр позволяет задавать процессу один из шести возможных классов приоритета, а именно:

  1. простаивающий;

  2. ниже обычного;

  3. обычный;

  4. выше обычного;

  5. высокий;

  6. реального времени.

Классы приоритета влияют на распределение процессорного времени между процессами и потоками;

  1. Представляет собой указатель на блок памяти, где хранятся строки переменных системного окружения;

  2. Устанавливает текущий диск и текущий каталог для дочернего процесса;

  3. Представляет собой указатель на системную структуру данных STARTUPINFO. Элементами этой структуры являются различные вспомогательные характеристики процесса, как то:

  1. имя рабочего стола;

  2. заголовок консольного окна;

  3. координаты (x; y) для верхнего левого угла окна программы;

  4. ширина и высота окна в пикселях;

  1. Представляет собой указатель на системную структуру данных PROCESS_INFORMATION. В элементах этой структуры функция CreateProcess в ходе своего выполнения записывает описатели объектов ядра типа «процесс» и типа «поток», а также их идентификаторы. Эти параметры используются при завершении работы функции CreateProcess.

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