eć dzielona standardu POSIX

Podobne dokumenty
aodczytywać zniegoza pomoc afunkcjiread, (niebuforowane funkcje wejścia/wyjścia). e sukcesem, to zwróci liczb, erzeczywiściezapisanychbajtów.

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

Systemy Operacyjne Ćwiczenia

przerwany proces móg l zareagować na określone zdarzenie. Można je traktować jako software owe wersje przerwań sprz etowych.

przypadków wywo lanie systemowe (funkcja systemowa) lub funkcja biblioteczna zwraca wartość 1(czasamiNULL) iprzypisujezmiennej zewn etrznej,

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

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

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

Paradygmaty programowania. Paradygmaty programowania

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

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

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

Równoleg le sortowanie przez scalanie

4.2 Sposób korzystania z l acza

Instrukcja do laboratorium Systemów Operacyjnych (semestr drugi)

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

Ghost in the machine

Rozdzia l 3. Laboratorium 3. danych zawierajac

Warstwy oprogramowania wejścia/wyjścia

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

Systemy Operacyjne - Operacje na plikach

Functionalization. Funkcje w C. Marcin Makowski. 30 listopada Zak lad Chemii Teoretycznej UJ

Kolejki FIFO (łącza nazwane)

Temat zajęć: Obsługa systemu plików.

Uruchamianie SNNS. Po uruchomieniu. xgui & lub snns & pojawia si e okno. programu. Symulator sztucznych sieci neuronowych SNNS 1

Functionalization. Jeszcze o funkcjach i strukturze projektu. Marcin Makowski. 3 grudnia Zak lad Chemii Teoretycznej UJ

z powielaniem wielu struktur danych oraz komunikacja

Obliczenia rozproszone z wykorzystaniem MPI

Paradygmaty programowania. Paradygmaty programowania

Organizacja systemu plików

Komunikacja za pomocą potoków. Tomasz Borzyszkowski

Programowanie wspóªbie»ne

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

Paradygmaty programowania

Futex (Fast Userspace Mutex) Łukasz Białek

Obsługa plików Procesy

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

PROE wykład 7 kontenery tablicowe, listy. dr inż. Jacek Naruniec

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

Programowanie i struktury danych

Język C++ wykład VIII

Paradygmaty programowania

3. Identyfikacja. SKŁADNIA #include <sys/socket.h> int getpeername(int socket, struct sockaddr *addr, int *addrlen);

Pomoc dla użytkowników systemu asix 6 i 7. Drajwer Bufor. Dok. Nr PLP6021 Wersja:

SYSTEMY OPERACYJNE WYKLAD 6 - procesy

Metody zawarte w klasie File: boolean createnewfile() tworzy nowy, pusty plik, ale tylko jeśli on wcześniej nie istniał. boolean delete() usuwa dany

Semafor ustaw_semafor(key_t nazwa, int start); Semafor usun_semafor(semafor sem); void signal(semafor sem); void wait(semafor sem);

System plików warstwa logiczna

Organizacja systemu plików

SYSTEMY CZASU RZECZYWISTEGO - VxWorks

Szablony klas, zastosowanie szablonów w programach

Iteracyjny serwer TCP i aplikacja UDP

sposób wykonywania operacji zapisu i odczytu dane odczytywane z l acza usuwane (nie można ich odczytać ponownie),

Jak wiemy, wszystkich danych nie zmieścimy w pamięci. A nawet jeśli zmieścimy, to pozostaną tam tylko do najbliższego wyłączenia zasilania.

Struktury. Przykład W8_1

pozycja klucza - offset klucza w rekordzie flaga pliku tymczasowego czas utworzenia bież acy rozmiar - liczba bajtów w pliku

Systemy Operacyjne 2: Wątki pthreads. dr inż. Arkadiusz Chrobot

Pamięć współdzielona

Programowanie w językach

us lugi katalogowe? Czym różni si e serwer katalogowy od serwera bazy danych:

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

Lekcja 10. Uprawnienia. Dołączanie plików przy pomocy funkcji include() Sprawdzanie, czy plik istnieje przy pmocy funkcji file_exists()

