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

В Linux 2.6.16 было добавлено три новых нестандартных значения advice: MADV_DONTFORK, MADV_DOFORK и MADV_REMOVE. В Linux 2.6.32 и 2.6.33 появилось еще четыре нестандартных значения: MADV_HWPOISON, MADV_SOFT_OFFLINE, MADV_MERGEABLE и MADV_UNMERGEABLE. Эти константы предназначены для особых случаев и описаны в справочной странице madvise(2).

В большинстве реализаций UNIX вызов madvise() поддерживает для аргумента advice как минимум те константы, которые описаны выше. Но в SUSv3 данный программный интерфейс носит другое имя, posix_madvise(), а ко всем соответствующим значениям advice добавляется префикс POSIX_. Таким образом, стандартные константы выглядят как POSIX_MADV_NORMAL, POSIX_MADV_RANDOM, POSIX_MADV_SEQUENTIAL, POSIX_MADV_WILLNEED и POSIX_MADV_DONTNEED. Этот альтернативный интерфейс реализован в библиотеке glibc (начиная с версии 2.2) и использует вызовы madvise(), однако в некоторых UNIX-системах не поддерживается.

Согласно стандарту SUSv3 функция posix_madvise() не должна влиять на семантику программы. Но в библиотеке glibc до версии 2.7 операция POSIX_MADV_DONTNEED была реализована с помощью вызова madvise() с флагом MADV_DONTNEED, который идет вразрез с этим требованием (как было описано выше). Начиная с glibc 2.7, при использовании константы POSIX_MADV_DONTNEED функция-обертка posix_madvise() не выполняет никаких действий и, следовательно, не влияет на семантику программы.

46.5. Резюме

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

• системный вызов mprotect() изменяет защиту участка виртуальной памяти;

• системные вызовы mlock() и mlockall() «запирают» участок виртуального пространства в рамках физической памяти и не дают сбросить его на диск;

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

• системный вызов madvise() и функция posix_madvise() дают возможность сообщить ядру о потенциальной модели поведения процесса в контексте использования участка виртуальной памяти.

46.6. Упражнения

46.1. Проверьте влияние ограничения RLIMIT_MEMLOCK, написав программу, которая устанавливает соответствующее ограничение и затем пытается заблокировать больше памяти, чем позволено.

46.2. Напишите программу, проверяющую действие вызова madvise() с флагом MADV_DONTNEED на отображение типа MAP_PRIVATE, доступное для записи.

<p>47. Введение в межпроцессное взаимодействие стандарта POSIX</p>

Стандарт POSIX.1b содержит ряд расширений реального времени, которые формируют набор IPC-механизмов (одной из целей создателей данного стандарта было разработать средства межпроцессного взаимодействия, лишенные недостатков аналогичных механизмов из состава System V). В совокупности эти механизмы называются POSIX IPC. Их можно разделить на три категории.

• Очереди сообщений могут использоваться для передачи информации между процессами. Считывающий и записывающий процессы обмениваются блоками (сообщениями) с четкими границами (в отличие от каналов, которые предоставляют сплошной байтовый поток). Стандарт POSIX позволяет назначать каждому сообщению отдельный приоритет; сообщения с более высоким приоритетом передаются раньше остальных.

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

• Разделяемая память позволяет нескольким процессам работать с одним и тем же участком памяти. В стандарте POSIX этот механизм применяется для быстрого межпроцессного взаимодействия. Изменения, внесенные в разделяемую память одним процессом, сразу же становятся доступными для других процессов, разделяющих тот же участок.

В данной главе мы познакомимся со средствами POSIX IPC, уделяя внимание характерным для них свойствам.

47.1. Краткий обзор программных интерфейсов

Механизмы POSIX IPC имеют целый ряд общих свойств, которые будут подробно рассмотрены на следующих нескольких страницах. В табл. 47.1 представлены их программные интерфейсы.

Если не считать упоминаний в табл. 47.1, в этой главе будет проигнорирован тот факт, что POSIX-семафоры бывают двух видов: именованные и анонимные. Первые похожи на другие механизмы POSIX IPC, описанные в данной главе: они имеют имена и доступны для любого процесса с подходящими правами доступа к заданному объекту. У анонимных семафоров нет соответствующего идентификатора; они помещаются на участок памяти, который разделяется несколькими процессами (или потоками одного процесса). Семафоры обоих этих типов будут подробно описаны в главе 49.

Таблица 47.1. Перечень программных интерфейсов для работы с объектами POSIX IPC

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

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

1С: Бухгалтерия 8 с нуля
1С: Бухгалтерия 8 с нуля

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

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

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

Современные торговые предприятия предлагают своим клиентам широчайший ассортимент товаров, который исчисляется тысячами и десятками тысяч наименований. Причем многие позиции могут реализовываться на разных условиях: предоплата, отсрочка платежи, скидка, наценка, объем партии, и т.д. Клиенты зачастую делятся на категории – VIP-клиент, обычный клиент, постоянный клиент, мелкооптовый клиент, и т.д. Товарные позиции могут комплектоваться и разукомплектовываться, многие товары подлежат обязательной сертификации и гигиеническим исследованиям, некондиционные позиции необходимо списывать, на складах периодически должна проводиться инвентаризация, каждая компания должна иметь свою маркетинговую политику и т.д., вообщем – современное торговое предприятие представляет живой организм, находящийся в постоянном движении.Очевидно, что вся эта кипучая деятельность требует автоматизации. Для решения этой задачи существуют специальные программные средства, и в этой книге мы познакомим вам с самым популярным продуктом, предназначенным для автоматизации деятельности торгового предприятия – «1С Управление торговлей», которое реализовано на новейшей технологической платформе версии 1С 8.2.

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

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