Билеты (Graur) (1114774), страница 18

Файл №1114774 Билеты (Graur) (Экзамен) 18 страницаБилеты (Graur) (1114774) страница 182019-05-08СтудИзба
Просмтор этого файла доступен только зарегистрированным пользователям. Но у нас супер быстрая регистрация: достаточно только электронной почты!

Текст из файла (страница 18)

Существуеттакже возможность одновременно послать сигнал нескольким процессам,например, если значение этого параметра есть 0, сигнал будет передан всемпроцессам, которые принадлежат той же группе, что и процесс, посылающийсигнал, за исключением процессов с идентификаторами 0 и 1.Во втором параметре передается номер посылаемого сигнала. Если этот параметрравен 0, то будет выполнена проверка корректности обращения к kill() (вчастности, существование процесса с идентификатором pid), но никакой сигнал вдействительности посылаться не будет.Если процесс-отправитель не обладает правами привилегированного пользователя,то он может отправить сигнал только тем процессам, у которых реальный илиэффективный идентификатор владельца процесса совпадает с реальным илиэффективным идентификатором владельца процесса-отправителя.Для определения реакции на получение того или иного сигнала в процессе служитсистемный вызов signal():#INCLUDE <SIGNAL.H>void (*signal ( int sig, void (*disp) (int))) (int)где аргумент sig — номер сигнала, для которого устанавливается реакция, а disp— либо определенная пользователем функция-обработчик сигнала, либо одна изконстант: SIG_DFL и SIG_IGN.

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

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

Вызов функции-обработчика ивозврат требует операций со стеком. Сигналы также несут весьма ограниченнуюинформацию.1. Обработка сигнала.В данном примере при получении сигнала SIGINT четырежды вызываетсяспециальный обработчик, а в пятый раз происходит обработка по умолчанию.#include <sys/types.h>#include <signal.h>#include <stdio.h>int count = 0;void SigHndlr (int s)/* обработчик сигнала */{printf("\n I got SIGINT %d time(s) \n",++ count);if (count == 5) signal (SIGINT, SIG_DFL);/* ставим обработчик сигнала по умолчанию */else signal (SIGINT, SigHndlr);/* восстанавливаем обработчик сигнала */}int main(int argc, char **argv){signal (SIGINT, SigHndlr); /* установка реакции насигнал */while (1); /*”тело программы” */return 0;}2.

Программа “Будильник”.Программа “Будильник”. Существуют задачи, в которых необходимо прерватьвыполнение процесса по истечении некоторого количества времени. СредствамиОС “заводится” будильник, который будет поторапливать ввести некоторое имя.Системный вызов alarm():#include <unistd.h>unsigned int alarm(unsigned int seconds);инициализирует отложенное появление сигнала SIGALRM - процесс запрашиваетядро отправить ему самому сигнал по прошествии определенного времени.#include <unistd.h>#include <signal.h>#include <stdio.h>void alrm(int s) /*обработчик сигнала SIG_ALRM */{printf(“\n жду имя \n”);alarm(5); /* заводим будильник */signal(SIGALRM, alrm); /* переустанавливаемреакцию на сигнал */}int main(int argc, char **argv){char s[80];signal(SIGALRM, alrm);/* установка обработчика alrm на приход сигналаSIG_ALRM */alarm(5); /* заводим будильник */printf(“Введите имя \n”);for (;;){printf(“имя:”);if (gets(s) != NULL) break; /* ожидаем вводаимени */};printf(“OK! \n”);return 0;}В начале программы мы устанавливаем реакцию на сигнал SIGALRM - функциюalrm(), далее мы заводим будильник, запрашиваем “Введите имя” и ожидаемввода строки символов.

