sem13 - Сигналы (Мини-учебник с ejudge = Чернокнижка)

PDF-файл sem13 - Сигналы (Мини-учебник с ejudge = Чернокнижка) Практика расчётов на ПЭВМ (37199): Книга - 3 семестрsem13 - Сигналы (Мини-учебник с ejudge = Чернокнижка) - PDF (37199) - СтудИзба2019-05-08СтудИзба

Описание файла

Файл "sem13 - Сигналы" внутри архива находится в папке "Мини-учебник с ejudge = Чернокнижка". PDF-файл из архива "Мини-учебник с ejudge = Чернокнижка", который расположен в категории "". Всё это находится в предмете "практика расчётов на пэвм" из 3 семестр, которые можно найти в файловом архиве МГУ им. Ломоносова. Не смотря на прямую связь этого архива с МГУ им. Ломоносова, его также можно найти и в других разделах. .

Просмотр PDF-файла онлайн

Текст из PDF

1СигналыСигнал можно рассматривать как программное прерывание нормальной работы процесса. Ядро использует сигналы чтобы сообщить процессу об исключительных ситуациях, которые могут возникнуть в его работе. Некоторые сигналы сообщают об ошибках, таких какнедопустимое обращение к памяти, другие сигналы сообщают об асинхронных событиях, таких как потеря связи с терминалом.В операционной системе определено большое количество типов сигналов, каждый длясвоего типа события. Некоторые события делают нежелательным или невозможным продолжение нормальной работы процесса, такие сигналы по умолчанию завершают работупроцесса. Другие сигналы, сообщающие о «безобидных» событиях, по умолчанию игнорируются.Процесс может послать сигнал другому процессу.

Это позволяет, например, родительскому процессу завершить выполнение сыновнего процесса. В другой ситуации два процессамогут таким образом синхронизовать своё выполнение.Обработка сигналов — это область, где работа операционных систем-наследниц SystemV (сейчас наиболее распространены SCO Unix и Solaris) наиболее сильно отличается от работы систем семейства BSD.

В дальнейшем изложении все системы первого типа будут обобщённо названы System V, а системы второго типа — BSD. Хотя при разработке Linux за образец была взята System V, обработка сигналов по умолчанию ведётся как в BSD. Все примерыпроверялись на Linux, то есть в них используется семантика сигналов BSD.1.1 Генерация сигналовСобытия, которые генерируют сигналы, делятся на три основные группы: ошибки, внешние события и явные запросы.Ошибка означает, что программа сделала что-то недопустимое и не может продолжитьсвоё выполнение. Не все типы ошибок генерируют сигналы (на самом деле, большинствоошибок не генерирует). Например, попытка открытия несуществующего файла — ошибка,но она не генерирует сигнал, вместо этого системный вызов open возвращает -1. Вообще,ошибки, которые связаны с библиотечными функциями и системными вызовами, сообщаются программе с помощью специальных возвращаемых значений.

Ошибки, которые могутвстретиться в любом месте программы, а не только в библиотечных функциях и системныхвызовах генерируют сигналы. К таким ошибкам относятся деление на 0 и неверное обращение к памяти.Внешнее событие обычно относится к операциям ввода/вывода или другим процессам.Например, получение данных при асинхронных операциях, срабатывание таймера, завершение сыновнего процесса.Явный запрос предполагает использование функций, таких как kill, задача которых— сгенерировать сигнал.Сигналы могут генерироваться синхронно или асинхронно.

Синхронный сигнал относится к некоторому действию в программе и доставляется (если только не заблокирован)во время этого действия. Большинство ошибок генерируют синхронные сигналы. Посылкапроцессом сигнала самому себе также синхронна.Асинхронные сигналы генерируются событиями, неподконтрольными процессу, которыйих получает. Такие сигналы могут приходить в процесс в непредсказуемые моменты времени.Посылка сигнала одним процессом другому процессу также асинхронна.1Каждый тип сигнала как правило синхронен или асинхронен.

