Читаем Linux API. Исчерпывающее руководство полностью

файловая блокировка, позволяющая процессу блокировать области файла с целью предотвращения их чтения или обновления содержимого файла другими процессами;

очереди сообщений, которые используются для обмена сообщениями (пакетами данных) между процессами;

семафоры, которые применяются для синхронизации действий процессов;

• совместно используемая память, позволяющая двум и более процессам совместно использовать часть памяти. Когда один процесс изменяет содержимое совместно используемой области памяти, изменения тут же могут быть видимы всем остальным процессам.

Широкое разнообразие IPC-механизмов в системах UNIX с иногда перекрываемыми функциональными возможностями частично объясняется их различием в отдельных вариантах UNIX-систем и требованиями со стороны различных стандартов. Например, FIFO-буферы и доменные сокеты UNIX, по сути, выполняют одну и ту же функцию, позволяющую неродственным процессам в одной и той же системе осуществлять обмен данными. Их совместное существование в современных системах UNIX объясняется тем, что FIFO-буферы пришли из System V, а сокеты были взяты из BSD.


2.11. Сигналы


Хотя в предыдущем разделе сигналы были перечислены в качестве методов IPC, чаще всего они используются в широком разнообразии других контекстов, поэтому заслуживают более подробного рассмотрения.

Сигналы зачастую описываются как «программные прерывания». Поступление сигнала информирует процесс о том, что случилось какое-то событие или возникли исключительные условия. Существует множество разнообразных сигналов, каждый из которых идентифицирует событие или условие. Каждый тип сигнала идентифицируется с помощью целочисленного значения, определяемого в символьном имени, имеющем форму SIGxxxx.

Сигналы отправляются процессу ядром, другим процессом (с соответствующими разрешениями) или самим процессом. Например, ядро может отправить сигнал процессу, когда произойдет что-нибудь из следующего перечня:

• пользователь набрал на клавиатуре команду прерывания (обычно это Ctrl+C);

• завершился один из дочерних процессов данного процесса;

• истекло время таймера (будильника), установленного процессом;

• процесс попытался получить доступ к неверному адресу в памяти.

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

Когда процесс получает сигнал, он, в зависимости от сигнала, выполняет одно из следующих действий:

• игнорирует сигнал;

• прекращает свою работу по сигналу;

• приостанавливается, чтобы впоследствии возобновить свое выполнение с получением сигнала специального назначения.

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

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


2.12. Потоки


В современных реализациях UNIX у каждого процесса может быть несколько потоков выполнения. Потоки можно представить себе в качестве набора процессов, совместно использующих одну и ту же виртуальную память, а также ряд других атрибутов. Каждый поток выполняет один и тот же программный код и совместно с другими потоками использует одну и ту же область данных и кучу. Но каждый поток имеет свой собственный стек, содержащий локальные переменные и информацию о связанности вызовов функций.

Перейти на страницу:

Похожие книги

C++ Primer Plus
C++ Primer Plus

C++ Primer Plus is a carefully crafted, complete tutorial on one of the most significant and widely used programming languages today. An accessible and easy-to-use self-study guide, this book is appropriate for both serious students of programming as well as developers already proficient in other languages.The sixth edition of C++ Primer Plus has been updated and expanded to cover the latest developments in C++, including a detailed look at the new C++11 standard.Author and educator Stephen Prata has created an introduction to C++ that is instructive, clear, and insightful. Fundamental programming concepts are explained along with details of the C++ language. Many short, practical examples illustrate just one or two concepts at a time, encouraging readers to master new topics by immediately putting them to use.Review questions and programming exercises at the end of each chapter help readers zero in on the most critical information and digest the most difficult concepts.In C++ Primer Plus, you'll find depth, breadth, and a variety of teaching techniques and tools to enhance your learning:• A new detailed chapter on the changes and additional capabilities introduced in the C++11 standard• Complete, integrated discussion of both basic C language and additional C++ features• Clear guidance about when and why to use a feature• Hands-on learning with concise and simple examples that develop your understanding a concept or two at a time• Hundreds of practical sample programs• Review questions and programming exercises at the end of each chapter to test your understanding• Coverage of generic C++ gives you the greatest possible flexibility• Teaches the ISO standard, including discussions of templates, the Standard Template Library, the string class, exceptions, RTTI, and namespaces

Стивен Прата

Программирование, программы, базы данных
1С: Бухгалтерия 8 с нуля
1С: Бухгалтерия 8 с нуля

Книга содержит полное описание приемов и методов работы с программой 1С:Бухгалтерия 8. Рассматривается автоматизация всех основных участков бухгалтерии: учет наличных и безналичных денежных средств, основных средств и НМА, прихода и расхода товарно-материальных ценностей, зарплаты, производства. Описано, как вводить исходные данные, заполнять справочники и каталоги, работать с первичными документами, проводить их по учету, формировать разнообразные отчеты, выводить данные на печать, настраивать программу и использовать ее сервисные функции. Каждый урок содержит подробное описание рассматриваемой темы с детальным разбором и иллюстрированием всех этапов.Для широкого круга пользователей.

Алексей Анатольевич Гладкий

Программирование, программы, базы данных / Программное обеспечение / Бухучет и аудит / Финансы и бизнес / Книги по IT / Словари и Энциклопедии
C# 4.0: полное руководство
C# 4.0: полное руководство

В этом полном руководстве по C# 4.0 - языку программирования, разработанному специально для среды .NET, - детально рассмотрены все основные средства языка: типы данных, операторы, управляющие операторы, классы, интерфейсы, методы, делегаты, индексаторы, события, указатели, обобщения, коллекции, основные библиотеки классов, средства многопоточного программирования и директивы препроцессора. Подробно описаны новые возможности C#, в том числе PLINQ, библиотека TPL, динамический тип данных, а также именованные и необязательные аргументы. Это справочное пособие снабжено массой полезных советов авторитетного автора и сотнями примеров программ с комментариями, благодаря которым они становятся понятными любому читателю независимо от уровня его подготовки. Книга рассчитана на широкий круг читателей, интересующихся программированием на C#.Введите сюда краткую аннотацию

Герберт Шилдт

Программирование, программы, базы данных