Отправить другу/подруге по почте ссылку на эту страницуВариант этой страницы для печатиНапишите нам!Карта сайта!Помощь. Как совершить покупку…
московское время19.04.24 23:54:01
На обложку
Гистологический процессинг: Фиксация клеток и тканей. Хромсодержащие…авторы — Буданцев А. Ю.
Военные рассказыавторы — Пепперштейн П.
Каргополье — Онегаавторы — Гунн Г. П.
б у к и н и с т и ч е с к и й   с а й т
Новинки«Лучшие»Доставка и ОплатаМой КнигоПроводО сайте
Книжная Труба   поиск по словам из названия
Авторский каталог
Каталог издательств
Каталог серий
Моя Корзина
Только цены
Рыбалка
Наука и Техника
Математика
Физика
Радиоэлектроника. Электротехника
Инженерное дело
Химия
Геология
Экология
Биология
Зоология
Ботаника
Медицина
Промышленность
Металлургия
Горное дело
Сельское хозяйство
Транспорт
Архитектура. Строительство
Военная мысль
История
Персоны
Археология
Археография
Восток
Политика
Геополитика
Экономика
Реклама. Маркетинг
Философия
Религия
Социология
Психология. Педагогика
Законодательство. Право
Филология. Словари
Этнология
ИТ-книги
O'REILLY
Дизайнеру
Дом, семья, быт
Детям!
Здоровье
Искусство. Культурология
Синематограф
Альбомы
Литературоведение
Театр
Музыка
КнигоВедение
Литературные памятники
Современные тексты
Худ. литература
NoN Fiction
Природа
Путешествия
Эзотерика
Пурга
Спорт

/ИТ-книги

UNIX: взаимодействие процессов — Стивенс Р.
UNIX: взаимодействие процессов
Стивенс Р.
год издания — 2002, кол-во страниц — 576, ISBN — 5-318-00534-9, 0-13-081081-9, тираж — 3000, язык — русский, тип обложки — твёрд. 7БЦ матов., масса книги — 870 гр., издательство — Питер
серия — Мастер-класс
КНИГА СНЯТА С ПРОДАЖИ
UNIX Network Programming
Second Edition
Volume 2. Interprocess Communications
by W. Richard Stevens

Prentice Hall PTR 1999

Пер. с англ. Д. Солнышкова

Формат 70x90 1/16
ключевые слова — unix, межпроцесс, ipc, поток, мультипроцессор, fifo, семафор, rpc, сокет, tcp/ip, network, programming, posix, клиент-сервер, многопоточн, linux, client-server, socket, leopard

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

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


Большинство нетривиальных программ пишутся с использованием одной из форм межпроцессного взаимодействия (IPC — Interprocess Communication). Это естественное следствие принципа разработки, заключающегося в том, что лучше создавать приложение, состоящее из отдельных взаимодействующих элементов, чем одну большую программу. Исторически разработка приложений пережила следующие этапы развития:

1. Сначала были большие цельные программы, которые делали всё необходимое. Отдельные части программы реализовывались в виде функций, обменивавшихся информацией через аргументы, возвращаемые значения и глобальные переменные,

2. Потом стали создаваться небольшие программы, взаимодействующие друг с другом посредством различных средств IPC. Многие стандартные утилиты Unix были разработаны именно таким образом, причём для передачи информации использовались каналы интерпретатора.

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

Комбинация последних двух вариантов также возможна: несколько процессов, каждый из которых состоит из нескольких потоков, вполне могут взаимодействовать между собой.

Мы описываем возможность разделения решаемых задач между несколькими процессами или даже между потоками одного процесса. В мультипроцессорной системе такое приложение сможет выполняться гораздо быстрее, поэтому разделение задач между процессами способно повысить его быстродействие.

В этой книге подробно описываются четыре формы IPC:

1. Передача сообщений (каналы, FIFO, очереди сообщений).

2. Синхронизация (взаимные исключения, условные переменные, блокировки чтения-записи, блокировка файлов и записей, семафоры).

3. Разделяемая память (неименованная и именованная),

4. Удалённый вызов процедур (двери, Sun RPC).

Здесь не рассматриваются вопросы написания программ, взаимодействующих по сети. Такая форма взаимодействия обычно подразумевает использование интерфейса сокетов и стека протоколов TCP/IP; эти темы были подробно разобраны в первом томе книги.