Например, сигналы, соответствующие ошибкам выполнения программы, синхронны. Но любой сигнал может бытьсинхронным или асинхронным, когда посылается явно.Системный вызов kill позволяет послать сигнал процессу или группе процессов.int kill(pid_t pid, int sig);Если pid больше нуля, заданный сигнал sig посылается процессу с заданным идентификатором процесса.Если pid равен 0, сигнал sig посылается всем процессам в группе процессов, к которойотносится данный процесс.Если pid меньше -1, сигнал sig посылается всем процессам в группе процессов с идентификатором -pid.Наконец, если pid равен -1, сигнал sig посылается всем процессам с тем же эффективным идентификатором пользователя, что у текущего процесса.Если номер сигнала равен 0, сигнал не посылается, но все возможные ошибки проверяются.

Таким образом можно проверить, например, существование процесса с заданнымpid.Процесс может послать сигнал самому себе с помощью вызова видаkill(getpid(), sig). Если этот сигнал не блокируется процессом, kill доставит хотябы один сигнал из ожидающих доставки текущему процессу (это может быть другой сигнал,ожидающий доставки, вместо sig) перед возвратом из системного вызова kill.В случае успеха системный вызов возвращает 0. Если сигнал посылается группе процессов, вызов kill заканчивается успешно, если сигнал был послан хотя бы одному процессув группе. Нет способа узнать, какой из процессов получил сигнал, или получили ли его онивсе.

В случае неудачи системный вызов возвращает значение -1, а переменная errno устанавливается в код ошибки, который может быть одним из следующих:EINVAL Аргумент sig является недопустимым или неподдерживаемым номером сигналом.EPERMНедостаточно прав послать сигнал процессу или группе процессов.ESCRHАргумент pid не является правильным номером процесса или группы процессов. Эта ошибка возвращается и в случае, когда заданному номеру соответствует процесс-зомби.Действие функции raise, определённой следующим образом:int raise(int sig);эквивалентно вызову kill(getpid(), sig).1.2 Получение сигналовПосле генерации сигнала он становится ожидающим доставки.

Обычно он таковым остаётся в течение непродолжительного времени, после чего доставляется процессуадресату. Однако если данный тип сигнала в текущий момент времени заблокирован процессом, сигнал может оставаться ожидающим доставки неограниченно долгое время до техпор, пока сигналы этого типа не будут разблокированы. После разблокирования сигнал будет доставлен немедленно.Доставка сигнала означает выполнение определённого действия. Для некоторых сигналов (SIGKILL и SIGSTOP) это действие фиксировано, но для большинства сигналов у программы есть выбор: игнорировать сигнал, обрабатывать сигнал или выполнять действие по2умолчанию для данного сигнала.

Программа может задавать реакцию на сигнал с помощьювызовов signal или sigaction. Во время работы обработчика сигнала этот тип сигналовзаблокирован.Если для некоторого типа сигнала установлено игнорирование сигнала, любой сигнал такого типа будет сброшен сразу же после генерации, даже если этот тип сигналов в тот моментбыл заблокирован.

Такой сигнал никогда не будет доставлен, даже если программа затемустановит обработчик сигнала и разблокирует его.Если процесс получает сигнал, который ни обрабатывается, ни игнорируется, выполняется действие по умолчанию. Каждый тип сигналов имеет своё действие по умолчанию. Длябольшинства сигналов действием по умолчанию является завершение процесса. Для некоторых сигналов, обозначающих «безобидные» события, действие по умолчанию состоит в том,чтобы ничего не делать. Обратите внимание, что такое действие по умолчанию не являетсяигнорированием сигнала.Когда сигнал приводит к завершению работы процесса, родитель процесса может определить причину завершения, проверив статус завершения процесса, возвращаемый функциями семейства wait.

Сигналы, по умолчанию завершающие процесс, вызывают функциюядра, аналогичную _exit, то есть не вызываются обработчики завершения, зарегистрированные по atexit, не записываются буферы дескрипторов потока FILE.Сигналы, обозначающие ошибки выполнения процесса, имеют специальное свойство:когда процесс завершается по одному из таких сигналов, ядро записывает на диск дамп памяти (core dump), который хранит состояние процесса в момент остановки. Этот дамп можнопросматривать с помощью отладчика, чтобы определить причину ошибки.Дамп памяти имеет по умолчанию имя core и создаётся в текущем каталоге.

