Komunikacja miedzy procesami w OS 9

Podobne dokumenty
4.2 Sposób korzystania z l acza

1. Timery i zdarzenia

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

Pobieranie argumentów wiersza polecenia

J adro systemu OS 9 moduł kernel

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

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

PROGRAMOWANIE SYSTEMÓW CZASU RZECZYWISTEGO

Działanie systemu operacyjnego

Działanie systemu operacyjnego

Programowanie Proceduralne

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

Sygnały. 7. Sygnały (2005/2006)

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

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

Pliki w C/C++ Przykłady na podstawie materiałów dr T. Jeleniewskiego

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

Wykład 15. Literatura. Kompilatory. Elementarne różnice. Preprocesor. Słowa kluczowe

Działanie systemu operacyjnego

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

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

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

Sieciowa komunikacja procesów - XDR i RPC

4. Procesy pojęcia podstawowe

1. Ustanawianie ograniczeń na użycie zasobów

Działanie systemu operacyjnego

Systemy Operacyjne Ćwiczenia

Systemy operacyjne. Systemy operacyjne. Systemy operacyjne. Program wykładów. Strona WWW przedmiotu: Program ćwiczeń projektowych

1 Timery i zdarzenia

Łącza nienazwane(potoki)

Instrukcja do laboratorium Systemów Operacyjnych (semestr drugi)

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

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

1. Kolejki komunikatów POSIX

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

Programowanie Współbieżne. W Linuxie/Unixie

1. Wartość, jaką odczytuje się z obszaru przydzielonego obiektowi to: a) I - wartość b) definicja obiektu c) typ oboektu d) p - wartość

Kolejki FIFO (łącza nazwane)

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

1. Timery i zdarzenia

Budowa linii asemblera

SYSTEMY OPERACYJNE WYKLAD 6 - procesy

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

Obsługa plików Procesy

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

eć dzielona standardu POSIX

ĆWICZENIE 5. TEMAT: OBSŁUGA PORTU SZEREGOWEGO W PAKIECIE KEILuVISON WYSYŁANIE PORTEM SZEREGOWYM

13. Kolejki komunikatów POSIX

Wykład 1

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

Operacje wejścia/wyjścia odsłona pierwsza

Kolejki komunikatów POSIX

Rodzina protokołów TCP/IP. Aplikacja: ipconfig.

Wywoływanie procedur zdalnych

4. Procesy pojęcia podstawowe

PRZERWANIA. P1 - Procedura obslugi przerwania. Obsługa zdarzenia Z1 poprzez procedurę obsługi przerwania P1

SUMA KONTROLNA (icmp_cksum) NUMER KOLEJNY (icmp_seq)

Wywoływanie procedur zdalnych

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

MAGISTRALA MODBUS W SIŁOWNIKU XSM Opis sterowania

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

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

Metody obsługi zdarzeń

Systemy operacyjne III

PRZERWANIA. 1. Obsługa zdarzeń, odpytywanie i przerwania Obsługa zdarzeń jest jedną z kluczowych funkcji w prawie każdym systemie czasu rzeczywistego.

Procesy. S. Samolej: Procesy

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

Materiał uzupełniający do ćwiczen z przedmiotu: Programowanie w C ++ - ćwiczenia na wskaźnikach

Przerwania, polling, timery - wykład 9

Wielozadaniowość w systemie Microsoft Windows

Wykład II. Programowanie II - semestr II Kierunek Informatyka. dr inż. Janusz Słupik. Wydział Matematyki Stosowanej Politechniki Śląskiej

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

WYKŁAD 10. Zmienne o złożonej budowie Statyczne i dynamiczne struktury danych: lista, kolejka, stos, drzewo. Programy: c5_1.c, c5_2, c5_3, c5_4, c5_5

Struktura QSM (Queued Serial Module)

Zadanie 04 Ktory z ponizszych typow danych w jezyku ANSI C jest typem zmiennoprzecinkowym pojedynczej precyzji?

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

Język C zajęcia nr 5

Zdalne wywoływanie procedur RPC. Dariusz Wawrzyniak 1

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

4. Procesy pojęcia podstawowe

Podstawy programowania w języku C i C++

Funkcje zawarte w bibliotece < io.h >

Zdalne wywoływanie procedur RPC

Zdalne wywoływanie procedur RPC

Wyświetlacz alfanumeryczny LCD zbudowany na sterowniku HD44780

Programowanie i struktury danych 1 / 44