Нам могут возразить, что средства IPC, не предназначенные для взаимодействия по сети, вообще не следует использовать и что вместо этого следует изначально разрабатывать приложения с расчётом на использование в сети. Однако на практике средства IPC, работающие только в пределах одного узла, функционируют гораздо быстрее, чем сетевые, да и программы с их использованием оказываются проще. Разделяемая память и средства синхронизации обычно не могут использоваться по сети — они доступны только в пределах одного узла. Опыт и история показывают, что существует потребность в наличии как несетевых, так и сетевых форм IPC.

В этой книге используется материал первого тома и других моих книг:

• UNIX Network Programming, том 1,1998;
• Advanced Programming in the UNIX Environment, 1992;
• TCP/IP Illustrated, том 1,1994;
• TCP/IP Illustrated, том 2, написанной в соавторстве с Гари Райтом (Gary Wright),1995;
• TCP/IP Illustrated, том 3, 1996.

Может показаться странным, что я описываю средства IPC в книге, заглавие которой содержит слова «Network Programming». Замечу, что IPC часто используется и в сетевых приложениях. Как говорилось в предисловии к книге «UNIX Network Programming» 1990 года издания, «для понимания методов разработки сетевых приложений необходимо понимание средств межпроцессного взаимодействия (IPC)».

Введение

ОГЛАВЛЕНИЕ

Предисловие18
 
Введение18
Изменения со времени первого издания19
Кому адресована эта книга?20
Исходный код и опечатки20
Благодарности21
Выходные сведения21
От издательства22
 
ЧАСТЬ 1. ВВЕДЕНИЕ В IPC UNIX
 
ГЛАВА 1. Обзор средств взаимодействия процессов Unix24
 
1.1. Введение24
1.2. Процессы, потоки и общий доступ к информации26
Потоки27
1.3. Живучесть объектов IPC27
1.4. Пространства имён29
1.5. Действие команд fork, exec и exit на объекты IPC31
1.6. Обработка ошибок; функции-обёртки32
Значение errno34
1.7. Стандарты Unix35
Posix35
The Open Group37
Версии Unix и переносимость37
1.8. Комментарий к примерам IPC38
1.9. Резюме38
Упражнения40
 
ГЛАВА 2. Posix IPC41
 
2.1. Введение41
2.2. Имена IPC41
Функция px_ipc_name43
2.3. Создание и открытие каналов IPC44
2.4. Разрешения IPC47
2.5. Резюме48
Упражнения48
 
ГЛАВА 3. System V IPC49
 
3.1. Введение49
3.2. Ключи типа key_t и функция ftok49
Пример50
3.3. Структура ipc_perm51
3.4. Создание и открытие каналов IPC52
3.5. Разрешения IPC54
3.6. Повторное использование идентификаторов56
3.7. Программы ipcs и ipcrm58
3.8. Ограничения ядра58
3.9. Резюме60
Упражнения61
 
ЧАСТЬ 2. ОБМЕН СООБЩЕНИЯМИ
 
ГЛАВА 4. Именованные и неименованные каналы63
 
4.1. Введение63
4.2. Приложение типа клиент-сервер63
4.3. Программные каналы64
Пример67
4.4. Двусторонние каналы70
4.5. Функции popen и pclose72
Пример73
4.6. Именованные каналы (FIFO)74
Пример75
Пример: неродственные клиент и сервер77
4.7. Некоторые свойства именованных и неименованных каналов78
4.8. Один сервер, несколько клиентов81
Открытие файла и отправка его в FIFO клиента84
Атомарность записи в FIFO86
FIFO и NFS87
4.9. Последовательные и параллельные серверы87
Атака типа «отказ в обслуживании»88
4.10. Потоки и сообщения88
4.11. Ограничения программных каналов и FIFO93
4.12. Резюме95
Упражнения95
 
ГЛАВА 5. Очереди сообщений Posix97
 
