
- •Введение
- •1. Лабораторная работа № 1
- •1.1. Цель работы
- •1.2. Теоретическое введение
- •1.2.1. Получение информации об операционной системе
- •1.2.2. Получение информации из реестра
- •1.2.3. Получение информации о системных каталогах Windows
- •1.2.4. Получение информации о диске
- •1.3. Создание приложения для получения характеристик компьютера и операционной системы
- •Контрольные вопросы
- •2. Лабораторная работа №2
- •2.1.Цель работы
- •2.2. Теоретическое введение
- •2.2.1. Процедуры и функции для работы с виртуальной памятью
- •2.3. Создание приложения, работающего с виртуальной памятью
- •2.4. Задание для самостоятельной работы
- •Контрольные вопросы
- •3. Лабораторная работа № 3
- •3.1. Цель работы
- •3.2. Пример использования механизма выделения виртуальной памяти для решения конкретных задач
- •3.3. Задания для самостоятельной работы
- •Контрольные вопросы
- •4. Лабораторная работа № 4
- •4.1. Цель работы
- •4. 2. Теоретическое введение
- •4.2.1 Создание или открытие объекта ядра «файла»
- •4.2.2 Создание объекта ядра «файл, проецируемый в память»
- •4.2.3 Проецирование файловых данных на адресное пространство процесса
- •4.2.4 Отмена проецирования на адресное пространство процесса объекта ядра «файл, проецируемый в память»
- •4.2.5 Закрытие объектов ядра «файл, проецируемый в память» и «файл»
- •4.3 Примеры программ, выполняющих проецирование в память
- •4.3.1 Пример 1
- •4.3.2 Пример 2
- •4.4. Задания для самостоятельной работы
- •Контрольные вопросы
- •5. Лабораторная работа № 5
- •5.1.Цель работы
- •5.2. Теоретическое введение
- •5.2.1. Создание процесса
- •5.2.2. Запуск внешней программы функцией WinExec
- •5.2.3. Запуск внешней программы и открытие документа функцией ShellExecute
- •При успешном выполнении функция ShellExecute возвращает целое значение, большее 32. Значение меньшее или равное 32 указывает на ошибку. Значения эти те же, что и для функции WinExec.
- •5.2.4. Создание потока
- •5.2.5. Завершение процесса
- •5.2.6. Завершение потока
- •5.2.7. Изменение класса приоритета процесса
- •5.2.8. Получение информации о классе приоритета процесса
- •5.2.9. Изменение уровня приоритета потока
- •5.2.10. Получение информации о приоритете потока
- •5.3. Примеры программ для работы с процессами и потоками
- •5.3.1. Создание процесса с помощью функции CreateProcess.
- •5.3.2. Создание процесса с помощью функции WinExec.
- •5.3.3. Создание процесса с помощью функции ShellExecute.
- •5.3.4. Создание многопоточного приложения.
- •5.4. Задания для самостоятельной работы
- •Контрольные вопросы
- •6. Лабораторная работа № 6
- •6.1. Цель работы
- •6.2. Теоретическое введение
- •6.2.1. Получение «мгновенного снимка» системы
- •6.2.2. Получение информации о процессах
- •6.2.3. Получение информации о потоках
- •6.2.4. Получение информации о модулях
- •6.2.5. Информация о кучах (heap)
- •6.2.6. Информация о виртуальной памяти.
- •6.2.7. Алгоритм работы функций ToolHelp
- •6.2.8. Как получить карту памяти любого процесса
- •6.3. Пример использования функций ToolHelp
- •6.4. Задания для самостоятельной работы
- •Контрольные вопросы
- •7. Лабораторная работа № 7
- •7.1. Цель работы
- •7.2. Теоретическое введение
- •7.2.1. Критические секции
- •7.2.2. Синхронизация с использованием объектов ядра
- •7.2.3. Wait-функции
- •7.2.4. Синхронизация с использованием процессов и потоков
- •7.2.5. Объекты Mutex
- •7.2.6. Семафоры
- •7.2.7. События
- •7.3 Примеры работы с объектами синхронизации
- •7.3.1 Пример 1
- •7.3.1 Пример 2
- •7.4. Задания для самостоятельной работы
- •Контрольные вопросы
- •8. Лабораторная работа № 8
- •8.1. Цель работы
- •8.2 Теоретическое введение
- •8.2.1 Создание dll
- •8.2.2 Неявная загрузка dll
- •8.2.3 Явная загрузка dll
- •8.2.4 Внедрение dll в адресное пространство другого процесса
- •8.3 Пример работы с dll
- •8.3.1 Создание dll, которая выполняет перехват нажатых клавиш
- •8.3.2 Разработка приложения, которое выполняет анализ и обработку нажатых клавиш.
- •8.4 Индивидуальные задания
- •Контрольные вопросы
- •9.2.2. Функции для работы с объектом «уведомление об изменении файловой системы»
- •9.3. Пример работы системы уведомления об изменениях в файловой системе
- •9.4. Задания для самостоятельной работы
- •Контрольные вопросы
- •Литература
- •214013 Г. Смоленск, Энергетический проезд, 1
7.4. Задания для самостоятельной работы
Исследование возможности использования в качестве объектов синхронизации потоков. Первичный поток ожидает ввода от пользователя строки символов, запускает вторичный поток и ожидает завершения вторичного потока. Вторичный поток переписывает строку в обратном порядке, подчитывает количество гласных в строке и завершает свою работу. Первичный поток выводит на экран результат работы вторичного потока.
Исследование возможности синхронизации потоков с помощью событий. Создание двух приложений. Первое приложение следит за вторым приложением. Второе приложение позволяет пользователю вводить с помощью клавиатуры и отображать в своем окне произвольные символы. Первое, контролирующее приложение при вводе в окне второго приложения символа отображает в своем окне символ "*".
Исследование возможности синхронизации потоков с помощью событий c автоматическим сбросом. Написать программу, состоящую из четырех потоков. Первый поток считывает порциями в буфер текстовый файл. Второй поток подсчитывает количество символов в файле. Третий поток подсчитывает количество слов в файле. Четвертый поток подсчитывает количество строк в файле. Работа всех потоков синхронизируется.
Исследование возможности синхронизации потоков с помощью критических секций. Создание многооконного приложения (MDI приложения). В каждом окне рисуются произвольные фигуры. Причем, в каждый момент времени может рисоваться фигура только в одном окне.
Исследование возможности синхронизации потоков с помощью объектов Mutex. Первичный поток создает два вторичных потока. Один из которых постоянно увеличивает на единицу содержимое какой-либо переменной, а другой выводит на экран содержимое этой переменной. Выполните синхронизация потоков таким образом, чтобы числа на экран выводились по порядку.
Исследование возможности синхронизации потоков с помощью семафоров. Напишите программу, использующую семафор для ограничения количества запущенных потоков, работающих в MDI-окне. Программа позволяет создавать произвольное количество окон, но работа может выполняться только в ограниченном количестве окон, в соответствии с показаниями семафора.
С помощью объектов синхронизации Windows создать модель вычислительной сети. Сеть состоит из нескольких серверов, к которым обращаются с запросами клиенты. Запросы клиентов поступают через случайные промежутки времени. Каждый сервер имеет ограниченный размер входной очереди запросов. Запрос каждого клиента обрабатывается в течение некоторого времени.
С помощью объектов синхронизации Windows смоделировать работу супермаркета. Поток «супермаркет» выполняет следующие действия: открытие супермаркета, создание потока, моделирующего отдельного покупателя, закрытие входа по окончании работы супермаркета (после этого в него не могут входить новые посетители), ожидание оставшихся в супермаркете покупателей. Потоки «покупатели» создаются через случайные промежутки времени (необходимо предусмотреть максимально возможный интервал). «Покупатели» выполняют следующие операции: ждут входа в магазин, делают случайное количество покупок, становятся в очередь к кассе, проводят у кассы случайный период времени, отходят от кассы, выходят из супермаркета.
С помощью объектов синхронизации Windows смоделировать работу парикмахерской. В парикмахерской 3 кресла, 3 парикмахера, зал ожидания, в котором 4 клиента могут разместиться на диване, а остальные стоя. Правила пожарной безопасности ограничивают общее количество клиентов внутри посещения 20 людьми. Всего парикмахерская должна обслужить 50 клиентов.
С помощью объектов синхронизации Windows решить задачу об обедающих философах (задача Дейкстры). В некотором царстве, в некотором государстве жили вместе 5 философов. Жизнь их проходила в размышлениях, прерываемых приемами пищи. Философы давно сошлись во мнении, что только спагетти в состоянии восстановить их подточенные непрерывными размышлениями силы. Питались они за одним большим круглым столом, на котором в центре помещалось большое блюдо со спагетти, по окружность пять тарелок и пять вилок. Проголодавшийся философ садится на свое место за столом и, пользуясь двумя вилками, приступает к еде. Задача состоит в том, чтобы разработать алгоритм обеда, который обеспечивает взаимоисключения (два философа не могут одновременно пользоваться одной вилкой) и не допу скает взаимоблокировок.
С помощью объектов синхронизации Windows смоделировать работу Web-сервера. При создании приложения учитывать, что запросы клиентов могут иметь различный приоритет.
С помощью объектов синхронизации Windows смоделировать работу стоянки автотранспорта возле супермаркета. Стоянка имеет ограниченное число мест, каждая машина стоит некоторый случайный промежуток времени. Машины приезжают на стоянку в случайный момент времени. Причем количество машин приезжающих на стоянку резко увеличивается в вечернее время (с 16.00 до 17.00).
С помощью объектов синхронизации Windows смоделировать ситуацию на перекрестке. Приложение должно учитывать время работы светофора, и количество машин на перекрестке. Приложение должно ответить на вопрос, при каких условиях перекресток перестанет быть узким местом.
Задача взаимного исключения. ОС, управляющая параллельными процессами, должна согласовать работу n>1 параллельных процессов при использовании некоторого критического ресурса таким образом, чтобы удовлетворить следующим требованиям: одновременно внутри критической области должно находиться не более одного процесса. Количество процессов заранее не известно.
Задача "Производитель-потребитель". Взаимодействуют два процесса с жестко распределенными между ними функциями. Один процесс вырабатывает сообщения, предназначенные для восприятия и обработки другим процессом. Процесс, вырабатывающий сообщения, называют производителем, а воспринимающий сообщения — потребителем. Процессы взаимодействуют через некоторую обобщенную область памяти, которая по смыслу является критическим ресурсом. В эту область процесс-производитель должен помещать очередное сообщение (предполагается, что область способна хранить только одно сообщение), а процесс-потребитель должен считывать очередное сообщение. Необходимо согласовать работы двух процессов при одностороннем обмене сообщениями таким образом, чтобы удовлетворить следующим требованиям:
выполнять требования задачи взаимного исключения по отношению к критическому ресурсу — обобщенной памяти для хранения сообщения
учитывать состояние обобщенной области памяти, характеризующей возможность или невозможность посылки (принятия) очередного сообщения
Попытка процесса-производителя поместить очередное сообщение в область, из которой не было считано предыдущее сообщение процессом-потребителем, должна быть блокирована. Процесс-производитель должен быть переведен в состояние ожидания возможности поместить очередное сообщение через некоторое время в область памяти, по мере ее освобождения. Аналогично должна быть блокирована попытка процесса-потребителя считать сообщение из области в ситуации, когда процесс-производитель не поместил туда очередного сообщения.
Задача "Читатели-писатели"(больший приоритет имеют процессы-читатели). В отношении некоторой области памяти, являющейся критическим ресурсом для параллельных процессов, работающих с ней, выделяется два типа процессов. Первый тип — процессы-читатели. Они считывают одновременно информацию из области, если это допускается при работе с конкретным устройством памяти. Второй тип — процессы-писатели. Они записывают информацию в область и могут делать это, только исключая как друг друга, т. е. запись должна удовлетворяться на основе решения задачи взаимного исключения. Устанавливается приоритетность в использовании критического ресурса процессам-читателям. Если хотя бы один процесс-читатель пользуется ресурсом, то он закрыт для использования всем процессам-писателям и доступен для использования всем процессам-читателям.
Задача "Читатели-писатели" (больший приоритет имеют процессы-писатели). В отношении некоторой области памяти, являющейся критическим ресурсом для параллельных процессов, работающих с ней, выделяется два типа процессов. Первый тип — процессы-читатели. Они считывают одновременно информацию из области, если это допускается при работе с конкретным устройством памяти. Второй тип — процессы-писатели. Они записывают информацию в область и могут делать это, только исключая как друг друга, т. е. запись должна удовлетворяться на основе решения задачи взаимного исключения. Устанавливается приоритетность в использовании критического ресурса процессам - писателями. При появлении запроса от процесса-писателя необходимо закрыть ресурс для использования всем процессам-читателям.
С помощью объектов синхронизации Windows смоделировать работу кафе. Кафе имеет ограниченное число столиков, каждый столик занят некоторый случайный промежуток времени. Каждый официант обслуживает несколько столиков. Если все столики заняты, клиенты уходят. Определите, при каких условиях кафе будет иметь прибыль, не потеряет клиентов, а посетители смогут спокойно поесть (за приемлемое время).
С помощью объектов синхронизации Windows смоделировать работу аэропорта. В приложении следует задавать число взлетно-посадочных полос и число самолетов, выполняющих взлет и посадку.
С помощью объектов синхронизации Windows смоделировать работу поликлиники. Число врачей (только участковых) и количество больных вводятся с клавиатуры. Время пребывания каждого больного у врача – случайное число. Задача должна определять оптимальное число врачей, чтобы все больные за время приемы смогли попасть к врачу.