Linux: Procesy. Systemy Operacyjne. Mateusz Hołenko. 26 marca 2013

Instrukcja do ćwiczeń

Wykład 3: Implementacja programów wbudowanych

Politechnika Gdańska Wydział Elektrotechniki i Automatyki Katedra Inżynierii Systemów Sterowania

Wątki w Android OS. Matt Rutkowski. GynSoft sp. z o.o. matt@gynsoft.net

Systemy Operacyjne 1 Laboratorium 3 Potoki i łącza nazwane w Linuksie (jeden tydzień) dr inż. Arkadiusz Chrobot

1.1 Przykład znajdowanie liczb pierwszych leżących w zadanym zakresie, tryb bezpołączeniowy

Programowanie I C / C++ laboratorium 03 arytmetyka, operatory

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

Gniazda BSD. komunikacja bezpołączeniowa

Procesy, wątki i zasoby

Sun RPC/XDR. Dariusz Wawrzyniak 1

1. Wprowadzenie do C/C++

Transkrypt:

Komunikacja miedzy procesami w OS 9 mechanizm przekazywanie dost ep dost ep w komunikacji danych publiczny przerwaniu Czekanie na potomka Status wyjścia Wait for child Exit status Sygnał Numer sygnału Signal Signal code + Zdarzenie Wartość Event Event value + + Moduł danych Data module + + + Wspólna pami eć Shared memory + + + Ł acze bez nazwy Unnamed pipe + Ł acze z nazw a Named pipe + + Plik dyskowy Disk file + + MW-ZPCiR-ICT-PWr 1

Kody sygnałów w OS 9 0 - S$Kill - bezwzgl edne zakończenie procesu; 1 - S$Wake - wznowienie procesu bed acego w stanie sleep; 2 - S$Abort - przerwanie procesu ostatnio korzystaj acego z we/wy na terminal (Ctrl-E) - najcz esciej exit(2); 3 - S$Intrpt - (Ctrl-C) - najcz eściej exit(3); 4 - S$HangUp - wysyłany przez SCF przy utracie ł aczności modemowej (brak DCD); 5-255 - zarezerwowane dla dalszych zastosowań systemowych; 256-65535 - dla użytkowników. MW-ZPCiR-ICT-PWr 2

w deskryptorze procesu adr. C asm znaczenie 26 signal P$Signal Kod ostatniego sygnału czekaj acego 28 sigvec P$SigVec Adres procedury obsługi sygnałów (signal handler) 2C sigdat P$SigDat Adres obszaru danych dla handlera... 370 siglvl P$SigLvl maska zagł ebienia obsługi sygnałów 371 sigflg P$SigFlg bit 7 - flaga otrzymania sygnału w trakcie pracy 372 sigxs P$Sigxs ilość wolnych miejsc w kolejce sygnałów 374 sigmask P$SigMask maska bitowa sygnałów 2 32 378 sigcnt P$SigCnt ilość sygnałów czekaj acych 37C sigque P$SigQue Adres najstarszego sygnału czekaj acego 380 defsig P$DefSig Pocz atkowa struktura kolejki sygnałów MW-ZPCiR-ICT-PWr 3

Funkcje systemowe OS 9 zwi azane z obsług a sygnałów Nazwa funkcja w C Opis F$Send kill (int id, short code) wysłanie sygnału code do procesu id F$Icpt intercept (int (*shand)()) zainstalowanie procedury obsługi sygnałów shand F$SigMask sigmask (int level) ustawianie maski sygnałów dla procesu: 0, ++, F$Sleep sleep (unsigned time) zawieszenie procesu na time sekund lub do otrzymania sygnału pause() zawieszenie procesu do otrzymania sygnału MW-ZPCiR-ICT-PWr 4

OS-9 Skutki wysłania sygnału do procesu uaktywnienie procesu adresata (o ile nie jest bież acy lub aktywny - F$AProc) - maskowanie sygnałów nie ma wpływu na t e czynność; przy przejściu procesu adresata do trybu USER uruchomienie procedury obsługi sygnałów (P$SigVec) jako podprogramu: utworzenie ramki powrotu na stosie (R$pc, R$sr) zmiana R$pc na P$SigVec, ustawienie kodu sygnału z P$SigQue w R$d1; UWAGI: 1. W przypadku braku handlera (P$SigVec 0) proces adresat jest kończony przy probie przejścia do trybu USER, a status wyjścia jest ustawiany na numer sygnału. 2. zamaskowane indywidualnie przez P$SigMask nie uruchamiaj a handlera i nie s a kolejkowane. 3. Ustawiona maska (P$SigLvl 0) powoduje kolejkowanie sygnału bez uruchamiania handlera. MW-ZPCiR-ICT-PWr 5