5.1. Введение97
5.2. Функции mq_open, mq_close, mq_unlink98
Пример: программа mqcreate199
Пример: программа mqunlink101
5.3. Функции mq_getattr и mq_setattr101
Пример: программа mqgetattr102
Пример: программа mqcreate103
5.4. Функции mq_send и mq_receive105
Пример: программа mqsend107
Пример: программа mqreceive107
5.5. Ограничения очередей сообщений109
Пример: программа mqsysconf109
5.6. Функция mq_notify109
Пример: простая программа с уведомлением111
Сигналы Posix: функции типа Async-Signal-Safe11З
Пример: уведомление сигналом114
Пример: уведомление сигналом с отключением блокировки116
Пример: уведомление с использованием sigwait вместо обработчика118
Пример: очереди сообщений Posix и функция select119
Пример: запуск нового потока121
5.7. Сигналы реального времени Posix122
Пример125
Функция signal_rt128
5.8. Реализация с использованием отображения в память129
Функция mq_close140
Функция mq_unlink141
Функция mq_getattr141
Функция mq_setattr142
Функция mq_notify143
Функция mq_send144
Функция mq_receive148
5.9. Резюме150
Упражнения150
 
ГЛАВА 6. Очереди сообщений System V152
 
6.1. Введение152
6.2. Функция msgget153
6.3. Функция rnsgsnd153
6.4. Функция msgrcv155
6.5. Функция msgctl156
Пример156
6.6. Простые примеры157
Программа msgcreate158
Программа msgsnd158
Программа msgrcv159
Программа msgrmid160
Примеры160
Программа msgrcvid161
6.7. Пример программы клиент-сервер162
6.8. Мультиплексирование сообщений164
Пример: одна очередь на приложение165
Пример: одна очередь для каждого клиента169
6.9. Использование select и poll с очередями сообщений173
6.10. Ограничения, накладываемые на очереди сообщений174
Пример175
6.11. Резюме177
Упражнения177
 
ЧАСТЬ 3. СИНХРОНИЗАЦИЯ
 
ГЛАВА 7. Взаимные исключения и условные
переменные179
 
7.1. Введение179
7.2. Взаимные исключения: установка и снятие блокировки179
7.3. Схема производитель-потребитель181
7.4. Блокировка и ожидание186
7.5 Условные переменные: ожидание и сигнализация187
Исключение конфликтов блокировок191
7.6. Условные переменные; время ожидания
и широковещательная передача191
7.7. Атрибуты взаимных исключений и условных переменных192
Завершение процесса, заблокировавшего ресурс194
7.8. Резюме195
Упражнения196
 
ГЛАВА 8. Блокировки чтения-записи197
 
8.1. Введение197
8.2. Получение и сброс блокировки чтения-записи198
8.3. Атрибуты блокировки чтения-записи198
8.4. Реализация с использованием взаимных исключений и условных
переменных199
Тип данных pthread_rwlock_t200
Функция pthread_rwlock_init201
Функция pthread_rwlock_destroy201
Функция ptbread_rwlock rdlock203
Функция pthread_rwlock_tryrdlock204
Функция pthread_rwlock_wrlock204
Функция pthread_rwlock_trywrlock204
Функция pthread_rwlock_unlock206
8.5. Отмена выполнения потоков207
Пример208
Функция thread1210
Функция thread2210
8.6. Резюме212
Упражнения212
 
ГЛАВА 9. Блокирование записей213
 
9.1, Введение213
9.2. Блокирование записей и файлов217
История218
9.3. Блокирование записей с помощью fcntl по стандарту Posix219
Пример221
Пример: упрощение с помощью макросов222
9.4. Рекомендательная блокировка223
Пример: несотрудничающие процессы223
9.5. Обязательная блокировка224
Пример225
9.6. Приоритет чтения и записи227
Пример: блокировка на чтение при наличии в очереди блокировки
    на запись227
Пример: имеют ли приоритет запросы на запись перед запросами
    на чтение?230
9.7. Запуск единственного экземпляра демона233
9.8. Блокирование файлов234
9.9. Блокирование в NFS236
9.10. Резюме237
Упражнения237
 
ГЛАВА 10. Семафоры Posix239
 
