Pamięć współdzielona

Podobne dokumenty
IPC: Kolejki komunikatów

Mechanizmy z grupy IPC

Mechanizmy z grupy IPC

Instytut Teleinformatyki

Shared memory and messages. Functions. process 0. process 1. program 0. program 0. data 0. data 1. program 1. data 0. data 1.

Temat zajęć: Mechanizmy IPC: kolejki komunikatów.

problemu producenta i konsumenta z ograniczonym buforem cyklicznym. Wszystkie funkcje dotyczace

J. Ułasiewicz Programowanie aplikacji współbieżnych 1

Programowanie Współbieżne. Komunikacja między procesowa IPC

1. Utwórz blok pamięci współdzielonej korzystając z poniższego kodu:

Krótki kurs programowania współbieżnego (2)

Semafory w systemie Unix

KOLEJKI KOMUNIKATÓW IPC

Semafory, pamięć dzielona i kolejki komunikatów

Funkcje jadra systemu operacyjnego UNIX

Temat zajęć: Mechanizmy IPC: semafory

Funkcje jadra systemu operacyjnego UNIX

Co to jest sterta? Sterta (ang. heap) to obszar pamięci udostępniany przez system operacyjny wszystkim działającym programom (procesom).

Futex (Fast Userspace Mutex) Łukasz Białek

Laboratorium Systemów Operacyjnych. Ćwiczenie 4. Operacje na plikach

Procesy. Systemy Operacyjne 2 laboratorium. Mateusz Hołenko. 9 października 2011

2 Implementacja w systemie Linux 2.4

Obsługa plików. Systemy Operacyjne 2 laboratorium. Mateusz Hołenko. 25 września 2011

Programowanie równoległe w POSIX API. PRiR, wykład 3

Pliki. Funkcje tworzące pliki i operujące na nich opisane są w części 2 pomocy systemowej. Tworzenie i otwieranie plików:

Instrukcja do laboratorium Systemów Operacyjnych. (semestr drugi)

Laboratorium z systemów operacyjnych. System plików - funkcje systemowe. Anna Wojak

Struktury. Przykład W8_1

Programowanie w ANSI C z wykorzystaniem funkcji jądra systemu UNIX/Linux

Temat: Dynamiczne przydzielanie i zwalnianie pamięci. Struktura listy operacje wstawiania, wyszukiwania oraz usuwania danych.

Wykład VI. Programowanie. dr inż. Janusz Słupik. Gliwice, Wydział Matematyki Stosowanej Politechniki Śląskiej. c Copyright 2014 Janusz Słupik

Poniższe funkcje opisane są w 2 i 3 części pomocy systemowej.

Pamięć dzielona i kolejki komunikatów

Obsługa plików Procesy

Wykład 3. Procesy i wątki. Wojciech Kwedlo, Wykład z Systemów Operacyjnych -1- Wydział Informatyki PB

SYSTEMY OPERACYJNE WYKLAD 6 - procesy

Paweł Skrobanek. C-3, pok

Języki i metodyka programowania. Wskaźniki i tablice.

System plików warstwa logiczna

Wstęp do programowania

Temat zajęć: Tworzenie i obsługa wątków.

Projektowanie oprogramowania systemów PROCESY I ZARZĄDZANIE PROCESAMI

Programowanie w języku C++

Opis protokołu RPC. Grzegorz Maj nr indeksu:

Instrukcja do laboratorium Systemów Operacyjnych. (semestr drugi)

Język ANSI C. część 11. Jarosław Gramacki Instytut Informatyki i Elektroniki

Lista, Stos, Kolejka, Tablica Asocjacyjna

Komputery przemysłowe i systemy wbudowane

dynamiczny przydział pamięci calloc() memset() memcpy( ) (wskaźniki!! )

KURS C/C++ WYKŁAD 6. Wskaźniki

Organizacja typowego mikroprocesora

w odróżnieniu od procesów współdzielą przestrzeń adresową mogą komunikować się za pomocą zmiennych globalnych

Od uczestników szkolenia wymagana jest umiejętność programowania w języku C oraz podstawowa znajomość obsługi systemu Windows.

Podstawy programowania. Wykład 6 Wskaźniki. Krzysztof Banaś Podstawy programowania 1

Wskaźniki. Przemysław Gawroński D-10, p marca Wykład 2. (Wykład 2) Wskaźniki 8 marca / 17

Podstawy programowania w języku C++

część 8 wskaźniki - podstawy Jarosław Gramacki Instytut Informatyki i Elektroniki Podstawowe pojęcia

Podstawy programowania. Wykład 6 Złożone typy danych: struktury, unie. Krzysztof Banaś Podstawy programowania 1

Wskaźniki w C. Anna Gogolińska

System plików. Warstwowy model systemu plików

Tablice i struktury. czyli złożone typy danych. Programowanie Proceduralne 1