OS-9 specjalne: S$Kill i S$Wake S$Kill (kod = 0): nie jest kolejkowany, ustawia E$PrcAbt (228) w P$Signal, ustawia flag e Condemn w P$State (przy próbie uruchomienia w trybie USER proces jest kończony). S$Wake (kod = 1): nie jest kolejkowany, nie zmienia P$Signal, służy wył acznie do aktywizacji procesów. MW-ZPCiR-ICT-PWr 6

Przykład wysyłania sygnałów w C #include <stdio.h> main(argc, argv) int argc; char *argv[]; { int pid, code; switch(argc){ default: fprintf(stderr,"usage: sendsig pid code\n"); exit(0); case 3: pid = atoi(argv[1]); code = atoi(argv[2]); break; } } kill(pid, code); exit(0); MW-ZPCiR-ICT-PWr 7

Przykład obsługi sygnałów w C (1/2) #include <stdio.h> FILE *log; /* sighand - procedura obslugi sygnalow */ sighand (signal) register int signal; { switch (signal){ case 2: _errmsg(0," terminated by signal # 2\n"); exit(0); case 3: _errmsg(0," terminated by signal # 3\n"); exit(0); default: fprintf(log," Signal # %d\n",signal); return(0); } } MW-ZPCiR-ICT-PWr 8

Przykład obsługi sygnałów w C (2/2) /* program glowny " showsig " */ main(argc, argv) int argc; char *argv[]; { if(argc!=2){ fprintf(stderr," Usage: showsig [logfile]\n"); exit(0); } if(!(log=fopen(argv[1]," a+ "))){ fprintf (stderr," Can t open: %s \n",argv[1]); exit(0); } intercept(sighand); } while(1) sleep(0); MW-ZPCiR-ICT-PWr 9

OS-9 Zdarzenia Zdarzenia (events): liczniki obsługiwane przez j adro systemu, publicznie dost epne przez nazw e, pozwalaj ace synchronizować procesy. Tworzenie zdarzenia wymaga podania nazwy i pocz atkowych parametrów dla funkcji F$Event(Ev$Creat) (wartość, przyrost automatyczny i przyrost przy budzeniu). Wykorzystanie zdarzenia wymaga doł aczenia si e funkcj a F$Event(Ev$Link), która na podstawie podanej nazwy zwraca numer zdarzenia (ID). Proces znaja cy ID zdarzenia może: odczytać jego wartość zmienić tȩ wartość czekać na wpadni ecie wartości do zadanego przedziału Wartość zdarzenia może zostać zmieniona przez: ustawienie bezwzgl ednej wartości (set absolute) dodanie (ze znakiem) wartości (set relative) dodanie przyrostu automatycznego (signal increment) chwilowe ustawienie bezwzgl ednej wartości (pulse event) MW-ZPCiR-ICT-PWr 10

Zdarzenia Element tablicy zdarzeń: adr. nazwa znaczenie 00 ev eid numer zdarzenia w systemie 02 ev name nazwa zdarzenia (max. 11-znaków) 0e ev value 4-bajtowa wartość zdarzenia 12 ev winc automatyczny przyrost wartości przy budzeniu 14 ev sinc sygnałowy przyrost wartości 16 ev link ilość użytkowników zdarzenia 18 ev quen wskaźnik do nast epnego zdarzenia 1C ev quep wskaźnik do poprzedniego zdarzenia typedef struct _evstr { unsigned short _ev_eid; /* event id number */ char _ev_name[12]; /* event name */ int _ev_value; /* current event value */ short _ev_winc; /* wait increment value */ short _ev_sinc; /* signal increment value */ unsigned short _ev_link; /* event use count */ struct _evstr *quen; /* next event in queue */ struct _evstr *quep; /* previous event in queue */ } event; MW-ZPCiR-ICT-PWr 11

