Pobierz prezentację
Pobieranie prezentacji. Proszę czekać
OpublikowałJerzy Bieliński Został zmieniony 11 lat temu
1
Pamięć wspólna Przegląd stosowanych rozwiązań Marcin Kamiński, Michał Kotra Wydział EAIiE Katedra Automatyki Kraków, 2008
2
Pamięć wspólna - wstęp Zastosowanie pamięci wspólnej to metoda wewnętrznej komunikacji pomiędzy procesami (IPC – inner-process communication) Przykładowo jeden proces tworzy obszar w pamięci (segment), do którego posiada dostęp inny proces, lub kilka procesów. Jest to najszybsza forma IPC, ponieważ nie istnieje żaden pośrednik typu potok czy kolejka wiadomości. Zamiast tego informacja jest bezpośrednio umieszczana w segmencie pamięci, w obszarze adresowym procesu wywołującego. Segment może zostać utworzony przez jeden proces, a wykorzystywać go może dowolna liczba procesów.
3
Pamięć wspólna - Unix int shmget(key_t key, int size, int shmflg); key - klucz size - rozmiar segmentu pamięci shmflg – flagi Funkcja zwraca identyfikator segmentu pamięci związanego z podaną wartością klucza key.
4
Pamięć wspólna - Unix void *shmat(int shmid, const void *shmaddr, int shmflg); shmid – identyfikator segmentu pamięci dzielonej size - adres w przestrzeni adresowej procesu, od którego ma być dołączony segment shmflg – flagi Funkcja zwraca identyfikator segmentu pamięci związanego z podaną wartością klucza key.
5
Pamięć wspólna - Unix int shmdt(const void *shmaddr); shmaddr – adres początkowy segmentu w przestrzeni adresowej procesu Odłączenie segmentu nie oznacza automatycznie usunięcia z jądra systemu. Segment pozostaje w pamięci i może być ponownie dołączany przez procesy.
6
Pamięć wspólna - Unix int shmctl(int shmid, int cmd, struct shmid_ds *buf); shmid – identyfikator segmentu cmd - operacja sterująca buf – wskaźnik do bufora przeznaczonego na strukturę shmid_ds segmentu. W celu usunięcia segment trzeba posłużyć się funkcją systemową shmctl().
7
Pamięć wspólna - Windows Jeden z procesów odwzorowuje plik w pamięci przy użyciu funkcji CreateFileMapping(): HANDLE WINAPI CreateFileMapping( __in HANDLE hFile, __in_opt LPSECURITY_ATTRIBUTES lpAttributes, __in DWORD flProtect, __in DWORD dwMaximumSizeHigh, __in DWORD dwMaximumSizeLow, __in_opt LPCTSTR lpName );
8
Pamięć wspólna - Windows Bezpośrednio po utworzeniu pliku wyjściowego wywołujemy MapViewOfFile(), aby odwzorować pożądaną część pliku w pamięci: LPVOID WINAPI MapViewOfFile( __in HANDLE hFileMappingObject, __in DWORD dwDesiredAccess, __in DWORD dwFileOffsetHigh, __in DWORD dwFileOffsetLow, __in SIZE_T dwNumberOfBytesToMap );
9
Pamięć wspólna - Windows Po wywołaniu MapViewOfFile żądana część pliku zostaje załadowana do pamięci. Następnie proces ma możliwość zapisania danych w tak zarezerwowanej pamięci, a inny proces uzyskuje możliwość dostępu do tych danych. W tym celu korzysta się z funkcji void CopyMemory( __in PVOID Destination, __in const VOID* Source, __in SIZE_T Length );
10
Pamięć wspólna - Windows Kiedy dostęp do pliku staje się zbędyny proces powinien wyowłać funkcję CloseHandle(), aby system mógł zwolnić miejsce w pamięci BOOL WINAPI CloseHandle( __in HANDLE hObject );
11
Pamięć wspólna OS-9 Zgodnie z ogólną strategią systemu, dane wykorzystywane przez różne zadania są traktowane, jako segmenty informacji nie związane trwale z żadnymi konkretnymi obszarami pamięci. Segment danych jest obiektem statycznym, który można wielokrotnie zapisywać, odczytywać, składować na dysku i ładować do pamięci w sposób określony przez atrybuty praw dostępu. Z segmentami danych nie są jednak związane żadne operacje gwarantujące poprawność współbieżnego przetwarzania danych. Synchronizacja dostępu należy do obowiązku zadań
12
Pamięć wspólna - VxWorks
13
Pamięć wspólna i semafory W systemie VxWorks występują trzy typy semaforów zorientowane na różne klasy problemów: binarne (binary) – najszybsze uniwersalne semafory zoptymalizowane do synchronizacjo i wzajemnego wykluczania, wzajemnego wykluczania (mutual exclusion) – specjalne semafory binarne zoptymalizowaen ze względu na problemy specyficzne dla wzajemnego wykluczania: dziedziczenie priorytetów, ochrona przed usunięciem i rekursją, całkowite (counting) – podobne do binarnych semaforów, ale pamiętające ilość pobrań semafora, są optymalne ze względu na obsługę urzadzeń występujacych w wielu egzemplarzach w systemie.
Podobne prezentacje
© 2024 SlidePlayer.pl Inc.
All rights reserved.