10.1. Введение239
10.2. Функции sem_open, sem_close и sem_unlink245
10.3. Функции sem_wait и sem_trywait246
10.4. Функции sem_post и sem_getvalue246
10.5. Простые примеры247
Программа semcreate247
Программа semunlink248
Програлша semgetvalue249
Программа semwait249
Программа sempost250
Примеры250
10.6. Задача производителей и потребителей252
Зависание257
10.7. Блокирование файлов258
10.8. Функции sem_init и sem_destroy258
Пример260
10.9. Несколько производителей, один потребитель262
10.10. Несколько производителей, несколько потребителей265
10.11. Несколько буферов268
10.12. Использование семафоров несколькими процессами276
10.13. Ограничения на семафоры277
Пример: программа semsysconf277
10.14. Реализация с использованием FIFO278
Функция sem_open279
Функция sem_close281
Функция sem_unlink281
Функция sem_post282
Функция sem_wait282
10.15. Реализация с помощью отображения в память283
Функция sem_open284
Функция sem_close288
Функция sem_unlink288
Функция sem_post288
Функция sem_wait289
Функция sem_trywait290
Функция sem_getvalue291
10.16. Реализация с использованием семафоров System V291
Функция sem_open292
Функция sem_close295
Функция sem_unlink296
Функция sem_post296
Функция sem_wait296
Функция sem_trywait298
Функция sem_getvalue298
10.17. Резюме299
Упражнения299
 
ГЛАВА 11. Семафоры System V301
 
11.1. Введение301
11.2. Функция semget302
Инициализация значения семафора303
11.3. Функция semop305
11.4. Функция semctl307
11.5. Простые программы308
Программа semcreatc309
Программа semrmid309
Программа semsetvalues310
Программа semgetvalues311
Программа semops312
Примеры313
11.6. Блокирование файлов314
11.7. Ограничения семафоров System V316
Пример316
11.8. Резюме320
Упражнения320
 
ЧАСТЬ 4. РАЗДЕЛЯЕМАЯ ПАМЯТЬ
 
ГЛАВА 12. Введение в разделяемую память322
 
12.1. Введение322
12.2. Функции mmap, munmap и msync327
Почему вообще используется отображение в память?329
12.3. Увеличение счётчика в отображаемом в память файле330
12.4. Неименованное отображение в память в 4.4BSD334
12.5. Отображение в память в SVR4 с помощью /dev/zero335
12.6. Обращение к объектам, отображённым в память336
12.7. Резюме341
Упражнения342
 
ГЛАВА 13. Разделяемая память Posix343
 
13.1. Введение343
13.2. Функции shm_ореп и shm_unlink343
13.3. Функции ftruncate и fstat345
13.4. Простые программы346
Программа shmcreate346
Программа shmunlink347
Программа shmwrite347
Программа shmread348
Примеры349
Пример349
13.5. Увеличение общего счётчика351
13.6. Отправка сообщений на сервер353
13.7. Резюме359
Упражнения360
 
ГЛАВА 14. Разделяемая память System V361
 
14.1. Введение361
14.2. Функция shmget361
14.3. Функция shmat362
14.4. Функция shmdt362
14.5. Функция shmctl363
14.6. Простые программы363
Программа shmget363
Программа shmrmid364
Программа shmwrite364
Программа shmread365
Примеры366
14.7. Ограничения, накладываемые на разделяемую память367
Пример367
14.8. Резюме368
Упражнение369
 
ЧАСТЬ 5. УДАЛЁННЫЙ ВЫЗОВ ПРОЦЕДУР
 
ГЛАВА 15. Двери371
 
15.1. Введение371
Пример373
15.2. Функция door_call377
15.3. Функция door_create379
15.4. Функция door_return3S0
15.5. Функция door_cred381
15.6. Функция door_info381
15.7. Примеры382
Функция door_info382
Буфер результатов слишком мал383
Функция door_cred и информация о клиенте385
Автоматическое управление потоками сервера386
Автоматическое управление потоками сервера: несколько процедур388
Атрибут DOOR_UNREF для серверов391
15.8. Передача дескрипторов395
Пример396
15.9. Функция door_server_create400
15.10. Функции door_bind, door_unbind и door_revoke406
15.11. Досрочное завершение клиента или сервера406
Досрочное завершение сервера406
Непрерываемость системного вызова door_call407
Идемпотентные и неидемпотентные процедуры408
Досрочное завершение клиента411
15.12. Резюме413
Упражнения413
 
ГЛАВА 16. Пакет SunRPC415
 
16.1. Введение415
Пример416
История422
16.2. Многопоточность424
16.3. Привязка сервера427
Inetd и серверы RPC430
16.4. Аутентификация431
16.5. Тайм-аут и повторная передача434
Управление соединением по TCP437
Идентификатор транзакций438
Кэш повторных ответов438
16.6. Семантика вызовов439
16.7. Досрочное завершение сервера или клиента441
Досрочное завершение сервера441
Досрочное завершение клиента442
16.8. XDR: представление внешних данных443
Пример: использование XDR без RPC448
Пример: вычисление размера буфера454
Пример: необязательные данные455
Пример: обработка связного списка459
16.9. Форматы пакетов RPC461
16.10. Резюме466
Упражнения467
 
