2 Implementacja w systemie Linux 2.4

Podobne dokumenty
IPC: Kolejki komunikatów

Systemy operacyjne III

Prezentacja systemu RTLinux

Pamięć współdzielona

Mechanizmy z grupy IPC

Wykład 4. Synchronizacja procesów (i wątków) cześć I. Wojciech Kwedlo, Wykład z Systemów Operacyjnych -1- Wydział Informatyki PB

Programowanie współbieżne Wykład 10 Synchronizacja dostępu do współdzielonych zasobów. Iwona Kochańska

Przetwarzanie wielowątkowe przetwarzanie współbieżne. Krzysztof Banaś Obliczenia równoległe 1

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

SYSTEMY OPERACYJNE WYKLAD 6 - procesy

Realizacja rozproszonej komunikacji międzyprocesowej (IPC) w środowisku OpenSSI

Księgarnia PWN: Włodzimierz Stanisławski, Damian Raczyński - Programowanie systemowe mikroprocesorów rodziny x86

synchronizacji procesów

SYSTEMY CZASU RZECZYWISTEGO - VxWorks

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

synchronizacji procesów

Mikrokontroler ATmega32. Język symboliczny

5. Model komunikujących się procesów, komunikaty

Mechanizmy pracy równoległej. Jarosław Kuchta

Współbieżność i równoległość w środowiskach obiektowych. Krzysztof Banaś Obliczenia równoległe 1

Kolejki FIFO (łącza nazwane)

