Главная страница Взаимодействие нетривиальных процессов ствует (в отличие от сокетов и XTI при использовании протокола UDP - главы 18 и 19 [24]). Взаимные исключения, условные переменные и блокировки чтения-записи имен не имеют. Они могут легко использоваться потоками одного процесса. Совместное использование их различными процессами возможно только в случае, если эти объекты располагаются в общей для этих процессов области памяти. Семафоры Posix бывают двух типов: именованные и размещаемые в памяти. Именованные семафоры могут использоваться только различными процессами (они идентифицируются именами Posix IPC), а размещаемые в памяти должны для этого находиться в разделяемой памяти. Семафоры Systeffl V также являются именованными (с помощью типа key t), они также могут без проблем использоваться несколькими процессами совместно. Блокировки записей fcntl автоматически снимаются ядром при заверщении процесса, если он сам об этом не позаботится. Для семафоров Systeffl V эта возможность является дополнительной. Для юаимных исключений, условных переменных, блокировок чтения-записи и семафоров Posix эта возможность не предусматривается. Каждая блокировка fcntl действует на некоторый диапазон байтов (называемый записью) в файле, указываемом с помощью дескриптора. Блокировки чтения-записи не связываются ни с какими записями. Разделяемая память Posix и Systeffl V обладает живучестью ядра. Она существует до тех пор, пока не будет удалена явно, даже если в какой-то момент не используется ни одним процессом. Размер объекта разделяемой памяти Posix может быть увеличен в процессе работы. Размер сегмента разделяемой памяти Systeffl V фиксируется при его создании. Ограничения ядра на три типа Systeffl V IPC часто требуют настройки вручную, поскольку устанавливаемые для них по умолчанию значения часто не соответствуют требованиям реальных приложений (раздел 3.8). Ограничения на средства Posix IPC обычно не требуют настройки. Информация об объектах Systeffl V IPC (текущий размер, идентификатор владельца, время последнего изменения и т. п.) возвращается вызовом одной из функций XXXctl с командой IPC STAT и программой ipcs. Для получения информации об объектах Posix стандартных способов не предусматривается. Если реализация использует файлы в качестве основы для этих объектов, можно получить эту информацию с помощью функции stat или программы 1 s, если нам известен способ преобразования имени Posix IPC в полное имя файла. Если же в данной реализации файлы не используются, способа получить такую информацию может и не существовать. Из всех средств синхронизации - взаимных исключений, условных переменных, блокировок чтения-записи, блокировок записи, семафоров - только две функции можно вызывать из обработчика сигналов (табл. 5.1): sempost и fcntl. ж Из всех средств передачи сообщений - каналов, очередей сообщений Posix и Systeffl V - только две функции могут быть вызваны из обработчика сигналов: read и wr1 te (используются с именованными и неименованными каналами). ш Из всех средств передачи сообщений только двери предоставляют серверу точную информацию о клиенте (раздел 15.5). В разделе 5.4 мы упомянули два других способа передачи сообщений, которые также предоставляют информацию о клиенте: доменные сокеты в BSD/OS (раздел 14.8 [24]) и каналы в SVR4, если по ним передается дескриптор файла (раздел 15.3.1 [21]). ПРИЛОЖЕНИЕ А Измерение производительности А.1. Введение в основной части книги мы перечислили шесть средств передачи сообшений: неименованные каналы (pipes); ш именованные каналы (FIFO); очереди сообшений Posix; очереди сообшений System V; * двери; ш SunRPC. Кроме того, мы указали пять типов средств синхронизации: Ш взаимные исключения и условные переменные; ш блокировки чтения-записи; ii блокировка записей font 1; Ж семафоры Posix; Я семафоры System V. В этом приложении мы разработаем набор простых программ для измерения производительности этих видов IPC, чтобы иметь возможность аргументировать свой выбор одного из этих средств для конкретной задачи. При сравнении средств передачи сообшений нас интересуют два параметра: 1. Полоса пропускания (bandwidth) - скорость передачи данных по каналу IPC. Для измерения этого параметра мы передаем огромное количество данных (миллионы байтов) от одного процесса другому. Этот параметр измеряется для различных объемов данных на операцию (например, write и read для каналов), и мы ожидаем, что полоса пропускания будет увеличиваться вместе с увеличением количества передаваемых за одну операцию данных. 2. Задержка (latency) определяется как время, которое требуется небольшому сообщению, чтобы проделать путь по каналу IPC от одного процесса к другому и обратно. Мы измеряем время задержки для сообщения размером 1 байт. В реальности величина полосы пропускания говорит нам о том, сколько времени будет потрачено на передачу блока данных по каналу IPC, но IPC также
|
© 2000 - 2024 ULTRASONEX-AMFODENT.RU.
Копирование материалов разрешено исключительно при условии цититирования. |