Порядок выполнения работы. 1.Изучить теоретическую часть лабораторной работы
1.Изучить теоретическую часть лабораторной работы. 2.Организовать функционирование процессов следующей структуры:
Процессы определяют свою работу выводом сообщений вида : N pid ppid текущее время (мсек) (N – текущий номер сообщения) на экран. “Отец” одновременно, посылает сигнал SIGUSR1 “сыновьям”. “Сыновья” получив данный сигнал, посылают в ответ “Отцу” сигнал SIGUSR2. “Отец” получив сигнал SIGUSR2, через время t=100 мсек одновременно, посылает сигнал SIGUSR1 “сыновьям”. И так далее… Написать функции-обработчики сигналов, которые при получении сигнала выводят сообщение о получении сигнала на экран. При получении/посылке сигнала они выводят соответствующее сообщение: N pid ppid текущее время (мсек) сын такой-то get/put SIGUSRm. Предусмотреть механизм для определения “Отцом”, от кого из “Сыновей” получен сигнал.
Варианты индивидуальных заданий
Создать дерево процессов согласно варианта индивидуального задания. Процессы непрерывно обмениваются сигналами согласно табл. 2 . Запись в таблице 1 вида: 1->(2,3,4,5) означает, что исходный процесс 0 создаёт дочерний процесс 1, который, в свою очередь, создаёт дочерние процессы 2,3,4,5. Запись в таблице 2 вида: 1->(2,3,4) SIGUSR1 означает, что процесс 1 посылает дочерним процессам 2,3,4 одновременно (т.е. за один вызов kill() ) сигнал SIGUSR1.Каждый процесс при получении или посылке сигнала выводит на консоль информацию в следующем виде: N pid ppid послал/получил USR1/USR2 текущее время (мксек) где N-номер сына по табл. 1 Процесс 1, после получения 101 –го по счету сигнала SIGUSR, посылает сыновьям сигнал SIGTERM и ожидает завершения всех сыновей, после чего завершается сам. Процесс 0 ожидает завершения работы процесса 1 после чего завершается сам. Сыновья, получив сигнал SIGTERM, завершают работу с выводом на консоль сообщения вида: Pid ppid завершил работу после X-го сигнала SIGUSR1 и Y-го сигнала SIGUSR2 где X,Y – количество посланных за все время работы данным сыном сигналов SIGUSR1 и SIGUSR2 Для создания правильной последовательности сигналов в соответствие с таблицей задания необходимо для каждого процесса написать свой обработчик сигналов в котором он (процесс) принимает сигнал от предыдущего (в таблице) процесса и посылает следующему (в таблице) процессу!!
Во всех заданиях должен быть контроль ошибок (если к какому-либо каталогу нет доступа, необходимо вывести соответствующее сообщение и продолжить выполнение). Вывод сообщений об ошибках должен производиться в стандартный поток вывода сообщений об ошибках (stderr) в следующем виде: имя_модуля: текст_сообщения. Пример: ./1.exe : Error open file: 1.txt Имя модуля, имя файла берутся из аргументов командной строки. Варианты индивидуальных заданий в табл.1, табл.2. Дерево процессов Таблица 1
Последовательность обмена сигналами Таблица 2
ЛАБОРАТОРНАЯ РАБОТА №5 ПОТОКИ В ОС LINUX Цель работы – изучение потоков в ОС Linux.
Теоретическая часть Существует расширенная реализация понятия процесс, когда процесс представляет собой совокупность выделенных ему ресурсов и набора нитей исполнения. Нити(threads) или потокипроцесса разделяют его программный код, глобальные переменные и системные ресурсы, но каждая нить имеет собственный программный счетчик, свое содержимое регистров и свой стек. Все глобальные переменные доступны в любой из дочерних нитей. Каждая нить исполнения имеет в системе уникальный номер – идентификатор нити. Поскольку традиционный процесс в концепции нитей исполнения трактуется как процесс, содержащий единственную нить исполнения, мы можем узнать идентификатор этой нити и для любого обычного процесса. Для этого используется функция pthread_self(). Нить исполнения, создаваемую при рождении нового процесса, принято называть начальной или главной нитью исполнения этого процесса. Для создания нитей используется функция: #include <pthread.h> int pthread_create( pthread_t *thread, const pthread_attr_t *attr, void *(*start_routine)( void*), void *arg); Функция создает новую нить в которой выполняется функция пользователя start_routine ,передавая ей в качестве аргумента параметр arg. Если требуется передать более одного параметра, они собираются в структуру, и передается адрес этой структуры.При удачном вызове функция pthread_create возвращает значение 0 и помещает идентификатор новой нити исполнения по адресу, на который указывает параметр thread. В случае ошибки возвращается положительное значение, которое определяет код ошибки, описанный в файле <errno.h>. Значение системной переменной errno при этом не устанавливается. Параметр attr служит для задания различных атрибутов создаваемой нити. Функция нити должна иметь заголовок вида: void * start_routine (void *) Завершение функции потока происходит если: · функция нити вызвала функцию pthread_exit(); · функция нити достигла точки выхода; · нить была досрочно завершена другой нитью. Функция pthread_join() используется для перевода нити в состояние ожидания: #include <pthread.h> int pthread_join (pthread_t thread, void **status_addr); Функция pthread_join() блокирует работу вызвавшей ее нити исполнения до завершения нити с идентификатором thread. После разблокирования в указатель, расположенный по адресу status_addr, заносится адрес, который вернул завершившийся thread либо при выходе из ассоциированной с ним функции, либо при выполнении функции pthread_exit(). Если нас не интересует, что вернула нам нить исполнения, в качестве этого параметра можно использовать значение NULL. Для компиляции программы с нитями необходимо подключить библиотеку pthread.lib следующим способом:
Популярное: Почему двоичная система счисления так распространена?: Каждая цифра должна быть как-то представлена на физическом носителе... Генезис конфликтологии как науки в древней Греции: Для уяснения предыстории конфликтологии существенное значение имеет обращение к античной... ©2015-2024 megaobuchalka.ru Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. (1133)
|
Почему 1285321 студент выбрали МегаОбучалку... Система поиска информации Мобильная версия сайта Удобная навигация Нет шокирующей рекламы |