12.4. Неименованное отображение в память в 4.4BSD

12.4. Неименованное отображение в память в 4.4BSD

Наши примеры из листингов 12.2 и 12.3 работают отлично, но нам приходится создавать файл в файловой системе (аргумент командной строки), вызывать open, записывать нули в файл вызовом write (чтобы проинициализировать его). Если mmap используется для передачи области разделяемой памяти через fork, мы можем упростить эту схему, используя свойства реализации.

1. В версии 4.4BSD предоставляется возможность неименованного отображения в память. При этом полностью пропадает необходимость создавать или открывать файлы. Вместо этого указываются флаги MAP_SHARED | MAP_ANON и дескриптор fd = –1. Сдвиг, задаваемый аргументом offset, игнорируется. Память автоматически инициализируется нулями. Пример использования приведен в листинге 12.4.

2. В версии SVR4 имеется файл /dev/zero, который мы открываем и дескриптор которого указываем при вызове mmap. Это устройство возвращает нули при попытке считывания, а весь направляемый на него вывод сбрасывается. Пример использования приведен в листинге 12.5. (Во многих реализациях, произошедших от BSD, также поддерживается устройство /dev/zero, например в SunOS 4.1.x и BSD/OS 3.1.)

В листинге 12.4 приведена часть листинга 12.2, которая изменяется при переходе к использованию неименованного отображения в память в 4.4BSD.

Листинг 12.4. Отображение в память в 4.4BSD

//shm/incr_map_anon.с

3  int

4  main(int argc, char **argv)

5  {

6   int i, nloop;

7   int *ptr;

8   sem_t *mutex;

9   if (argc != 2)

10   err_quit("usage: incr_map_anon <#loops>");

11  nloop = atoi(argv[1]);

12  /* отображение в память */

13  ptr = Mmap(NULL, sizeof(int), PROT_READ | PROT_WRITE,

14   MAP_SHARED | MAP_ANON, –1, 0);

6-11 Автоматические переменные fd и zero больше не используются, как и аргумент командной строки, задававший имя создаваемого файла.

12-14 Файл больше не нужно открывать. Вместо этого указывается флаг MAP_ANON при вызове mmap, а пятый аргумент этой функции (дескриптор) принимает значение –1.

Поделитесь на страничке

Следующая глава >

Похожие главы из других книг

Общая память

Из книги Блоги. Новая сфера влияния автора Попов Антон Валерьевич

Общая память Метки: темы блога, внимание, пользовательский контентЛюбой браузер способен запомнить ссылку («закладку») на страницу или сайт целиком. Некоторые ресурсы специально предлагают посетителю сделать стартовой главную страницу или занести ее в «Избранное». Это


Указатели и память

Из книги Сущность технологии СОМ. Библиотека программиста автора Бокс Дональд


СОФТЕРРА: Память на лица, или Лица на память

Из книги Журнал «Компьютерра» № 36 от 3 октября 2006 года автора Журнал «Компьютерра»

СОФТЕРРА: Память на лица, или Лица на память Автор: Алексей КлимовВышла девятая версия ACDSee. Судя по объему нововведений, это не «Девятый вал» Айвазовского [Иван Айвазовский, «Девятый вал». 1850 г] и даже не «9 рота» Бондарчука [Федор Бондарчук, «9 рота». 2005 г]. Поэтому в обзоре


Оперативная память

Из книги Работа на ноутбуке автора Садовский Алексей

Оперативная память Из предыдущего раздела должно быть понятно, что процессор – это устройство, обрабатывающее данные, которые хранятся в памяти. В этом разделе главы мы поговорим об одном из типов компьютерной памяти – оперативной памяти, или ОЗУ[4] (рис. 3.2). Рис. 3.2.


R.12.5 Свободная память

Из книги Справочное руководство по C++ автора Страустрап Бьярн

R.12.5 Свободная память Когда создается объект с помощью операции new, для получения свободной памяти вызывается (неявно) функция operator new() (§R.5.3.3).Если функция operator new() не может выполнить запрос, она возвращает 0.В классе X функция X::operator new() является статическим членом, даже если


Память и накопители

Из книги Журнал PC Magazine/RE №08/2009 автора Журнал «PC Magazine»

Память и накопители Главный навык, который необходим детям XXI века, – способность работать с огромными объемами информации. Цифровые снимки, базы данных, мультимедийные энциклопедии, не говоря уже о бескрайних просторах Интернета, – все это требует умения быстро


4. Память

Из книги Об интеллекте [другая версия перевода книги] автора Хокинс Джефф

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


1.3.3. Оперативная память

Из книги Самоучитель работы на компьютере автора Колисниченко Денис Николаевич

1.3.3. Оперативная память Почему эта память — оперативная? Потому что она нужна при выполнении оперативных задач, например открыть Word, запустить почту, посмотреть картинку, поиграть в Квейк и т. д.В оперативную память (ОЗУ, оперативное запоминающее устройство) загружаются


2.11. Память

Из книги Феномен науки. Кибернетический подход к эволюции автора Турчин Валентин Фёдорович


7.2.6.6. Общая память

Из книги Искусство программирования для Unix автора Реймонд Эрик Стивен

7.2.6.6. Общая память Тогда как два процесса, использующие для информационного обмена сокеты, могут выполняться на различных машинах (и в действительности могут быть разделены Internet-соединением, "огибающим" половину планеты), общая память (shared memory) требует, чтобы поставщики и


Почему вообще используется отображение в память?

Из книги UNIX: взаимодействие процессов автора Стивенс Уильям Ричард

Почему вообще используется отображение в память? До сих пор мы всегда говорили об отображении в память содержимого файла, который сначала открывается вызовом open, а затем отображается вызовом mmap. Удобство состоит в том, что все операции ввода-вывода осуществляются ядром и


12.5. Отображение в память в SVR4 с помощью /dev/zero

Из книги Русский справочник по Win32 API автора Сорока Тарас

12.5. Отображение в память в SVR4 с помощью /dev/zero В листинге 12.5 приведена часть новой версии программы, претерпевшая изменения по сравнению с листингом 12.2 при переходе к использованию отображения с помощью /dev/zero.Листинг 12.5. Отображение памяти в SVR4 с помощью


Память

Из книги Операционная система UNIX автора Робачевский Андрей М.

Память HeapSize Функция HeapSize возвращает размер блока памяти, выделенного из кучи функциями HeapAlloc или HeapReAlloc , в байтах. DWORD HeapSize ( HANDLE hHeap , // дескориптор кучи DWORD dwFlags , // контрольные флаги размера кучи LPCVOID lpMem // указатель на память, чей размер возвращается ); Параметры hHeap -


Реализация 4.4BSD

Из книги Ноутбук [секреты эффективного использования] автора Пташинский Владимир

Реализация 4.4BSD Если вы никогда ранее не сталкивались с таким типом устройства сервера (несколько процессов, вызывающих функцию accept на одном и том же прослушиваемом сокете), вас, вероятно, удивляет, что это вообще может работать. Пожалуй, здесь уместен краткий экскурс,


Оперативная память

Из книги автора

Оперативная память Именно оперативная память оказывает очень большое влияние на производительность системы. Компьютер даже с самым мощным процессором будет крайне медленно «ворочаться», если в его памяти тесно приложениям и данным. В таком случае система будет