Программирование для Linux. Профессиональный подход
Шрифт:
5.1.2. Модель памяти
При совместном использовании сегмента памяти один процесс должен сначала выделить память. Затем все остальные процессы, которые хотят получить доступ к ней, должны подключить сегмент. По окончании работы с сегментом каждый процесс отключает его. Последний процесс освобождает память.
Для того чтобы понять принципы выделения и подключения сегментов памяти, необходимо разобраться в модели памяти Linux. В Linux виртуальная память (ВП) каждого процесса разбита на страницы. Все процессы хранят таблицу соответствий между своими адресами памяти и страницами ВП, содержащими реальные данные. Несмотря на то что за каждым процессом закреплены свои адреса, разным процессам разрешается ссылаться на одни и те же страницы. Это и есть совместное использование памяти.
При выделении совместно используемого сегмента памяти создаются страницы ВП. Это действие должно выполняться только одни раз, так как все остальные процессы будут обращаться к этому же сегменту. Если запрашивается выделение существующего сегмента, новые страницы не создаются; вместо этого возвращается идентификатор существующих страниц. Чтобы сделать сегмент общедоступным, процесс подключает его, при этом создаются адресные ссылки на страницы сегмента. По окончании работы с сегментом адресные ссылки удаляются. Когда все процессы завершили работу с сегментом, один (и только один) из них должен освободить страницы виртуальной памяти.
Размер совместно используемого сегмента кратен размеру страницы ВП. В Linux последняя величина обычно равна 4 Кбайт, но никогда не помешает это проверить с помощью функции
5.1.3. Выделение сегментов памяти
Процесс выделяет сегмент памяти с помощью функции
Во втором аргументе функции задается размер сегмента в байтах. Это значение округляется, чтобы быть кратным размеру страницы ВП.
Третий параметр содержит набор битовых флагов. Перечислим наиболее важные из них.
■
■
■ Флаги режима. В эту группу входят 9 флагов, задающих права доступа к сегменту для владельца, группы и остальных пользователей. Биты выполнения игнорируются. Проще всего задавать права доступа с помощью констант, определенных в файле
15
Эти же константы используются при работе с файлами. Они описываются в разделе 10.3. "Права доступа к файлам".
В следующем фрагменте программы функция
В случае успешного завершения функция возвращает идентификатор сегмента. Если сегмент уже существует, проверяются нрава доступа к нему.
5.1.4. Подключение и отключение сегментов
Чтобы сделать сегмент памяти общедоступным, процесс должен подключить его с помощью функции
■
■
В случае успешного завершения функция возвращает адрес подключенного сегмента. Дочерний процесс, созданный функцией
По завершении работы с сегментом его необходимо отключить с помощью функции
5.1.5. Контроль и освобождение совместно используемой памяти
Функция
Чтобы получить информацию о сегменте, укажите в качестве второго параметра константу
Чтобы удалить сегмент, передайте во втором параметре константу
Каждый совместно используемый сегмент должен явно освобождаться с помощью функции
План битвы
5. Цеховик
Фантастика:
попаданцы
альтернативная история
рейтинг книги
На границе империй. Том 9. Часть 4
17. Фортуна дама переменчивая
Фантастика:
космическая фантастика
попаданцы
рейтинг книги
Инженер Петра Великого 4
4. Инженер Петра Великого
Фантастика:
попаданцы
альтернативная история
рейтинг книги
Товарищ "Чума" 3
3. Товарищ "Чума"
Фантастика:
городское фэнтези
попаданцы
альтернативная история
рейтинг книги
Локки 9. Потомок бога
9. Локки
Фантастика:
фэнтези
попаданцы
героическая фантастика
боевая фантастика
рейтинг книги
Товарищ "Чума" 5
5. Товарищ "Чума"
Фантастика:
городское фэнтези
попаданцы
альтернативная история
рейтинг книги
Третье правило диверсанта
Фантастика:
постапокалипсис
рейтинг книги
Путь
Фантастика:
космическая фантастика
рейтинг книги
Герцог и я
1. Бриджертоны
Любовные романы:
исторические любовные романы
рейтинг книги
Украсть у президента
Детективы:
триллеры
рейтинг книги
Матабар. II
2. Матабар
Фантастика:
фэнтези
рейтинг книги
Бастард Императора. Том 14
14. Бастард Императора
Фантастика:
городское фэнтези
аниме
фэнтези
попаданцы
рейтинг книги
Товарищ "Чума"
1. Товарищ "Чума"
Фантастика:
попаданцы
альтернативная история
рейтинг книги
Одержимый
Top Thriller
Детективы:
триллеры
маньяки
рейтинг книги