Студопедия

Главная страница Случайная страница

Разделы сайта

АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатикаИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханикаОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторикаСоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансыХимияЧерчениеЭкологияЭкономикаЭлектроника






Процессы в Win32






Лабораторная работа №3

Понятие процесса и работа с Win32 API

Задание

1. Используя представленные ниже материалы, разработать на Visual C++ консольное приложение, выполняющее следующие команды:

run word – запускает приложение Microsoft Word (использовать WinExec)

run excel – запускает приложение Microsoft Excel (использовать CreateProcess)

open имя_документа – открывает документ с именем имя_документа (в формате Microsoft Word или Microsoft Excel)

exit – завершение работы приложения

Путь к программам Word и Excel задается в программе в виде константы. Приложение должно контролировать корректность ввода команд, при неверном задании пути выдавать или команды соответствующие сообщение.

2. Найдите в документации MSDN три любые функции управления процессом или получения информации о его состоянии. Включите вызов этих функций в программу.

Процессы в Win32

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

- закрытое виртуальное адресное пространство – диапазон адресов виртуальной памяти, которым может пользоваться процесс;

- исполняемую программу – начальный код и данные, проецируемые на виртуальное адресное пространство процесса;

- список открытых описателей различных системных ресурсов – семафоров, коммуникационных портов, файлов и других объектов, доступных всем потокам в данном процессе;

- контекст защиты (security context), (иногда называемый маркером доступа (accesstoken)) идентифицирующий пользователя, группы безопасности и привилегии, сопоставленные с процессом;

- уникальный идентификатор процесса;

- куча процесса;

- переменные окружения;

- минимум один поток (см. далее).

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

Поток (thread) - объект внутри процесса, получающий процессорное время для выполнения. Без потока программа процесса не может выполняться, таким образом, процесс в Windows сам по себе инертен. Один процесс может владеть несколькими потоками, эти потоки могут «одновременно» исполняют код в адресном пространстве процесса.

Поток включает следующие наиболее важные элементы:

- содержимое набора регистров процессора, отражающих состояние процессора;

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

- закрытую область памяти, называемую локальной памятью потока (thread-local storage, TLS) и используемую подсистемами, библиотеками исполняющих систем (run-time libraries) и DLL;

- уникальный идентификатор потока;

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

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

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

- управление вводом в различные документы MDI-интерфейса, каждый документ приложения представлен отдельным потоком;

- управление вводом данных из нескольких устройств коммуникации;

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

- снижение времени реакции на действия пользователя по вводу данных при одновременном выполнении фоновых вычислений;

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

Таким образом, программист может выбрать каким способом реализовать мультизадачность в своем приложении: за счет использования нескольких процессов (например, в Visual Studio компилятор запускается как отдельный процесс) или нескольких потоков в рамках одного процесса. Обычно более эффективной является реализация многозадачности в виде одного процесса с несколькими потоками, чем в виде многих процессов с одним потоком, так как:

- контексты потоков занимают меньший объем, чем контексты процессов и система переключает их быстрее;

- взаимодействие потоков проще, так как они могут пользоваться глобальными переменными в общем для них адресном пространстве процесса;

- потоки одного процесса легче синхронизировать, так как им доступны описатели объектов ядра из общего контекста процесса.

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

Создание многопоточных процессов требует тщательного предварительного анализа с тем, чтобы должным образом синхронизировать работу потоков. Отслеживание состояний многочисленных потоков требует значительных временных и ресурсных затрат, поэтому следует учитывать, что Windows предоставляет и другие средства реализации асинхронности выполнения операций. Это такие механизмы как:

- асинхронный ввод-вывод (I/O);

- специальные порты I/O (completion ports);

- асинхронные вызовы удаленных процедур (asynchronous procedure calls — АРС);

- функции ожидания системных событий (wait functions).

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

Совместный доступ потоков к разделяемым ресурсам: описателям файлов, портов, глобальным переменным, может создать конфликты. Например, один поток читает данные, а другой пытается одновременно их изменить или один поток ждет завершения определенной операции другим потоком, а тот, в свою очередь, ждет завершения первого потока. Такое «зацикливание» называется тупиковой ситуацией (deadlock). Для предупреждения конфликтов такого рода существуют специальные синхронизирующие объекты ядра системы: семафоры, мьютексы, события и т.д. Вопросы синхронизации будут подробно рассмотрены в следующих разделах пособия.

Исполняемый код
Глобальные переменные
Куча процесса
Ресурсы процесса
Список открытых описателей
Блок переменных окружения
 
Поток 1
Локальная память потока
Стек
Стек

 

   
Поток N
Локальная память потока
Стек
Стек

 

 

 

В зависимости от характера решаемых задач, различают два вида потоков: асимметричные потоки и симметричные потоки.

Асимметричные потоки (asymmetric threads) - это потоки, решающие различные задачи и, как правило, не разделяющие совместные ресурсы. Необходимость в асимметричных потоках возникает:

- при длительных вычислениях в программе и сохранении при этом нормальной реакции на действия пользователя;

- при реализации асинхронного ввод/вывод с использованием различных устройств (СОМ-порта, звуковой карты, принтера и т. п.);

- при параллельной обработке одних и тех же данных (например, в текстовом редакторе одновременно должны выполняться ввод текса, его автоматическое форматирование и проверка орфографии).

Симметричные потоки (symmetric threads) имеют одинаковое предназначение, исполняют один и тот же код и могут разделять одни и те же ресурсы. Примером симметричных потоков могут служит окна браузера Internet Explorer, каждое окно работает по одной и той же программе, но управляется разными потоками.






© 2023 :: MyLektsii.ru :: Мои Лекции
Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав.
Копирование текстов разрешено только с указанием индексируемой ссылки на источник.