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

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

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

 

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

 

 

 

 

 

 

 

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

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

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

 

 

 

 

 

 

Выполнил

ст. гр. 4324

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

Запорожье

2017

Реферат

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

  1. 29 страниц;

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

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

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

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

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

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

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

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

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

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

Оглавление

Процессы 4

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

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

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

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

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

Главной идеей, заложенной в основе синхронизации потоков в Win32, является использование объектов синхронизации и функций ожидания. Объекты могут находиться в одном из двух состояний — Signaled или Not Signaled. Функции ожидания блокируют выполнение потока до тех пор, пока заданный объект находится в состоянии Not Signaled. Таким образом, поток, которому необходим эксклюзивный доступ к ресурсу, должен выставить какой-либо объект синхронизации в несигнальное состояние, а по окончании — сбросить его в сигнальное. Остальные потоки должны перед доступом к этому ресурсу вызвать функцию ожидания, которая позволит им дождаться освобождения ресурса. 7

2.1 Задание 8

Заставьте консольный процесс запустить несколько своих копий (и далее рекурсивно). Убедитесь, что порождение процессов не будет бесконечным (остановитесь на 4 уровнях максимум). Для каждого процесса создать свое окно консоли с индивидуальными настройками. 8

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

Заключение 9

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

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

Приложение Б 11

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

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

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

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

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

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

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

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

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

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

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

- системные;

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

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

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

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

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

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

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

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