- •Раздел 5. Управление памятью в операционных системах
- •5.1. Классификация способов организации памяти
- •5.2. Управление физической памятью
- •5.2.1. Однозадачные системы
- •5.2.2. Многозадачные системы
- •5.3. Управление виртуальной памятью
- •5.3.1. Общая характеристика виртуальной памяти
- •5.3.2. Страничная организация виртуальной памяти
- •5.3.3. Сегментная организация виртуальной памяти
- •5.3.4. Стратегии управления виртуальной памятью
- •1. Выталкивание случайной страницы
- •2. Выталкивание первой пришедшей страницы
- •3. Выталкивание реже всего используемой страницы
- •4. Выталкивание дольше всех не использовавшейся страницы
- •5.4. Совместное использование памяти
- •Закрытие объекта:
- •Раздел 5
Закрытие объекта:
CloseHandle(hMapFile);
Посмотрим, как то же самое делается в Линукс:
Создайте ключ для идентификации общего сегмента. Для этого вызовите функцию ftok. Например, для создания ключа mykey с идентификатором проекта R, хранящимся в переменной proj (тип char) и именем файла null_file, воспользуйтесь следующим оператором:
mykey = ftok(null_file,proj);
Выполните одно из следующих действий:
Создайте общий сегмент памяти с помощью функции shmget. Например, для создания сегмента размером 4096 и присвоения значения shmid целочисленной переменной mem_id, используйте следующее выражение:
mem_id = shmget(mykey,4096,IPC_CREAT|o666);
Получите указатель на ранее созданный общий сегмент с помощью функции shmget. Например, для того чтобы получить ссылку на сегмент, ранее связанный с ключом mykey и присвоить значение shmid целочисленной переменной mem_id, укажите в программе оператор:
mem_id = shmget(mykey,4096,IPC_ACCESS);
Предоставьте общий сегмент процессу с помощью функции shmat. Например, для подключения созданного сегмента можно воспользоваться оператором
ptr = shmat(mem_id);
В этом примере переменная ptr представляет собой указатель на структуру, определяющую поля общего сегмента. Такая структура-шаблон применяется для чтения и записи данных в общий сегмент. Шаблон должен совпадать для всех процессов, работающих с общим сегментом.
Выполните необходимые операции с данными сегмента, пользуясь шаблонной структурой.
Отключите общий сегмент от процесса с помощью функции shmdt:
shmdt(ptr);
Если общий сегмент больше не нужен, удалите его с помощью функции shmctl:
shmctl(mem_id,IPC_RMID,ptr);