Zdarzenia Funkcje obsługi zdarzeń w OS 9 Nazwa funkcja w C Opis Ev$Link ev link() użycie zdarzenia (w/g nazwy) Ev$UnLnk ev unlink() zwolnienie zdarzenia Ev$Creat ev create() utworzenie zdarzenia Ev$Delet ev delete() usuni ecie zdarzenia Ev$Wait ev wait() oczekiwanie na zdarzenie Ev$WaitR ev waitr() oczekiwanie na wzgl edn a wartość zdarzenia Ev$Read ev read() odczytanie wartości licznika bez oczekiwania Ev$Info ev info() odczytanie parametrów zdarzenia Ev$Pulse ev pulse() chwilowa symulacja wyst apienia zdarzenia Ev$Signl ev signal() sygnalizacja wyst apienia zdarzenia Ev$Set ev set() ustawienie licznika i sygnalizacja zdarzenia Ev$SetR ev setr() wzgl edne ustawienie licznika i sygnalizacja zdarzenia MW-ZPCiR-ICT-PWr 12

Zdarzenia Opis podstawowych funkcji ev creat( ev value, wait inc, signal inc, ev name ) tworzy zdarzenie o nazwie ev name, pocz atkowej wartości ev value, przyroście automatycznym wait inc i przyroście sygnałowym signal inc ; zwraca ev id. ev link( ev name ) zwraca ev id dla zdarzenia o nazwie ev name. ev set( ev id, ev value, allflag ) ustawia zdarzenie ev id na wartość ev value i budzi pierwszy (allflag == 0x0000) lub wszystkie (allflag == 0x8000) procesy oczekuj ace na nie. ev setr( ev id, ev value, allflag ) zmienia wartość zdarzenia ev id o ev value i budzi pierwszy lub wszystkie procesy oczekuj ace na to zdarzenie. ev wait(ev id, ev min, ev max ) czeka na pojawienie si e wartości zdarzenia ev id w przedziale ( ev min, ev max ), modyfikuje j a o przyrost automatyczny i zwraca jako wynik. ev signal( ev id, allflag ) modyfikuje wartość zdarzenia ev id o przyrost sygnałowy i budzi pierwszy lub wszystkie procesy oczekuj ace na to zdarzenie. MW-ZPCiR-ICT-PWr 13

Zdarzenia Przykład przydziału zasobów (N drukarek) Tworzymy zdarzenie o pocz atkowej wartości N (wszystkie drukarki dost epne). Wait inc ustalamy na -1 (zaj ecie drukarki), a signal inc na 1 (zwolnienie drukarki). event_id =_ev_creat(n,-1,1,"dr"); /* utworzenie zdarzenia */ Proces chc acy korzystać z drukarki musi czekać (Ev$Wait) na wartość zdarzenia w przedziale [1,N]. Dzi eki temu, póki s a jakieś wolne drukarki, procesy s a kontynuowane, a wartość zdarzenia odzwierciedla ilość wolnych drukarek. event_id = _ev_link("dr"); /* przylaczenie do zdarzenia */ _ev_wait(event_id,1,n); /* czekanie na wolna drukarke */ drukuj(); /* drukowanie */ Po zakończeniu drukowania proces zwalnia drukark e i sygnalizuje to (Ev$Signal). _ev_signal(event_id,0); /* zwolnienie drukarki */ Ilość wolnych drukarek (wartość zdarzenia) jest zwi ekszana. Jeśli jakiś proces był zatrzymany na Ev$Wait z powodu braku drukarek (wartość zdarzenia poza [1,N]), to po zwróceniu drukarki przez inny proces zostanie uaktywniony (zbudzony) i on z kolei b edzie mógł zaj ać drukark e. MW-ZPCiR-ICT-PWr 14

Zdarzenia Przykład synchronizacji: jeden pisze, wielu czyta Proces pisz acy: /***************************************************************/ event_id =_ev_creat(0,1,-1,"mw"); /* utworzenie zdarzenia: value = 0 wait_inc = 1 signal_inc = -1 name = "mw" */ new_data(); /* wpis danych */ _ev_set(event_id,m,ev_allprocs); /* budzenie proc. czytaj. */ _ev_setr(event_id,-1*m,0); _ev_wait(event_id,0,0); /* czekanie na zero */ /***************************************************************/ Procesy czytajace: /***************************************************************/ event_id = _ev_link("mw"); /* przylaczenie do zdarzenia */ _ev_wait(event_id,m,m+2000); /* czekanie na wartosc >=M */ takedata(); /* czytanie danych */ _ev_signal(event_id,0); /* zmniejszenie zdarzenia o 1 */ /***************************************************************/ MW-ZPCiR-ICT-PWr 15