Programowanie i struktury danych

Tablice, funkcje - wprowadzenie

Biblioteka standardowa - operacje wejścia/wyjścia

Ćwiczenie 4. Obsługa plików. Laboratorium Podstaw Informatyki. Kierunek Elektrotechnika. Laboratorium Podstaw Informatyki Strona 1.

SYSTEMY OPERACYJNE I laboratorium 3 (Informatyka stacjonarne 2 rok, semestr zimowy)

Dynamiczne struktury danych

Rys. 9-1 Procesy P1 i P2 komunikuję się poprzez wspólny obszar. pamięci.

Łącza nienazwane(potoki) Łącza nienazwane mogą być używane tylko pomiędzy procesami ze sobą powiązanymi.

Wykład 7 Abstrakcyjne typy danych słownik (lista symboli)

procesy odrębne dzielone

DYNAMICZNE PRZYDZIELANIE PAMIECI

Obsługa plików. Laboratorium Podstaw Informatyki. Kierunek Elektrotechnika. Laboratorium Podstaw Informatyki Strona 1. Kraków 2013

SYSTEMY CZASU RZECZYWISTEGO - VxWorks

Systemy operacyjne III

METODY I JĘZYKI PROGRAMOWANIA PROGRAMOWANIE STRUKTURALNE. Wykład 02

Wykład 12. Zarządzanie pamięcią (część III) oraz urządzenia sieciowe. Wojciech Kwedlo, Systemy Operacyjne II -1- Wydział Informatyki PB

Od uczestników szkolenia wymagana jest umiejętność programowania w języku C oraz podstawowa znajomość obsługi systemu Linux.

Laboratorium 6: Dynamiczny przydział pamięci. dr inż. Arkadiusz Chrobot dr inż. Grzegorz Łukawski

Struktury czyli rekordy w C/C++

Pliki. Informacje ogólne. Obsługa plików w języku C

Schematy zarzadzania pamięcia

Wykład 7 Podręczna pamięć buforowa (ang. buffer cache) w systemie Linuks. Wojciech Kwedlo, Systemy Operacyjne II -1- Wydział Informatyki PB

Podstawy programowania. Wykład: 12. Struktury, unie, pola bitowe. dr Artur Bartoszewski -Podstawy programowania, sem 1 - WYKŁAD

Pliki. Informacje ogólne. Obsługa plików w języku C

Programowanie proceduralne INP001210WL rok akademicki 2015/16 semestr letni. Wykład 6. Karol Tarnowski A-1 p.

2x test: 25% projekt: 40% inne (zadania domowe, aktywno± ): 10% 51-60% dst 61-70% dst % db 81-90% db % bdb. 1 Zasady zaliczenia:

Przedmowa Wstęp Wprowadzenie podstawowe pojęcia... 15

Podstawy programowania w języku C++

PC0060. ADAPTER Kabel Easy Copy PC-Link USB 2.0 Proste kopiowanie, bez instalacji. Instrukcja obsługi

SUMA KONTROLNA (icmp_cksum) NUMER KOLEJNY (icmp_seq)

Kolejki FIFO (łącza nazwane)

1 Moduł Modbus ASCII/RTU 3

Funkcja, argumenty funkcji

ezykach wysokiego poziomu (Dijkstra, 1965). semaphore semaphore S; Operacje na semaforze:

Kompilator języka C na procesor 8051 RC51 implementacja

1. Procesy i współbieżność

Systemy operacyjne III

Klasa jest nowym typem danych zdefiniowanym przez użytkownika. Najprostsza klasa jest po prostu strukturą, np

Transkrypt:

Pamięć współdzielona Systemy Operacyjne 2 Piotr Zierhoffer 17 listopada 2011

Mechanizmy IPC IPC Inter Process Communication kolejki komunikatów, pamięć współdzielona semafory polecenia bash: ipcs, ipcrm Pamięć współdzielona segment wirtualnej przestrzeni adresowej identyfikowany kluczem o określonej długości i prawach dostępu współdzielony przez wiele procesów zawartość usuwana przy usunięciu segmentu często wymaga synchronizacji semaforami Piotr Zierhoffer Pamięć współdzielona [1/10]

Stworzenie segmentu Funkcja: int shmget(key_t key, size_t size, int shmflg) Parametry: key klucz identyfikujący segment ( nazwa ) size rozmiar segmentu w bajtach shmflg flagi Wartość zwracana: -1 w wypadku błędu identyfikator segmentu powiązanego z kluczem key Piotr Zierhoffer Pamięć współdzielona [2/10]

