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

Сущность процесса как экземпляра выполняемого программы, состоящего из двух компонентов: объекта ядра и адресного пространства. Рассмотрение потоков кванты времени по принципу карусели. Наследование дескрипторов, характеристика основных способов.

Рубрика Программирование, компьютеры и кибернетика
Вид курсовая работа
Язык русский
Дата добавления 03.08.2017
Размер файла 601,4 K

Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже

Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.

21

Размещено на http://www.allbest.ru/

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

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

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

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

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

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

Выполнил

ст. гр. 4324

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

Запорожье 2017

Реферат

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

1. 12 страниц;

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

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

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

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

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

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

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

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

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

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

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

1.1 Процессы

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

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

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

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

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

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

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

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

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

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

- системные;

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

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

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

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

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

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

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

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

дескриптор программа кванта

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

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

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

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

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

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

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

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

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

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

2.1 Задание

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

2.2 Выполнение

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

Заключение

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

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

1. М. Эллис, Б. Строуструп. Справочное руководство по языку C++ с комментариями: Пер. с англ. - Москва: Мир, 1992. 445с.

2. Стенли Б. Липпман. C++ для начинающих: Пер. с англ. 2тт. - Москва: Унитех; Рязань: Гэлион, 1992, 304-345сс.

3. Рихтер Дж. Windows для профессионалов: создание эффективных Win32-приложений с учетом специфики 64-разрядной версии Windows/Пер, с англ. -- 4-е изд. -- СПб: Питер; М.: Издательско - торговый дом «Русская Редакция», 2004. -- 749 с.

Приложение А

Листинг программы

#include <windows.h>

#include <stdio.h>

int main(intargc, char **argv)

{

inti;

charcmdline[256];

STARTUPINFO si;

PROCESS_INFORMATION pi;

if (argc< 2) {

printf("I am parent\n");

for(i=4; i; i--) {

si.cb = sizeof(si);

si.lpReserved = NULL;

si.lpDesktop = NULL;

si.lpTitle = "my process";

si.dwX = rand()%500;

si.dwY = 10;

si.dwXSize = 800;

si.dwYSize = 300;

si.dwXCountChars = 80;

si.dwYCountChars = 100;

si.dwFillAttribute= rand() & 0xFF;

si.dwFlags = STARTF_USEFILLATTRIBUTE|STARTF_USEPOSITION|STARTF_USESIZE;

si.wShowWindow = SW_SHOW;

si.cbReserved2 = 0;

si.lpReserved2 = NULL;

si.hStdInput = NULL;

si.hStdOutput = NULL;

si.hStdError = NULL;

sprintf(cmdline, "%s %d", argv[0], i);

CreateProcess(argv[0], cmdline, NULL, NULL, TRUE,CREATE_NEW_CONSOLE|NORMAL_PRIORITY_CLASS, NULL, NULL, &si, &pi);

CloseHandle(pi.hProcess);

CloseHandle(pi.hThread);

}

} else {

printf("I am slave number %s\n", argv[1]);

getchar();

}

return 0;

}

ПриложениеБ

Выводнаэкран

Рисунок 2

Размещено на Allbest.ru


Подобные документы

  • Виртуальная память и организация адресного пространства Windows NT4/2000: файл подкачки, PAE, Application Memory Tuning, Address Windowing Extensions. Производительность, архитектурные ограничения, RAM, 64–битные процессоры и адресные пространства.

    курсовая работа [3,5 M], добавлен 14.07.2012

  • Принцип работы регулятора громкости в ОС Windows. Требования к интерфейсу программного продукта, программному и техническому обеспечению. Выбор ядра для разработки приложения. Инсталляция и выполнение программы. Контекстная диаграмма и листинг приложения.

    курсовая работа [978,4 K], добавлен 18.06.2015

  • Использование драйвера режима ядра и управляющего приложения для создания системных потоков. Имитация обработки данных и организация задержек. Разработка драйвера на языке C++. Конфигурация тестового стенда. Точность изменения задержек и работы таймера.

    курсовая работа [182,4 K], добавлен 24.06.2009

  • Этапы проектирования и программная реализация интернет-магазина. Методы разработки его интерфейса - элементов и компонентов программы, которые способны оказывать влияние на взаимодействие пользователя с программным обеспечением. Защита интернет-магазина.

    контрольная работа [28,7 K], добавлен 02.10.2010

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

    курсовая работа [3,0 M], добавлен 07.06.2014

  • Реализация программы, созданной средствами языка C#. Предназначение Windows-приложения для решения комплекса задач. Определение состава форм с графиком функции. Вычисление коэффициентов полинома. Создание текстового поля для введения корней многочлена.

    курсовая работа [234,8 K], добавлен 13.11.2016

  • Написание автоматизированной информационной системы "Контроль и реализация товара для автосалона" в операционной системе Windows 2000 или Windows XP. Проектирование подсистемы на базе программы "1С:Предприятие", программная реализация ряда функций.

    дипломная работа [3,1 M], добавлен 29.04.2011

  • Дослідження внутрішньої структури операційної системи Windows. Архітектура NT і структура ядра. Методи перехоплення функцій у режимі ядра та режимі користувача. Поняття драйверу. Пакети вводу-виводу. Оцінка стабільності та безпеки системи Windows.

    курсовая работа [239,3 K], добавлен 02.01.2014

  • Анализ временных рядов. Разработка программы для среды визуального проектирования Borland Delphi 7.0. Математическая формулировка задачи. Структурная схема программы. Описание реализации технологии COM, динамических библиотек, возможностей программы.

    курсовая работа [4,3 M], добавлен 14.11.2010

  • Рассмотрение способов просмотра состояния процессов через диспетер задач в операционной системе Windows: определение взаимосвязи процессов и потоков, времени работы системы в пользовательском режиме. Ознакомление со сведениями о файлах драйверов.

    лабораторная работа [3,1 M], добавлен 07.04.2010

Работы в архивах красиво оформлены согласно требованиям ВУЗов и содержат рисунки, диаграммы, формулы и т.д.
PPT, PPTX и PDF-файлы представлены только в архивах.
Рекомендуем скачать работу.