PHP może zostać rozszerzony o mechanizmy dostępu do różnych baz danych:

Statystyka w analizie i planowaniu eksperymentu

Powyższe wyrażenie alokuje 200 lub 400 w zależności od rozmiaru int w danym systemie. Wskaźnik wskazuje na adres pierwszego bajtu pamięci.

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

Organizacja systemu plików

Suma i przeciȩcie podprzestrzeń, suma prosta, przestrzeń ilorazowa Javier de Lucas

Pochodne cz ¾astkowe i ich zastosowanie.

Statystyka w analizie i planowaniu eksperymentu

Plik jest poj eciem, z którym spotyka si e niemal każdy użytkownik systemu komputerowego, nawet

Linux Kernel III. Character devices

Statystyka w analizie i planowaniu eksperymentu

Klasyczne problemy synchronizacji

systemu operacyjnego UNIX Funkcje jadra Spis treści Dariusz Wawrzyniak 20 października Wst ep 5

Instytut Teleinformatyki

ang. file) Pojęcie pliku (ang( Typy plików Atrybuty pliku Fragmentacja wewnętrzna w systemie plików Struktura pliku

Typy wyliczeniowe Konwersje napis <-> liczba Struktury, unie Scanf / printf Wskaźniki

Ćwiczenie nr 520: Metody interpolacyjne planowania ruchu manipulatorów

INFORMATOR TECHNICZNY WONDERWARE

Programowanie równoległe i rozproszone. Monitory i zmienne warunku. Krzysztof Banaś Programowanie równoległe i rozproszone 1

Sieci Komputerowe 2 / Ćwiczenia 2

PROE wykład 2 operacje na wskaźnikach. dr inż. Jacek Naruniec

Część 4 życie programu

Tablice i funkcje. Marcin Makowski. 26 listopada Zak lad Chemii Teoretycznej UJ

Funkcje. Piotr Zierhoffer. 7 października Institute of Computer Science Poznań University of Technology

Instytut Teleinformatyki

Podstawy informatyki. Elektrotechnika I rok. Język C++ Operacje na danych - wskaźniki Instrukcja do ćwiczenia

SYSTEM DIAGNOSTYCZNY OPARTY NA LOGICE DOMNIEMAŃ. Ewa Madalińska. na podstawie prac:

Zajęcia nr 5 Algorytmy i wskaźniki. dr inż. Łukasz Graczykowski mgr inż. Leszek Kosarzewski Wydział Fizyki Politechniki Warszawskiej

Operatory zmiany sposobu przypisania standardowych strumieni >,<,>> Jeżeli pierwsze polecenie powiodło się to wykona drugie

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

Operacje wejścia/wyjścia (odsłona druga) - pliki

pami eć operacyjna przechowuje dane do przetworzenia, tymczasowe dane pomocnicze,

Algorytmy i złożoności. Wykład 3. Listy jednokierunkowe

Model pamięci w systemie Linux

ANALIZA II 15 marca 2014 Semestr letni. Ćwiczenie 1. Czy dan a funkcjȩ da siȩ dookreślić w punkcie (0, 0) tak, żeby otrzymana funkcja by la ci ag la?

Komunikacja mi edzyprocesowa (IPC)

Działanie systemu operacyjnego

Podstawy programowania, Poniedziałek , 8-10 Projekt, część 1

Transkrypt:

c Wies law P laczek 25 6 Pami eć dzielona standardu POSIX 6.1 Wprowadzenie Pami eć dzielona inaczej wspólna (ang. shared memory) jestzasobemumożliwiaj acym najszybszy sposób komunikacji mi edzy procesami z regu ly wymagaj acy jednak dodatkowego mechanizmu synchronizacji. Podobnie jak w przypadku semaforów w nowszych wersjach systemów uniksowych (np. w Linuksie od wersji j adra 2.4 z bibliotek a glibc od wersji 2.2) dost epna jest pami eć dzielona standardu POSIX. Ma ona prostszy i wygodniejszy interfejs niż pami eć dzielona standardu UNIX System V opisana w dodatku B. Schemat korzystania z pami eci dzielonej standardu POSIX jest nast epuj acy. Najpierw jeden z procesów tworzy obiekt pami eci dzielonej ustawiaj ac do niego prawa dost epu a nast epnie ustawia jego rozmiar. Kolejny proces może uzyskać dost ep do tego obiektu poprzez jego otwarcie o ile ma do tego odpowiednie uprawnienia. Aby procesy mog ly odczytywać/zapisywać coś w pami eci dzielonej musz aodwzorowaćjejobszarwswoje przestrzenie adresowe. Dost ep do pami eci dzielonej najcz eściej kontroluje si eprzypomocy semaforów. Kiedy proces przestaje korzystać z obiektu pami eci dzielonej to powinien usun ać do niego odwzorowanie ze swojej przestrzeni adresowej a nast epnie go zamkn ać. Po zakończeniu używania obiektu przez wszystkie korzystaj ace z niego procesy powinien on zostać usuni ety (zwykle za to odpowiedzialny jest proces który dany obiekt utworzy l). WsystemieLinuxobiektypami eci dzielonej tworzone s awwirtualnymsystemieplikówi zwykle montowane pod /dev/shm.! Uwaga: Aby można by lo używać pami eci dzielonej w programach w j ezyku C należy je linkować z opcj a: -lrt (w celu do l aczenia biblioteki librt). 6.2 Tworzenie/otwieranie i usuwanie obiektu pami eci dzielonej Do tworzenia i otwierania nowego lub otwierania istniej acego obiektu pami eci dzielonej standardu POSIX s luży funkcja shm open przedstawiona w poniższej tabeli. Operacja Pliki w l aczane <sys/mman.h> <sys/stat.h> <fcntl.h> Prototyp int shm open(const char *name int flags mode t mode); wartość Deskryptor obiektu 1 Tak funkcji shm open jest analogiczna do operacji funkcji open dla plików tzn. pomyślnie wykonana tworzy/otwiera obiekt pami eci dzielonej i zwraca jego deskryptor przyużyciu którego można wykonywać dalsze operacje na tym obiekcie. Parametry: name nazwa obiektu pami eci dzielonej zaczynaj aca sie od znaku ukośnika! podobnie jak dla semaforów nazwanych flags opcje mode prawa dost epu do obiektu (podobie jak dla pliku)

c Wies law P laczek 26 Opcje flags: O RDONLY otwórz obiekt do czytania O RDWR otwórz obiekt do czytania i pisania O CREAT jeśli obiekt nie istnieje to stwórz go O EXCL przy równocześnie ustawionej fladze O CREAT przekaż b l ad jeśli obiekt już istnieje O TRUNC jeśli obiekt istnieje zmniejsz jego d lugość do zera bajtów (obetnij go). Jedn azpierwszychdwóchpowyższychopcjimożna l aczyć z dowoln aztrzechpozosta lych przy pomocy sumy bitowej np. O RDWR O CREAT O EXCL. Nowo utworzony obiekt pami eci dzielonej ma d lugość zero. Aby ustawić niezerowy rozmiar należy dla obiektu otwartego do czytania i pisania użyć funkcji ftruncate przedstawionej w poniższej tabeli. Funkcja ta ustawia d lugość obiektu pami eci dzielonej o Pliki w l aczane <unistd.h> <sys/types.h> Prototyp int ftruncate(int fd off t length); deskryptorze fd na wartość przekazan a przez parametr length. Kiedy obiekt pami eci dzielonej otwarty funkcj a shm open nie jest już potrzebny w procesie to można go zamkn ać przy pomocy funkcji close przedstawionejwponiższej tabeli. Dzia la ona analogicznie jak dla plików. Pliki w l aczane <unistd.h> Prototyp int close(int fd); Obiekt pami eci dzielonej można usun ać przy użyciu funkcji shm unlink przekazuj ac jego nazw eprzezparametrname. Obiektypami eci dzielonej standardu POSIX s aobiektami trwa lymi j adra (ang. kernel persistence) wi ec jeśli taki obiekt nie zostanie usuni ety funkcj a shm unlink tob edzie istnia l aż do ponownego uruchomienia systemu. Pliki w l aczane <sys/mman.h> Prototyp int shm unlink(const char *name);

c Wies law P laczek 27 6.3 Odwzorowywanie pami eci dzielonej w przestrzeń adresow a procesu Aby proces móg l używać obiektu pami eci dzielonej który otworzy l funkcj a shm open musi odwzorować (ang. map) gowswoj awirtualn aprzestrzeńadresow a. Do tego s luży funkcja mmap przestawionawponiższejtabeli. Funkcjatatworzyodwzorowanie(ang. Pliki w l aczane Prototyp <sys/mman.h> void *mmap(void *addr size t length int prot int flags int fd off t offset); wartość adres odwzoro- MAP FAILED Tak wanego obszaru (tzn. (void *) -1) mapping) obiektupami eci dzielonej (lub pliku) o deskryptorze fd wwirtualn aprzestrzeń adresow awywo luj acego procesu. Jeżeli addr ma wartość NULL toj adro systemu wybiera adres pocz atkowy takiego odwzorowania (wyrównany do granicy strony) w przeciwnym wypadku przekazywany adres stanowi sugesti edlaj adra gdzie wykonać odwzorowanie np. Linux wybiera najbliższ agranic estrony. Parametrlength oznacza d lugość odwzorowanego obszaru w bajtach (> 0) liczon aodmiejsca(marginesu)obiektupami eci dzielonej (lub pliku) przekazywanego przez parametr o set (zwykle 0) prot opisuje ż adan aochron e pami eci a flags określa opcje odwzorowania. Możliwe wartości parametru ochrony prot: PROT EXEC prawo wykonywania PROT READ prawo czytania PROT WRITE prawo pisania PROT NONE brak dost epu. Trzy pierwsze z powyższych praw można l aczyć sum abitow a np. dla prawa czytania i pisania: PROT READ PROT WRITE. Możliwych opcji odwzorowania przekazywanych przez parametr flags jest wiele jednak z punktu widzenia pami eci dzielonej najważniejsz a(iwystarczaj ac adlanaszychcelów) jest MAP SHARED którasprawiażeuaktualnieniaobszarutakiejpami eci s awidocznedla wszystkich procesów które odwzorowa ly go w swoje przestrzenie adresowe. Zakończone sukcesem wywo lanie funkcji mmap zwraca adres pocz atku odwzorowanego obszaru pami eci dzielonej. Ponieważ zwracany adres jest postaci uniwersalnego wskaźnika (void *) wi ec przypisuj ac go do wskaźnika określonego typu zawsze należy wykonać odpowiednie rzutowanie typu np. int *p = (int *) mmap(...);. Wtakodwzorowanym obszarze pami eci dzielonej można wykonywać operacje w taki sam sposób jak w zwyk lej pami eci procesu tzn. pobierać z niego dane za pomoc azmiennychodwo luj acych si edo tego obszaru i wstawiać do niego dane przy użyciu zwyk lego operatora przypisania (=). Proces może usun ać odwzorowanie obszaru pami eci dzielonej ze swojej wirtualnej przestrzeni adresowej przez wywo lanie funkcji munmap przedstawionejwponiższejtabeli. Kasuje ona odwzorowanie obszaru o adresie addr id lugościlength którewcześniejzosta lo

c Wies law P laczek 28 Pliki w l aczane <sys/mman.h> Prototyp int munmap(void *addr size t length); utworzone odpowiednim wywo laniem funkcji mmap. Odwzorowanie takie jest usuwane automatycznie kiedy proces kończy swoje dzia lanie natomiast zamkni ecie deskryptora obiektu pami eci dzielonej nie powoduje usuni ecia odwzorowania jego obszaru. Generalnie kiedy proces kończy używać jakiegoś obszaru pami eci dzielonej to najpierw powinien usun ać jego odwzorowanie przy pomocy funkcji munmap anast epnie zamkn ać deskryptor obiektu funkcj a close. Oprócz opisanych powyżej podstawowych funkcji dotycz acych pami eci dzielonej standardu POSIX istniej atrzypomocniczefunkcje:fstat zwracaj aca struktur ezinformacj a na temat obiektu pami eci dzielonej fchown dozmianyw laścicielatakiegoobiektui fchmod dozmianyprawdost epu do niego. Wi ecej szczegó low na temat tych oraz pozosta lych funkcji można znaleźć w podr eczniku systemowym man shm overview.

c Wies law P laczek 29 ĆWICZENIE 7: Producent Konsument: Pami ećdzielonaisemafory Przy pomocy pami eci dzielonej oraz semaforów standardu POSIX zaimplementować problem producenta konsumenta z ćwiczenia 4 przedstawiony poniższym pseudokodem. Zamiast potoku użyć N-elementowego bufora cyklicznego (tzn. po dojściu do końca bufora wracamy na jego pocz atek) umieszczonego w pami eci dzielonej gdzie elementem bufora jest pewna ustalona porcja bajtów. Dost ep do wspólnego bufora synchronizować przy pomocy semaforów nazwanych standardu POSIX. Bufor jednostek towaru można zdefiniować jako tablic edwuwymiarow aiumieścićgo wewn atrz struktury wraz z iteratorami dla producenta i konsumenta np. #define NELE 20 // Rozmiar elementu bufora (jednostki towaru) w bajtach #define NBUF 5 // Liczba elementow bufora // Segment pamieci dzielonej typedef struct { char bufor[nbuf][nele]; // Wspolny bufor danych int wstaw wyjmij; // Pozycje wstawiania i wyjmowania z bufora } SegmentPD; Odwzorowuj ac obszar pami eci dzielonej w wirtualn aprzestrzeńadresow aprocesunależy wykonać odpowiednie rzutowanie typu np. SegmentPD *wpd = (SegmentPD *) mmap(nullsizeof(segmentpd) PROT READMAP SHAREDdes0); Nast epnie przy użyciu tak zdefiniowanego wskaźnika można wykonywać operacje na tym segmencie np. wpd->wyjmij = (wpd->wyjmij + 1) % NBUF; Podobnie jak dla semaforów stworzyć w lasn abibliotek efunkcjidoobs lugipami eci dzielonej.! Z w lasnych bibliotek funkcji do obs lugi semaforów i pami eci dzielonej stworzyć bibliotek e statyczn a oraz bibliotek e dzielon a (ang. shared library); umieścić je w podkatalogu./lib (patrz przyk lad w StartSO).! Podać w pseudokodzie uogólnienie rozwi azania tego problemu na przypadek wielu producentów i wielu konsumentów.

c Wies law P laczek 30! Przyk lad pseudokodu dla ćwiczenia 7: // Pseudokod dla problemu Producenta i Konsumenta z buforem cyklicznym. // Wspolny bufor do przesylania danych znajduje sie w pamieci dzielonej. // Dostep do bufora jest synchronizowany semaforami. #define N? // Rozmiar bufora typdef struct {... } Towar; // Definicja typu dla jednostek towaru Towar bufor[n]; // Bufor mogacy pomiescic N jednostek towaru int wstaw = 0 wyjmij = 0; // Pozycje wstawiania oraz wyjmowania towaru // z bufora (mozna umiescic w pamieci dzielonej) semaphore PROD = N; semaphore KONS = 0; // Semafor do wstrzymywania Producenta // Semafor do wstrzymywania Konsumenta // Proces Producent // ---------------- Towar towarprod; while (1) { // Produkcja towaru P(PROD); bufor[wstaw] = towarprod; wstaw = (wstaw + 1) % N; V(KONS); } // Opusc semafor Producenta // Umiesc towar w buforze // Przesun pozycje wstawiania o 1 dalej // Podniesc semafor Konsumenta // Proces Konsument // ---------------- Towar towarkons; while (1) { P(KONS); towarkons = bufor[wyjmij]; wyjmij = (wyjmij + 1) % N; V(PROD); // Konsumpcja towaru } // Opusc semafor Konsumenta // Umiesc towar w buforze // Przesun pozycje wstawiania o 1 dalej // Podniesc semafor Producenta