Читайте также:
|
|
3.1. Для вариантов заданий написать и отладить программу, реализующую порожденный процесс.
3.2. Для вариантов заданий написать и отладить программу, реализующую родительский процесс, вызывающий и отслеживающий состояние порожденных процессов - программ (ждущий их завершения или уничтожающий их, в зависимости от варианта).
Варианты заданий.
4.1. Поиск указанной строки в указанном файле. Обработка одной строки в порожденном процессе.
4.2. Умножение матрицы на вектор. Обработка одной строки матрицы - в порожденном процессе.
4.3. Поиск всех простых чисел (простым называется число, которое является своим наибольшим делителем) в указанном интервале чисел, разделенном на несколько диапазонов. Обработка каждого диапазона производится в порожденном процессе. Классический алгоритм Евклида определения наибольшего общего делителя двух целых чисел (x, y) может применяться при следующих условиях:
· оба числа x и y неотрицательные;
· оба числа x и y отличны от нуля.
На каждом шаге алгоритма выполняются сравнения:
· если x == y, то ответ найден;
· если x < y, то y заменяется значением y - x;
· если x > y, то x заменяется значением x - y.
4.4. Warcraft. Заданное количество юнитов добывают золото равными порциями из одной шахты, задерживаясь в пути на случайное время, до ее истощения. Работа каждого юнита реализуется в порожденном процессе.
4.5. Винни-Пух и пчелы. Заданное количество пчел добывают мед равными порциями, задерживаясь в пути на случайное время. Винни-Пух потребляет мед порциями заданной величины за заданное время и столько же времени может прожить без питания. Работа каждой пчелы реализуется в порожденном процессе.
4.6. Шарики. Координаты заданного количества шариков изменяются на случайную величину по вертикали и горизонтали. При выпадении шарика за нижнюю границу допустимой области шарик исчезает. Изменение координат каждого шарика в отдельном процессе (потоке).
4.7. Противостояние нескольких команд. Каждая команда увеличивается на случайное количество бойцов и убивает случайное количество бойцов участника. Борьба каждой команды реализуется в отдельном процессе.
4.8. Статистический анализ. Имеется несколько массивов данных (разного размера). Требуется определить математическое ожидание в каждом массиве. Обработка каждого массива выполняется в отдельном процессе.
4.9. Контрольная сумма. Для нескольких файлов (разного размера) требуется вычислить контрольную сумму (сумму кодов всех символов файла). Обработка каждого файла выполняется в отдельном процессе.
4.10. Авиаразведка. Создается условная карта в виде матрицы, размерность которой определяет размер карты, содержащей произвольное количество единиц (целей) в произвольных ячейках. Из произвольной точки карты стартуют несколько разведчиков (процессов), курсы которых выбираются так, чтобы покрыть максимальную площадь карты. Каждый разведчик фиксирует цели, чьи координаты совпадают с его координатами и по достижении границ карты сообщает количество обнаруженных целей.
4.11. Разработать программу, которая вычисляет число сочетаний C(k,n)=n!/(k!*(n-k)!). Для вычисления факториалов n!, k!, (n-k)! должны быть порождены три параллельных процесса-потомка.
4.12. Разработать программу, вычисляющую значение f(x) как сумму ряда по k от 1 до N выражения (-1)**(k+1)*x**(2k-1)/(2k-1)! для значений x, равномерно распределенных на интервале [0,Пи], и выводящую полученный результат f(x) в файл в двоичном формате. В это время предварительно подготовленный процесс-потомок читает данные из файла, преобразовывает их в текстовую форму и выводит на экран до тех пор, пока процесс-предок не передаст ему через файл ключевое слово "STOP", свидетельствующее об окончании процессов. Для вычисления факториала должен быть порожден параллельный процесс-потомок.
4.13. Разработать программу, вычисляющую значение f(x) как сумму ряда по k от 0 до N выражения x**(2k+1)/(2k+1) для значений x, из интервала [0,Пи], с шагом h и выводящую полученный результат f(x) в файл в двоичном формате. В это время предварительно подготовленный процесс-потомок читает данные из файла, преобразовывает их в текстовую форму и выводит на экран до тех пор, пока процесс-предок не передаст ему через файл число 12.456, свидетельствующее об окончании процессов.
4.14. Разработать программу, которая вычисляет число размещений n элементов по r ячейкам по формуле N=n!/n(1)!*n(2)!*...*n(r)!, удовлетворяющих требованию, что в ячейку с номером i попадает ровно n(i) элементов; i=1,...,r и n(1)+n(2)+...+n(r)=n. Для вычисления факториалов n!, n(i)! должны быть порождены параллельные процессы-потомки.
Содержание отчета.
5.1. Цель работы.
5.2. Вариант задания.
5.3. Листинги программ.
5.4. Протоколы выполнения программ.
Контрольные вопросы.
6.1. Особенности компиляции и запуска С-программ в Linux.
6.2. Что такое pid, как его определить в операционной системе и программе?
6.3. Функция fork() - назначение, применение, возвращаемое значение.
6.4. Как запустить на выполнение в порожденном процессе функцию? Программу?
6.5. Способы синхронизации родительского и дочерних процессов.
6.6. Как узнать состояние порожденного процесса при его завершении и возвращенное им значение?
6.7. Как управлять приоритетами процессов?
6.8. Как уничтожить процесс в операционной системе и программе?
Дата добавления: 2014-12-19; просмотров: 72 | Поможем написать вашу работу | Нарушение авторских прав |