Если ввод строки задерживается, то будет вызванафункция alrm(), которая напомнит, что программа “ждет имя”, опять заведетбудильник и поставит себя на обработку сигнала SIGALRM еще раз. И так будет дотех пор, пока не будет введена строка. Здесь имеется один нюанс: если в моментвыполнения системного вызова возникает событие, связанное с сигналом, тосистема прерывает выполнение системного вызова и возвращает код ответа,равный «-1».3. Двухпроцессный вариант программы “Будильник”.#include <signal.h>#include <sys/types.h>#include <unistd.h>#include <stdio.h>void alr(int s){printf(“\n Быстрее!!! \n”);}signal(SIGALRM, alr);/* переустановка обработчика alr на приход сигналаSIGALRM */int main(int argc, char **argv){char s[80];int pid;signal(SIGALRM, alr);/* установка обработчика alr на приход сигнала SIGALRM*/if (pid = fork()) {for (;;){sleep(5);/*приостанавливаем процессна 5 секунд */kill(pid, SIGALRM);/*отправляем сигнал SIGALRM процессусыну */}}else {printf(“Введите имя \n”);for (;;){printf(“имя:”);if (gets(s) != NULL) break; /*ожидаемввода имени*/}printf(“OK!\n”);kill(getppid(), SIGKILL);/* убиваем зациклившегося отца */}return 0;}В данном случае программа реализуется в двух процессах.

Как и в предыдущемпримере, имеется функция реакции на сигнал alr(), которая выводит на экрансообщение и переустанавливает функцию реакции на сигнал опять же на себя. Восновной программе мы также указываем alr() как реакцию на SIGALRM. Послеэтого мы запускаем сыновний процесс, и отцовский процесс (бесконечный цикл)“засыпает” на 5 единиц времени, после чего сыновнему процессу будет отправленсигнал SIGALRM. Все, что ниже цикла, будет выполняться в процессе-сыне: мыожидаем ввода строки, если ввод осуществлен, то происходит уничтожение отца(SIGKILL).БИЛЕТ 30 неименованные каналыПрограммные каналыОдним из простейших средств взаимодействия процессов в операционной системеUNIX является механизм каналов.

Неименованный канал есть некая сущность, вкоторую можно помещать и извлекать данные, для чего служат два файловыхдескриптора, ассоциированных с каналом: один для записи в канал, другой — длячтения. Для создания канала служит системный вызов pipe():#include <unistd.h>INT PIPE(INT *FD)Данный системный вызов выделяет в оперативной памяти некоторое ограниченноепространство и возвращает через параметр fd массив из двух файловыхдескрипторов: один для записи в канал — fd[1], другой для чтения — fd[0].Эти дескрипторы являются дескрипторами открытых файлов, с которыми можноработать, используя такие системные вызовы как read(), write(), dup() и такдалее.

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

Это означает, что дляфайловых дескрипторов, ассоциированных с каналом, не определенаоперация lseek() (при попытке обратиться к этому вызову произойдетошибка).Кроме того, существует ряд отличий в поведении операций чтения и записив канал, а именно:При чтении из канала: если прочитано меньше байтов, чем находится в канале, оставшиесясохраняются в канале; если делается попытка прочитать больше данных, чем имеется в канале, ипри этом существуют открытые дескрипторы записи, ассоциированные сканалом, будет прочитано (т.е. изъято из канала) доступное количестводанных, после чего читающий процесс блокируется до тех пор, пока в каналене появится достаточное количество данных для завершения операциичтения. процесс может избежать такого блокирования, изменив для канала режимблокировки с использованием системного вызова fcntl().

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

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

Характеристики

Тип файла
PDF-файл
Размер
1,67 Mb
Материал
Высшее учебное заведение

Список файлов ответов (шпаргалок)

