Наследование дескрипторов




МИНИСТЕРСТВО ОБРАЗОВАНИЯ И НАУКИ УКРАИНЫ

ЗАПОРОЖСКИЙ НАЦИОНАЛЬНЫЙ УНИВЕРСИТЕТ

Кафедра информационных технологий

 

КУРСОВАЯ РАБОТА

По дисциплине: Системное программирование

Тема: Программная реализация средствами ОС Windows процесса с индивидуальными настройками

 

 

Выполнил

ст. гр. 4324

Коцарев Максим

 

Запорожье

Реферат

Курсовая работа содержит:

1. 12 страниц;

2. 2 иллюстрации;

3. 2 приложения;

4. 3 литературных источника.

 

Объектом исследования: процессы: порождение; наследование дескрипторов; синхронизация между процессами.

 

Цель работы: знакомство с принципами работы Windows API.

 

Методы исследования:

1.Теоретическое изучение процессов.

2. Практическая разработка программы на языке С++, которая реализует запуск консольного процесса и 4-х его копий (и далее рекурсивно) с индивидуальными настройками для каждого процесса и его окна.

Вывод: в данной курсовой работе рассмотрены процессы, рекурсивное создание их копий, а также их порождение и наследование. Так же практически реализована программа, которая создаёт процессы с индивидуальными настройками.

 

Ключевые слова: процессы, рекурсия, дескрипторы, наследование, синхронизация.

 


Оглавление

Раздел 1.Теоретическая часть. 4

Процессы.. 4

Категории процессов. 5

Порождение процессов. 5

Наследование дескрипторов. 6

Синхронизация между процессами. 7

Раздел 2. Практическая часть. 8

Задание. 8

Выполнение. 8

Заключение. 9

Список использованных источников. 10

Приложение А.. 11

Приложение Б.. 12


Раздел 1.Теоретическая часть

Процессы

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

· объекта ядра, через который операционная система управляет процессом. Там же хранится статистическая информация о процессе,

· адресного пространства, в котором содержится код и данные всех EXE- и DLL модулей. Именно в нем находятся области памяти, динамически распределяемой для стеков потоков и других нужд.

Рис 1 - Операционная система выделяет потокам кванты времени по принципу карусели

Процессы инертны. Чтобы процесс что-нибудь выполнил, в нем нужно создать поток. Именно потоки отвечаю заисполнение кодa, содержащегося в адресном пространстве процесса. В принципе, один процесс может владеть несколькими потоками, и тогда они "одновременно" исполняют код в адресном пространстве процесса.

Для этого каждый поток должен располагать собственным набором регистров процессора и собственным стеком. В каждом процессе есть минимум один поток. Если бы у процесса не было ни одного потока, ему нечего было бы делать на этом свете, и система автоматически уничтожила бы его вместе с выделенным ему адресным пространством.

Чтобы все эти потоки работали, операционная система отводит каждому из них определенное процессорное время. Выделяя потокам отрезки времени (называемые квантами)по принципу карусели, она создает, тем самым, иллюзию одновременного выполнения потоков. Рис 1 иллюстрирует распределение процессорного времени между потоками па машине с одним процессором. Если в машине установлено более одного процессора, алгоритм работы операционной системы значительно усложняется (в этом случае система стремится сбалансировать нагрузку между процессорами).

При создании процесса первый (точнее, первичный) поток создается системой автоматически. Далее этот поток может породить другие потоки, те в свою очередь — новые и т. д.

 

Категории процессов

Процессы можно условно разбить на три категории:

- системные;

- фоновые (демоны);

- прикладные (пользовательские).

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

Фоновые процессы или демоны – это не интерактивные процессы, которые обычно запускаются при инициализации системы (после инициализации ядра) и обеспечивают работу различных подсистем. Например, системы терминального доступа, системы печати, системы сетевого доступа и другие. Демоны не связаны с пользовательскими сеансами работы и не могут непосредственно управляться пользователями.

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

 

Порождение процессов

 

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

Когда один процесс порождает другой, то порождающий процесс называется родительским (parent), а порождаемый процесс называется дочерним (child).

 

Наследование дескрипторов

 

Дочерний процесс, чтобы наследовать некоторые из дескрипторов своего родителя, но не наследует другие. Чтобы заставить дескриптор быть унаследованным, Вы должны сделать две вещи:

 

1. Определить, что дескриптор должен быть унаследован, когда Вы создаете, открываете или дублируйте дескриптор. Функции создания обычно используют для этой цели член bInheritHandle структуры SECURITY_ATTRIBUTES. Функция DuplicateHandle использует параметр bInheritHandle.

2. Определить, что наследуемые дескрипторы должны быть унаследованы тогда, когда Вы вызываете функцию CreateProcess с параметром bInheritHandles установленным в значение ИСТИНА (TRUE). Дополнительно, чтобы наследовать стандартный ввод, стандартный вывод данных и обработку стандартной ошибки, член dwFlags структуры STARTUPINFO должен включить в себя флажок STARTF_USERSTDHANDLES.

 

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

 

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

 

 



Поделиться:




Поиск по сайту

©2015-2024 poisk-ru.ru
Все права принадлежать их авторам. Данный сайт не претендует на авторства, а предоставляет бесплатное использование.
Дата создания страницы: 2017-06-11 Нарушение авторских прав и Нарушение персональных данных


Поиск по сайту: