Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Экзамен / Answers (20-40).docx
Скачиваний:
212
Добавлен:
15.06.2014
Размер:
38.2 Кб
Скачать

21. Виды программных единиц в современных ос

В соврем-х ОС абстрактный процесс «расщепили» на части: программный процесс и нить (поток, thread).

Процесс – действия, выполняемые над конкретными данными под управлением программы.

Элементарные составляющие процесса - нити. В рамках процесса могут функционировать несколько нитей.

22. Программное порождение процессов в Unix

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

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

Оригинальное и очень изящное решение для создания процессов принято в Unix. Для создания процесса здесь служит системная функция fork(), которая даже не имеет аргументов! Эта функция по существу раздваивает процесс (fork - вилка), в результате в ОС оказываются два почти идентичных процесса.

Единственно различие между ними для ОС - их различные идентификаторы, под которыми они зарегистрированы в системе. Различие этих процессов для выполняемой программы в том, что процесс-родитель получает как результат функции fork() значение идентификатора нового - дочернего процесса, а дочерний процесс в качестве числа, возвращаемого функцией, получает нуль. Поэтому в программе, общей хотя бы на участке порождения дочернего процесса, анализом кода возврата функции можно решить, какой процесс в анализируемый момент обслуживает программа - родительский или дочерний. Дочерний процесс, как правило, распознав ситуацию и обнаружив себя, использует вызов запуска другой исполняемой программы. Имеется несколько вариантов системных функций такого запуска. Особенностью их в Unix является то, что они не создают новый процесс, но просто позволяют процессу сменить управляющую им программу.

23. Программное порождение процессов в Windows

BOOL CreateProcess(LPCTSTR pNameModule, LPCTSTR pCommandLine,

SECURITY_ATTRIBUTES *pProcessAttr,

SECURITY_ATTRIBUTES *pThreadAttr, BOOL InheritFlag,

DWORD CreateFlag, LPVOID penv, LPCTSTR pCurrDir,

STARTUPINFO *pstartinfo,

PROCESS_INFORMATION *pProcInfo)

pNameModule – указатель на строку имени процесса

pCommandLine – дублирует первый аргумент

pCurrDir – текущий каталог запускаемого процесса

InheritFlag – используется для задания наследования объектов дочерним процессом

CreateFlag – приоритет создаваемого процесса

STARTINFO – соответсвует структуре описания сесии в OS/2 и содержаит поля определяющие характеристики окна для создаваемого процесса

PROCESS_IFORMATION – содержит четыре поля возврата учётной информации из ОС после создания нового проуесса

STRUCT {

HANDLE hProcess;

HANDLE hThread;

DWORD dwProcessId;

DWORD dwThread;

}

Наиболее важные поля: hProcess, возвращает хэндл созданного процесса, и dwProcessId, возвращает идентификатор (условный номер) созданного процесса.

Функция memset записывает столько значений, заданных своим вторым параметром в память, начало которой задано первым аргументом, сколько указано числом в третьем аргументе.

Возвращаемое функцией CreateProcess значение типа BOOL позволяет вызывающей программе решить, как прошел запуск, удалось ли создать процесс. При создании возвращается TRUE, иначе FALSE.

Соседние файлы в папке Экзамен