На главную

On-line справка по Win32 API

Написать письмо
БЕСПЛАТНАЯ ежедневная online лотерея! Выигрывай каждый день БЕСПЛАТНО!
Список всех статей A-B-C-D-E-F-G-H-I-J-K-L-M-N-O-P-Q-R-S-T-U-V-W-X-Y-Z | Скачать Вниз

Shared Memory



In the Win32 API, shared memory is implemented by file mapping. All memory allocated by the other allocation methods (the GlobalAlloc, LocalAlloc, HeapAlloc, or VirtualAlloc function) is accessible only to the calling process. Memory allocated by a DLL, however, is in the address space of the process that called the DLL and is not accessible to other processes using the same DLL.

Named file mapping provides an easy way to create a block of shared memory. A process can specify a name when it uses the CreateFileMapping function to create a file-mapping object. Other processes can specify the same name to either the CreateFileMapping or OpenFileMapping function to obtain a handle of the mapping object. The names of event objects, semaphore objects, mutex objects, and file-mapping objects share the same name space. If a specified name matches the name of an existing object of a different type, an error occurs. When creating named objects, try to use unique names and check the function return values for duplicate name errors.

Each process specifies its handle of the file-mapping object in the MapViewOfFile function to map a view of the file into its own address space. The views of all processes for a single file-mapping object are mapped into the same sharable pages of physical storage. However, the virtual addresses of the mapped views can vary from one process to another, unless the MapViewOfFileEx function is used to map the view at a specified address. Although sharable, the pages of physical storage used for a mapped file view are not global; they are not accessible to processes that have not mapped a view of the file.

A file-mapping object is associated with a disk file that the system uses when the mapped view is swapped out of physical memory and onto the disk. This disk swap file can be the system's paging file, or it can be some other file that was specified when the file-mapping object was created. In that case, the memory is initialized along with the contents of the file. Mapping a specified file in the file system is useful for processes that need to share the data in an existing file or that want to use the file to save data generated by the sharing processes. If you map a specified file, you should open it for exclusive access and keep the handle open until you are finished with the shared memory. Keeping it open will prevent other processes from opening another handle on the file to use ReadFile or WriteFile or from creating additional mapping objects for the same file, any of which actions can lead to unpredictable results.

Any pages committed by mapping a view of a file are released when the last process with a view of the mapping object either terminates or unmaps its view by calling the UnmapViewOfFile function. At this time, the specified file (if any) associated with the mapping object is updated. A specified file can also be forced to update by calling the FlushViewOfFile function.
For more information about file mapping, see File Mapping. For an example of shared memory in a DLL, see Dynamic-Link Libraries.

If multiple processes have write access to shared memory, access to the memory should be synchronized. For more information about interprocess synchronization, see Synchronization.


Пригласи друзей и счет твоего мобильника всегда будет положительным!
Предыдущая статья
 
Сайт Народ.Ру Интернет
Следующая статья
Пригласи друзей и счет твоего мобильника всегда будет положительным!

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



В Win32 API, распространившее память осуществлен файловым распределением. Вся память распределенная другими методами распределения ( GlobalAlloc, LocalAlloc, HeapAlloc, или функция VirtualAlloc), доступна только на вызове процесса. Память распределенная DLL, тем не менее, - в пространстве адреса процесса, которое было названо DLL и не доступно в других процессах, использовавших тот же DLL.

Поименованное файловое распределение обеспечивает легкий путь создавать блока коллективной памяти. Процесс может определить имя когда он использует функцию CreateFileMapping, чтобы создавать файловое распределение объекта. Другие процессы могут определить то же имя на или CreateFileMapping или функция OpenFileMapping, чтобы получать ручку распределения объекта. Имена объектов случая, объектов семафора, mutex объектов, и акция файлового распределения объектов то же пространство имени. Если определенное имя соответствует имени существующего объекта другого типа, ошибка происходит. При создании поименованных объектов, попытки, чтобы использовать уникальные имена и проверять функциональные обратные величины на наличие двойных ошибок имени.

Каждый процесс определяет свою ручку файлового распределения объекта в функции MapViewOfFile, чтобы отображать вид файла в свое собственное пространство адреса. Виды всех процессов для файлового распределения единственного объекта отображены на те же общие страницы физической памяти. Тем не менее, виртуальные адресы отображенных видов могут измениться от одного процесса до другого, если функция MapViewOfFileEx не использована, чтобы отображать вид по определенному адресу. Хотя общий, страницы физической памяти использованной для отображенного файлового вида не глобальные; они не доступны в процессах, что не отобразил вид файла.

Файловое распределение объекта связано дисковым файлом, что система использует когда отображенный вид откачан физической памяти и на диск. Этот дисковый файл подкачки (свопинг) может быть системным файлом подкачки, или это может быть некоторым другим файлом, который был определен когда файловое распределение объекта было создано. В этом случае, память инициализирована вместе с содержанием файла. Распределение определенного файла в файловой системе полезное для процессов, что нужно распространять данные в существующий файл или, что хотеться использовать файл, чтобы сохранять данные сгенерированные разделением процессов. Если Вы отображаете определенный файл, Вы должны открывать это для исключительного доступа и держит ручку открытую пока Вы не будете завершены коллективной памятью. Хранение этого открывает, помешает процессам чтобы открывать другую ручку в файле, чтобы использовать ReadFile или WriteFile или с создания дополнительного распределения объектов для того же файла, любое из которого действия могут провести к непредсказуемым результатам.

Любые страницы совершенные распределением вида файла выпущены когда последний процесс с видом распределения объекта или завершает или unmaps вид вызывая функцию UnmapViewOfFile. В на этот раз, определенный файл (если имеется) связанное отображающим объектом скорректирован. Определенный файл может также вынужден корректировать вызывая функцию FlushViewOfFile.
Более подробно о файле, отображающем, смотри Файловое Распределение. Для примера коллективной памяти в DLL, смотри Библиотеки Dynamic-Link.

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


Вверх Version 1.3, Oct 26 2010 © 2007, 2010, mrhx Вверх
 mrhx software  Русский перевод OpenGL  Русский перевод Win32 API
 
Используются технологии uCoz