Ядро незаписывает дамп памяти в случае, когда выполняется хотя бы одно из следующих условий.• Эффективный идентификатор пользователя или группы пользователей процесса несовпадает с реальным идентификатором пользователя или группы пользователей.• У процесса отсутствуют права записи в текущий каталог процесса, если файл core несуществует.• У процесса отсутствуют права записи в файл core в текущем каталоге, если такойфайл существует.• Пользователь запретил создание файла дампа памяти с помощью командыulimit -c 0.Если сигнал, обозначающий ошибку выполнения процесса, посылается явным запросоми завершает процесс, ядро точно так же сохраняет дамп памяти, как будто бы сигнал былвызван непосредственно ошибкой.1.3 Стандартные сигналыВ этом разделе перечислены имена стандартных типов сигналов с описанием, какое событие они обозначают.

Каждое имя сигнала — это макрос, соответствующий положительному числу — номеру сигнала. Программа не должна делать никаких предположений о номерах сигналов и всегда ссылаться на сигналы, используя символические константы. Номерасигналов могут меняться от системы к системе, а имена сигналов стандартизованы.3Имена сигналов определены в заголовочном файле <signal.h>. Макрос NSIG даёт общее количество сигналов, определённых в системе. Поскольку сигналы нумеруются последовательно, его значение на 1 больше максимального номера сигнала.Чтобы напечатать строку, описывающую сигнал (например, для SIGSEGV —"Segmentation fault"), можно использовать функцию strsignal, описаннуюследующим образом:char *strsignal(int signum);Здесь signum — номер сигнала.Далее приведены таблицы сигналов, разбитых по группам.

В столбце «реакция» определена реакция на данный сигнал по умолчанию. Реакция может описываться комбинациейбукв, каждая из которых означает следующее:C Записать дамп памяти (core dump).T Завершить процесс.B Сигнал не может быть обработан, заблокирован или проигнорирован.S Остановить процесс.N Ничего не делать.R Продолжить процесс после остановки.ИмяРеакцияSIGFPECTSIGILLCTSIGSEGVCTSIGBUSCTSIGABRTCTSIGTRAPCTОписаниеПрограммные ошибкиФатальная арифметическая ошибка. Для целочисленных операций это может быть деление на 0, умножение минимальногоцелого числа на -1.

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

Это можетпроизойти из-за переполнения массива, размещённого в стеке,или из-за неинициализированного указателя на функцию.Попытка чтения или записи по адресу, на который не отображается память, попытка записи в память, открытую только для чтения, попытка выполнения невыполняемой памяти. Чтение илизапись по адресу 0 (NULL) может вызывать эту ошибку.Неверное обращение к памяти, например, обращение по невыровненному адресу.

Обращение по адресу 0 также может вызывать этот сигнал. Типы сигналов SIGSEGV и SIGBUS близки посмыслу, и точное деление между ними зависит от операционнойсистемы и типа процессора.Ошибка, выявленная самой программой, которая в этом случаевызвала функцию abort().Сигнал трассировки. Генерируется специальной инструкциейтрассировки процессора и, возможно, другими инструкциями.Этот сигнал используется отладчиками.Завершение процессаПродолжение на следующей странице4ИмяSIGTERMРеакцияTОписаниеЗавершить выполнение процесса. В отличие от SIGKILL этотсигнал может быть заблокирован, проигнорирован или обработан процессом. Посылка этого сигнала — стандартный способ«вежливо» попросить программу завершиться.Команда kill командного интерпретатора посылает по умолчанию этот сигнал.SIGINTTЗавершение процесса. Сигнал обычно посылается процессу, когда пользователь нажимает клавиши Ctrl-C (символ INTR).SIGQUITCTАварийное завершение процесса.

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