Экзамен
2013-2014
Билеты
Билеты (ответы)
Варианты прошлых лет (в основном_ письменная часть)
Вопросы экзаменационного теормина прошлых лет
Собранное людьми
Оси от Влада (вроде как там дубликаты файлов ниже)
Свежие статьи
Популярно сейчас
Зачем заказывать выполнение своего задания, если оно уже было выполнено много много раз? Его можно просто купить или даже скачать бесплатно на СтудИзбе. Найдите нужный учебный материал у нас!
Ответы на популярные вопросы
Да! Наши авторы собирают и выкладывают те работы, которые сдаются в Вашем учебном заведении ежегодно и уже проверены преподавателями.
Да! У нас любой человек может выложить любую учебную работу и зарабатывать на её продажах! Но каждый учебный материал публикуется только после тщательной проверки администрацией.
Вернём деньги! А если быть более точными, то автору даётся немного времени на исправление, а если не исправит или выйдет время, то вернём деньги в полном объёме!
Да! На равне с готовыми студенческими работами у нас продаются услуги. Цены на услуги видны сразу, то есть Вам нужно только указать параметры и сразу можно оплачивать.
Отзывы студентов
Ставлю 10/10
Все нравится, очень удобный сайт, помогает в учебе. Кроме этого, можно заработать самому, выставляя готовые учебные материалы на продажу здесь. Рейтинги и отзывы на преподавателей очень помогают сориентироваться в начале нового семестра. Спасибо за такую функцию. Ставлю максимальную оценку.
Лучшая платформа для успешной сдачи сессии
Познакомился со СтудИзбой благодаря своему другу, очень нравится интерфейс, количество доступных файлов, цена, в общем, все прекрасно. Даже сам продаю какие-то свои работы.
Студизба ван лав ❤
Очень офигенный сайт для студентов. Много полезных учебных материалов. Пользуюсь студизбой с октября 2021 года. Серьёзных нареканий нет. Хотелось бы, что бы ввели подписочную модель и сделали материалы дешевле 300 рублей в рамках подписки бесплатными.
Отличный сайт
Лично меня всё устраивает - и покупка, и продажа; и цены, и возможность предпросмотра куска файла, и обилие бесплатных файлов (в подборках по авторам, читай, ВУЗам и факультетам). Есть определённые баги, но всё решаемо, да и администраторы реагируют в течение суток.
Маленький отзыв о большом помощнике!
Студизба спасает в те моменты, когда сроки горят, а работ накопилось достаточно. Довольно удобный сайт с простой навигацией и огромным количеством материалов.
Студ. Изба как крупнейший сборник работ для студентов
Тут дофига бывает всего полезного. Печально, что бывают предметы по которым даже одного бесплатного решения нет, но это скорее вопрос к студентам. В остальном всё здорово.
Спасательный островок
Если уже не успеваешь разобраться или застрял на каком-то задание поможет тебе быстро и недорого решить твою проблему.
Всё и так отлично
Всё очень удобно. Особенно круто, что есть система бонусов и можно выводить остатки денег. Очень много качественных бесплатных файлов.
Отзыв о системе "Студизба"
Отличная платформа для распространения работ, востребованных студентами. Хорошо налаженная и качественная работа сайта, огромная база заданий и аудитория.
Отличный помощник
Отличный сайт с кучей полезных файлов, позволяющий найти много методичек / учебников / отзывов о вузах и преподователях.
Отлично помогает студентам в любой момент для решения трудных и незамедлительных задач
Хотелось бы больше конкретной информации о преподавателях. А так в принципе хороший сайт, всегда им пользуюсь и ни разу не было желания прекратить. Хороший сайт для помощи студентам, удобный и приятный интерфейс. Из недостатков можно выделить только отсутствия небольшого количества файлов.
Спасибо за шикарный сайт
Великолепный сайт на котором студент за не большие деньги может найти помощь с дз, проектами курсовыми, лабораторными, а также узнать отзывы на преподавателей и бесплатно скачать пособия.
Популярные преподаватели
Добавляйте материалы
и зарабатывайте!
Продажи идут автоматически
6418
Авторов
на СтудИзбе
307
Средний доход
с одного платного файла
Обучение Подробнее