Ingerencja w kod systemu operacyjnego (przerwania) Programowanie na niskim poziomie (instrukcje specjalne) Trudności implementacyjne (alg.

Wprowadzenie do programowania współbieżnego

Synchronizacja procesów i wątków

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

Przeplot. Synchronizacja procesów. Cel i metody synchronizacji procesów. Wątki współbieżne

Klient-Serwer Komunikacja przy pomocy gniazd

Mechanizmy z grupy IPC

Procesy, wątki i zasoby

4. Procesy pojęcia podstawowe

Procesy, zasoby i wątki

Procesy, zasoby i wątki

Procesy, zasoby i wątki

Proces z sekcją krytyczną. Synchronizacja procesów. Synchronizacja procesów, cd. Synchronizacja procesów, cd. Synchronizacja procesów, cd

Szeregowanie zadań w Linux Kernel 2.6. Daniel Górski Przemysław Jakubowski

Proces z sekcją krytyczną. Synchronizacja procesów. Synchronizacja procesów, cd. Synchronizacja procesów, cd. Synchronizacja procesów, cd

Instytut Teleinformatyki

Wykład 4. Synchronizacja procesów (i wątków) cześć I. Wojciech Kwedlo, Wykład z Systemów Operacyjnych -1- Wydział Informatyki PB

Wątek - definicja. Wykorzystanie kilku rdzeni procesora jednocześnie Zrównoleglenie obliczeń Jednoczesna obsługa ekranu i procesu obliczeniowego

ADVANCE ELECTRONIC. Instrukcja obsługi aplikacji. Modbus konfigurator. Modbus konfigurator. wersja 1.1

Organizacja typowego mikroprocesora

Materiały pomocnicze 1

Paweł Skrobanek. C-3, pok

Podstawy Programowania C++

Podstawy programowania w języku C i C++

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

1. Liczby i w zapisie zmiennoprzecinkowym przedstawia się następująco

Projektowanie oprogramowania systemów PROCESY I ZARZĄDZANIE PROCESAMI

Programowanie Niskopoziomowe

Stworzenie klasy nie jest równoznaczne z wykorzystaniem wielowątkowości. Uzyskuje się ją dopiero poprzez inicjalizację wątku.

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

Systemy operacyjne III

Mikroinformatyka. Wielozadaniowość

Obliczenia równoległe i rozproszone w JAVIE. Michał Kozłowski 30 listopada 2003

Systemy Operacyjne - Operacje na plikach

Struktura i funkcjonowanie komputera pamięć komputerowa, hierarchia pamięci pamięć podręczna. System operacyjny. Zarządzanie procesami

Programowanie współbieżne Wykład 2. Iwona Kochańska

Rysunek 1: Okno z lista

SYSTEMY OPERACYJNE I SIECI KOMPUTEROWE

Architektura komputerów. Asembler procesorów rodziny x86

1 Moduł Modbus ASCII/RTU 3

Klasyczne problemy współbieżności. Problem producenta i konsumenta Problem czytelników i pisarzy Problem pięciu filozofów

Instrukcja obsługi aplikacji MobileRaks 1.0

Wstęp do programowania 2

3 Literatura. c Dr inż. Ignacy Pardyka (Inf.UJK) ASK SP.06 Rok akad. 2011/ / 22

Wielozadaniowość w systemie Microsoft Windows

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

System operacyjny MACH

Działanie systemu operacyjnego

Wielowątkowość mgr Tomasz Xięski, Instytut Informatyki, Uniwersytet Śląski Katowice, 2011

Semafory. // G - globalna dla wszystkich. // Wada - aktywne oczekiwanie Test_and_Set(Li); exit when Li = 0; end loop sekcja_krytyczna(i); G := 0;

projekt akademicki w Institute for Mining and Technology of New Mexico. Autor Victor Yodaiken FSMLabs komercyjna odmiana RTLinuxPro

/* dołączenie pliku nagłówkowego zawierającego deklaracje symboli dla wykorzystywanego mikrokontrolera */ #include <aduc834.h>

Strojenie systemu Linux pod k¹tem serwera bazy danych Oracle 9i

ZASOBY ZMIENNYCH W STEROWNIKACH SAIA-BURGESS

Programowanie na poziomie sprzętu. Tryb chroniony cz. 1

Architektura komputerów

Budowa komputera Komputer computer computare

PROCESORY SYGNAŁOWE - LABORATORIUM. Ćwiczenie nr 03

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

SYLABUS DOTYCZY CYKLU KSZTAŁCENIA realizacja w roku akademickim 2016/2017

dr inż. Jarosław Forenc

Języki formalne i techniki translacji

Dodatek B. Zasady komunikacji z otoczeniem w typowych systemach komputerowych

Budowa Mikrokomputera

Instrukcja do laboratorium Systemów Operacyjnych (semestr drugi)

Przykładowe sprawozdanie. Jan Pustelnik

ROZPROSZONE SYSTEMY OPERACYJNE. Niezawodne usługi w rozwiązaniach SSI dokumentacja projektu. Karol Ostrowski 16 czerwca 2005

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

9. Problem wzajemnego wykluczania i sekcji krytycznej

1. Aplikacja LOGO! App do LOGO! 8 i LOGO! 7

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

4. Procesy pojęcia podstawowe

Programowanie obiektowe

WYKŁAD 4 SEMAPHORES (CIĄG DALSZY) Przykład 6 Problem czytelników i pisarzy. Wykład 4 strona 1/24

Programowanie współbieżne Wykład 7. Iwona Kochaoska

dr inż. Jarosław Forenc

Instrukcja ewidencji i sprawozdawania informacji o pierwszym wolnym terminie.

Instrukcja do ćwiczenia P4 Analiza semantyczna i generowanie kodu Język: Ada

INTERNETOWE BAZY DANYCH materiały pomocnicze - wykład VII

Transkrypt:

1 IPC IPC (InterProcess Communication) to udostępniane przez jądro systemu operacyjnego mechanizmy służące komunikacji oraz współdzieleniu zasobów i informacji pomiędzy procesami. IPC Systemu V udostępnia następujące mechanizmy: 1. semafory, 2. kolejki komunikatów, 3. pamięć dzieloną. 2 Implementacja w systemie Linux 2.4 2.1 Synchronizacja poziomu jadra 2.1.1 Operacje atomowe Operacje atomowe (niepodzielne) to udostępniane przez jądro proste, niepodzielne funkcje arytmetyczne i arymetyczno-logiczne, takie jak dodawanie, odejmowanie, ustawianie i testowanie wartości zmiennych i bitów. Funkcje te realizowane są za pomocą niepodzielnych instrukcji asemblera (instrukcje pobierające dane z pamięci, instrukcje modyfikujące dane w pamięci inc oraz dec, instrukcje poprzedzone bajtem blokady lock (0xf0)). Operacje te zdefiniowane są w pliku include/asm/atomic.h. 2.1.2 Wyłaczanie przerwań Wyłączanie przerwań jest kluczowym mechanizmem gwarantującym wykonanie sekwencji instrukcji jądra jako sekcji krytycznej. Mechanizm ten pozwala na nieprzerwane działanie ścierzek wykonania nawet wtedy, gdy urządzenia zewnętrzne zgłąszają sygnały IRQ. Pozwala to na efektywną ochronę struktur danych wykorzystywanych przez jądro oraz procedury obsługi przerwań. Wyłączanie przerwań odbywa sie za pomocą makrodefinicji cli() a ich włączanie za pomocą makrodefinicji sti(), dodatkowo udostępniane są makrodefinicje save_flags i restore_flags które służą do zapisywania i przywracania stanu rejestru eflags. Wyczyszczenie flagi IF rejestru eflags powoduje wyłączenie przerwań a jej ustawienie - ponowne ich włączenie. Makra te są użyteczne w przypadku gdy dana sekcja krytyczna może być wywołana z innego przerwania (przypadek przerwań zagnieżdżonych). 1

2.1.3 Semafory jadra Semafory to obiekty przyjmujące wartości całkowite, na których można wywoływać dwie niepodzielne operacje P()(up) i V() (down) Operacja P() zmniejsza o 1 wartość semafora i powoduje wstrzymanie procesu, jeżeli wartość jest mniejsza od 0. Operacja V() zwiększa wartość o 1; jeżeli wartość jest większa-równa od zera budzony jest proces oczekujący na danym semaforze. Semafory jądra to stuktury (struct semaphore) posiadające następujące pola: count licznik semafora (wartość całkowita) - wartość mniejsza lub równa zero oznacza,ze zasób jest zajęty. Operacje na tym polu wykonywane są za pomocą instrukcji atomowych, wait wskaźnik do kolejki przechowującej uśpione procesy oczekujące na zasób, waking pole pomocnicze służące wybudzaniu procesów. Wybudzanie procesów oczekujących (w funkcji down()) polega na ustawieniu pola waking na 1 i wykonaniu przez każdy z oczekujących procesów testu waking > 0. Jeżeli wartośc testu jest prawdą pole waking jest zmniejszane o 1. Powoduje to wybudzenie tylko 1 procesu z kolejki procesów oczekujących. Regiony krytyczne funkcji down i up chronione są za pomocą globanej blokady pętlowej semaphore_wake_lock. 2.2 Semafory IPC Semafory (poziomu użytkownika) implementowane są przy pomocy semaforów prostych (jądra). Każdy semafor IPC (a właściwie jego adres) przechowywany jest w tablicy (semary). Tablica ta może posiadać także wartości IP_UNUSED / IPC_NOID oznaczającej fakt nieużywania danego pola tablicy. Semafor IPC składa sie z deskryptora semafora (semid_ds - zawiera listę operacji oczekujących FIFO, operacji do cofnięcia i liczbę semaforów (sem) w tablicy) oraz struktur sem opisujących semafory proste (licznik sem. prostego oraz PID ostatnigo procesu korzystającego z semafora). 2.3 Kolejki komunikatów IPC Kolejka komunikatów jest mechanizmem pozwalającym na przekazywnie niewielkich porcji komunikatów pomiędzy procesami. Każdy komunikat posiada, poza danymi, także typ oraz priorytet. W systemie Linux 2.4 kolejka komunikatów jest synchronizowana za pomocą globalnego semafora kolejki komunikatów 2

(funkcje: sys_msgget, sys_smgctl IPC_SET, IPC_RMID), oraz globalnej blokady wirującej kolejki (funkcje: sys_msgget,sys_smgctl PC_STAT, IPC_SET, IPC_RMID, sys_msgsnd, sys_msgrcv, newque, freeque). 2.4 Pamięć dzielona IPC Pamięć dzielona jest najszybszym sposobem komunikacji pomiędzy procesami. Jest to fragment pamięci fizycznej współdzielony przez wiele procesów. Jego obsługa po przyłączeniu do mapy pamięci procesu jest analogiczna do obsługi dowolnej innej pozycji w pamięci. Tak jak semafory IPC segmenty pamięci przechowywane są w globalnej tablicy shm_segs. Tablica ta zawiera adresy deskryptorów współdzielonych segmentów pamięci IPC. Każdy z deskryptorów (struktura shmid_kernel) zawiera między innymi: wskaźnik do tablicy zawierającej pozycje tablicy stron bloków stronnicowanych (adresy stron tworzących dany segment pamięci IPC). czasy ostatniej operacji dołączenia i odłączenia rozmiar pamięci współdzielonej Dostęp do powyższych struktur chroniony jest poprzez globalny semafor jądra shm_ids.sem(pobranie segmentu pamięci dzielonej), oraz blokadę wirującą shm_ids.ary. 3 Konfiguracja testowa 3.1 klaster OpenSSI Trzy maszyny każda z nich w następującej konfiguracji: Procesor 2 x Intel(R) Pentium(R) 4 CPU 2.80GHz (HT) Kompilator gcc version 3.3.5 (Debian 1:3.3.5-12) System operacyjny Linux lab4-cs1 2.4.22-1.2199.nptl-ssi-686-smp 3.2 komputer porównawczy Procesor AMD Athlon(tm) 64 Processor 3200+ Kompilator gcc version 3.4.3 20041125 (Gentoo Linux 3.4.3-r1, ssp-3.4.3-0, pie-8.7.7) System operacyjny Linux wieszak 2.6.10-gentoo-r5 3

4 Propozycje testów 4.1 Semafory Badanie wydajności synchronizacji procesów na wielu semaforach problem "Problem jedzących filozofów". Sczegóły testu N filozofów, każdy z 1 widelcem,umieszczonych w kolejce obsługiwanych jest przez 33 procesy. Stany każdego filozofa to: 1. poczatek cyklu (pobranie zadania z kolejki) 2. myślenie (zaśnięcie na losowy okres czasu) 3. kompletowanie dwóch widelców (synchronizacja na dwóch semaforach) 4. jedzenie (zaśnięcie na losowy okres czasu) 5. odłożenie widelców (zwolnienie semaforów) Dodatkowo, w celu zwiększenia ilości operacji na semaforach każdy filozof podczas jednej iteracji zmienia kolumnę wartości w pomocniczej macierzy semaforów, która jest współdzielona pomiędzy wszystkie procesy. Konfiguracje testów 1. 3 wezly; procesy porozmieszczane równomiernie na wszystkich trzech węzłach, 2. 2 wezly; zasoby IPC stworzone jednym węźle, procesy uruchomione na drugim, 3. komputer testowy; 1 procesor. Tablica 1: Wyniki testów Konfiguracja min [s] max [s] 1 3243 4307 2 4755 5095 3 128 130 4

4.2 Pamięć dzielona 2 grupy procesów: 1 grupa (1 proces) odczytuje dane z pliku (/dev/urandom) i zapisuje je do segmentu pamięci. Druga grupa (pozostałe 32) odczytuje dane z pamięci. Druga grupa poza odczytywaniem danych modyfikuje także licznik kolejki umieszczony w tym samym segmencie pamięci współdzielonej. Konfiguracja programu: rozmiar kolejki umieszczonej w segm. pamięci dzielonej: 4096 Bajty, 1000 iteracji zapisu. Konfiguracje testów 1. 3 wezly; czytelnicy rozmieszczeni rownomiernie na 3 węzłach, pisarz i zasoby IPC umieszczone na 1 nym samym węźle, 2. 3 wezly; czytelnicy umieszczeni na 1 węźle, zasoby IPC na 2 węźle, pisarz na 3 węźle, 3. 1 węzeł; wszystkie procesy na tym samym węźle, 4. 2 węzły czytelnicy rozmieszczeni rownomiernie 5. 2 węzły czytelnicy rozmieszczeni rownomiernie, brak modyfikacji segmentu pamięci (w tym przypadku zmniejszenia indeksu kolejki), 6. komputer testowy; 1 procesor. Tablica 2: Wyniki testów Konfiguracja czas avg [s] 1 600 2 257 3 250 4 372 5 319 6 40 5

5 Implementacja IPC w systemie OpenSSI wnioski i obserwacje Operacje na obiektach IPC implementowane są przy pomocy wywołań odpowiednich metod RPC. Serwer obsługujący wywołania RPC znajduje się na komputerze który utworzył dany zasób IPC. W przypadku pamięci dzielonej, w celu zwiększenia szybkości działania, następuje migracja segmentów pamięci na węzeł aktualnie użytkujący dany zasób. powoduje to znaczne opóżnienia w przypadku gdy procesy najczęściej używające współdzielonego segmentu pamięci znajdują sie na różnych węzłach. W przypadku, gdy procesy najczęściej używające segmentu dokonują TYLKO odczytów wzrost wydajności wynosi w granicach 15% w stosunku do użycia typu odczyt-zapis. 6