Stworzenie segmentu, cd. Opis parametrów: key klucz identyfikujący segment ( nazwa ) IPC_PRIVATE stwórz nowy segment o dowolnym identyfikatorze, ignoruj shmflg oprócz praw dostępu zwyczajowo wartość heksadecymalna size rozmiar segmentu pamięci, zaokrąglany w górę do wielokrotności rozmiaru strony (getconf PAGE_SIZE) shmflg flagi, sumowane bitowo prawa dostępu nieużywane IPC_CREAT tworzenie kolejki IPC_EXCL jeżeli kolejka istnieje i użyto IPC_CREAT, zwróć błąd Piotr Zierhoffer Pamięć współdzielona [3/10]

Stworzenie segmentu, cd. Następujące ograniczenia odnoszące się do zasobów pamięci wspólnej dotyczą funkcji shmget: SHMALL Maksymalna liczba stron pamięci użytych do stworzenia segmentów pamięci wspólnej: zależna od systemu. SHMMAX Maksymalny rozmiar pojedynczego segmentu pamięci wspólnej: zależny od implementacji (aktualnie 4MB). SHMMIN Minimalny rozmiar pojedynczego segmentu pamięci wspólnej: zależny od implementacji (aktualnie 1 bajt, ale efektywny minimalny rozmiar wynosi PAGE_SIZE). SHMMNI Maksymalna liczba segmentów pamięci wspólnej w systemie: zależna od implementacji (aktualnie 4096, ale w wersjach Linuksa wcześniejszych niż 2.3.99 wynosiła 128) Aktualne wartości: tail /proc/sys/kernel/shm* Piotr Zierhoffer Pamięć współdzielona [4/10]

Przyłączenie segmentu Funkcja: void* shmat(int shmid, char *shmaddr, int shmflg) Parametry: shmid identyfikator segmentu zwrócony przez shmget shmaddr adres, pod którym segment ma być widoczny w procesie shmflg flagi Wartość zwracana: -1 w wypadku błędu adres, pod którym widoczny jest przyłączony segment pamięci Piotr Zierhoffer Pamięć współdzielona [5/10]

Przyłączenie segmentu, cd. shmflg flagi specyfikujące zachowanie funkcji SHM_RDONLY przyłącz pamięć tylko do odczytu SHM_REMAP podmień dowiązany pod danym adresem segment nowym segmentem SHM_RND dokonaj zaokrąglenia shmaddr w dół do wielokrotności SHMLBA (równe PAGE_SIZE) shmaddr adres, pod którym segment ma być widoczny NULL zalecana wartość, system sam określa adres (różne adresy w różnych procesach!) dowolny adres wyrównany do granicy strony pamięci (chyba, że podano SHM_RND) Piotr Zierhoffer Pamięć współdzielona [6/10]

Odłączenie segmentu Funkcja: int shmdt(const void* shmaddr) Parametry: Uwagi: shmaddr adres początku segmentu pamięci, zwrócony przez shmat odłączenie segmentu we wszystkich procesach nie powoduje jego usunięcia segment nie zostanie usunięty aż wszystkie procesy go odłączą oraz zostanie oznaczony do usunięcia Wartość zwracana: 0 lub -1 w wypadku błędu Piotr Zierhoffer Pamięć współdzielona [7/10]

Zarządzanie segmentami Funkcja: int shmctl(int shmid, int cmd, struct shmid_ds *buf) Parametry: msqid identyfikator segmentu pamięci zwrócony przez shmget cmd operacja do wykonania IPC_RMID zaznaczenie segmentu do usunięcia usunięcie po odłączeniu wszystkich procesów IPC_SET zmiana parametrów segmentu: właściciela, grupy i praw na podstawie buf IPC_STAT pobranie parametrów segmentu do buf buf struktura na parametry operacji Wartość zwracana: 0 lub -1 w wypadku błędu Piotr Zierhoffer Pamięć współdzielona [8/10]

Wywołania systemowe Wpływ wywołań systemowych na segmenty pamięci współdzielonej: fork() w wyniku wywołania fork() proces potomny dziedziczy dołączone segmenty pamięci wspólnej. exec() po wykonaniu exec() wszystkie odwzorowane segmenty są odłączane (nie są usuwane). exit() po wykonaniu exit() wszystkie dołączone segmenty pamięci wspólnej są odłączane (nie są usuwane). Uwaga! Jeden segment może być podłączony wiele razy w ramach jednego procesu! Piotr Zierhoffer Pamięć współdzielona [9/10]

Wykorzystanie pamięci współdzielonej Do pamięci współdzielonej odwołujemy się przez wskaźniki. Zapisać można dowolne dane z wyjątkiem wskaźników są one zazwyczaj sensowne tylko w obrębie jednego procesu! Pamięci współdzielonej nie trzeba dodatkowo alokować. int *base_addr; int shmid = shmget(0xabc, MAX_SIZE * sizeof(int), IPC_CREAT); if (shmid == -1) return -1; addr = (int *) shmat(shmid, NULL, 0); for(i = 0; i < MAX_SIZE, ++i) base_addr[i] = (int)i*i; shmdt(addr); Piotr Zierhoffer Pamięć współdzielona [10/10]