Эпилог469
 
ПРИЛОЖЕНИЕ А
Измерение производительности473
 
А.1. Введение473
А.2. Результаты474
А.З, Измерение полосы пропускания: программы481
А.4. Измерение задержки передачи сообщений: программы494
А.5. Синхронизация потоков: программы500
А.6. Синхронизация процессов: программы510
 
ПРИЛОЖЕНИЕ Б
Основы многопоточного программирования514
 
Б.1. Введение514
Б.2. Основные функции для работы с потоками: создание и завершение515
 
ПРИЛОЖЕНИЕ В
Вспомогательные исходные коды518
 
В.1. Заголовочный файл unpipch518
В.2. Заголовочный файл config.h522
В.3. Стандартные функции вывода сообщений об ошибках523
 
ПРИЛОЖЕНИЕ Г
Решения некоторых упражнений527
 
Глава 1527
Глава 2527
Глава 3528
Глава 4529
Глава 5531
Глава 6533
Глава 7533
Глава 9534
Глава 10535
Глава 11537
Глава 12537
Глава 13540
Глава 14541
Глава 15541
Глава 16543
 
Литература546
 
Алфавитный указатель548

Книги на ту же тему

  1. UNIX. Практическое пособие администратора, Торчинский Ф., 2003
  2. UNIX. Справочник, Роббинс А., 2007
  3. UNIX. Профессиональное программирование. — 2-е изд., Стивенс Р., Раго С., 2007
  4. Основы организации и функционирования ОС ЭВМ, Краковяк С., 1988
  5. Современные языки и технологии параллельного программирования: Учебник, Гергель В. П., 2012
  6. Технологии параллельного программирования MPI и OpenMP: Учебное пособие, Антонов А. С., 2012
  7. UNIX: Разработка сетевых приложений, Стивенс Р., 2003
  8. Настройка производительности UNIX-систем, Мусумеси Д. П., Лукидес М., 2003
  9. Многоядерное программирование, Эхтер Ш., Робертс Д., 2010
  10. DNS и BIND, Альбитц П., Ли К., 2002
  11. Создание защиты в Интернете, Цвики Э., Купер С., Чапмен Б., 2002
  12. Linux и UNIX: программирование в shell. Руководство разработчика, Тейнсли Д., 2001
  13. TCP/IP. Сетевое администрирование, 3-е издание, Хант К., 2004
  14. Использование Linux. — 6-е изд. Специальное издание, Бендел Д., Нейпир Р., 2002
  15. Linux. Карманный справочник, Граннеман С., 2007
  16. Linux: основные команды. Карманный справочник, Баррет Д. Д., 2007
  17. Взломы и настройка LINUX. 100 профессиональных советов и инструментов. Практическое пособие, Фликенгер Р., 2006
  18. Запускаем Linux. — 3-е изд., Уэлш М., Далхаймер М. К., Кауфман Л., 2001
  19. Java для Internet в Windows и Linux, Дунаев С. Б., 2004
  20. Linux. Справочник, Сивер Э., Спейнауэр С., Фиггинс С., Хекман Д., 2001
  21. Современное проектирование на C++: Обобщённое программирование и прикладные шаблоны проектирования, Александреску А., 2015
  22. Программирование на C++ в Linux, Секунов Н. Ю., 2003
  23. Язык программирования C. Лекции и упражнения. — 6-е изд., Прата С., 2015
  24. Взломы Web-узлов. 100 профессиональных советов и инструментов. Практическое пособие, Хеменвей К., Калишейн Т., 2006
  25. Apache для профессионалов, Уэйнрайт П., 2001
  26. Perl для системного администрирования, Бланк-Эдельман Д. Н., 2001
  27. PHP 5. — 2-е изд., перераб. и доп., Котеров Д. В., Костарев А. Ф., 2010
  28. Параллельные вычислительные системы, Головкин Б. А., 1980
  29. Генерация операционной системы ОС ЕС, Назаров С. В., Барсуков А. Г., 1985

Напишите нам!© 1913—2013
КнигоПровод.Ru
Рейтинг@Mail.ru работаем на движке KINETIX :)
elapsed time 0.020 secработаем на движке KINETIX :)