Procesy odrębne –Unikatowy PID (2-32000) –Zmienne –Zbiory deskryptorów plików –Przestrzeń stosu (lokalne zmienne, wywołania funkcji) –Środowisko –Licznik.

Slides:



Advertisements
Podobne prezentacje
Ćwiczenie (1) Dostosuj poniższy program do potrzeb zdefiniowanych w treści programu zaliczeniowego: #include void dodaj(){}; void edytuj(){}; void usun(){};
Advertisements

Mechanizmy pracy równoległej
Jarosław Kuchta Monitory.
Język ANSI C Funkcje Wykład: Programowanie komputerów
Prowadzący: mgr inż. Elżbieta Majka
Algorytmy – zapis struktur programowania
Systemy rozproszone W. Bartkiewicz
Języki programowania C++
PROGRAMOWANIE STRUKTURALNE
argumenty wiersza poleceń: getopt
używanie komend UNIXa z wnętrza programu napisanego w C
formatowanie kodu źródłowego
Semafory Semafor w programowaniu jest abstrakcją o zastosowaniu zaczerpniętym z działalności kolei. Gdy zasobów jest na tyle mało, że trzeba ich użyciem.
Zaawansowana obsługa sygnałów
Instrukcje Instrukcja : definicja obliczenia i określenie sposobu wykonania tego obliczenia. Program : ciąg instrukcji wykonywanych kolejno od pierwszej.
Wprowadzenie do SystemC
Systemy operacyjne Wykład nr 5: Wątki Piotr Bilski.
Systemy operacyjne Wykład nr 4: Procesy Piotr Bilski.
Wykład nr 2: Struktura systemu komputerowego a system operacyjny
1 Dygresja: cztery płyty główne…. 2 Dygresja: osobliwości C /* cos o nieistniejacym typie Boolean */ /* oraz o operatorze przecinkowym */ #include int.
Ćwiczenie (1) Dostosuj poniższy program do wymogów programu zaliczeniowego #include typedef struct{ char imie[30]; char nazwisko[50]; int rokUrodzenia;
Programowanie w C Wykład 3
Wykład 1: Wskaźniki Podstawy programowania Programowanie w C
PRZEPEŁNIENIE BUFORA B u f f e r O v e r f l o w
Instytut Fizyki Teoretycznej
Język ANSI C Operacje we/wy
Zachodniopomorskie Centrum Edukacyjne Zadanie domowe.
ZARZĄDZANIE PROCESAMI
Skrypty w powłoce Ryszard Haraszczuk. Pierwszy skrypt Stworzenie pliku touch skrypt Wpisanie specjalnej linii dla powłoki #!/bin/bash Napisanie skryptu.
15. MECHANIZMY SYNCHRONIZACJI WĄTKÓW Większość koncepcji stworzonych na potrzeby synchronizacji procesów ciężkich została zastosowana też do synchronizacji.
Muteksy Muteksy (mutex – MUTual EXclusion) są prostymi obiektami synchronizacyjnymi pełniącymi rolę semaforów binarnych dla wątków (chroniącymi sekcje.
11. PAKIET IPC Narzędzia z pakietu IPC (InterProcess Communication) służą do koordynacji procesów wykonywa- nych na jednym komputerze (nie są przeznaczone.
Semafory według normy POSIX
14. WĄTKI Procesy w tradycyjnym sensie (tworzone przez wykonanie funkcji fork) mają przydzielaną oddzielną przestrzeń adresową. W przestrzeni tej jest.
10. PROSTE MECHANIZMY KOORDYNACJI DOSTĘPNE W JĘZYKU C W systemie Unix użytkownikowi (nie będącemu administratorem) nie wolno wykonywać bezpośrednio żadnych.
9. KOORDYNACJA PROCESÓW WSPÓŁBIEŻNYCH PRZY UŻYCIU INTERPRETATORA
Wieloprocesowy system operacyjny dla komputerów ATARI XL/XE
ipcrm [ shm | msq | sem ] id
Wątki.
Pamięć wspólna Przegląd stosowanych rozwiązań Marcin Kamiński, Michał Kotra Wydział EAIiE Katedra Automatyki Kraków, 2008.
Sygnały Przegląd istniejących rozwiązań EAIiE Katedra Automatyki Kraków,
Podstawy programowania II
Podstawy programowania II Wykład 2: Biblioteka stdio.h Zachodniopomorska Szkoła Biznesu.
Podstawy programowania. Język C i C++– podstawy Temat: 1
Automatyka i Robotyka Systemy czasu rzeczywistego Wykład 3.
Wielozadaniowowść systemu operacyjnego Linux
Systemy operacyjne.
Automatyka i Robotyka Systemy czasu rzeczywistego Wykład 4.
Programowanie strukturalne i obiektowe
JAVA c.d.. Instrukcji wyboru SWITCH używamy, jeśli chcemy w zależności od wartości pewnego wyrażenia wykonać jeden z kilku fragmentów kodu. Jest to w.
Inicjalizacja i sprzątanie
Koncepcja procesu Zadanie i proces. Definicja procesu Process – to program w trakcie wykonywania; wykonanie procesu musi przebiegać w sposób sekwencyjny.
Wykład 4 Programowanie systemowe w Linux: System plików i procesy
Programowanie systemowe w Linux:
12. Input Capture – Wejście przechwytywania
Systemy operacyjne Wykład 6a Procesy dr inż. Wojciech Bieniecki
Systemy operacyjne (wiosna 2014)
Bariery synchronizacyjne Bariery są obiektami synchronizacyjnymi pakietu pthread służącymi do wyrównywania czasów pracy wątków wykonujących wspólne zadanie.
Podstawy programowania II Wykład 3: Obsługa plików w stdio.h.
Systemy Operacyjne Seminarium Dyplomowe Wydział Informatyki, Elektroniki i Telekomunikacji Katedra Telekomunikacji Kraków, 9 listopada 2012 Adam Halwa.
1 dynamiczny przydział pamięci malloc() free() realloc() calloc() memset() memcpy( ) mempcpy( ) memmove() (wskaźniki!! )
Procesy, wątki Program a proces Proces: Przestrzeń adresowa, kod, dane, stos (część pamięci do przechowania zmiennych lokalnych i niektórych adresów) Otwarte.
Seminarium Dyplomowe: Metodyka i Techniki Programowania Autor: Bartłomiej Fornal.
1 Architektury Komputerów i Systemy Operacyjne Prowadzący przedmiot: dr inż. Rafał Stankiewicz Data:
Jeszcze dygresja o macierzach... #include /* przyklad pokazuje, jak dla macierzy wielowymiarowych dziala operator dereferencji * ; otoz jesli macierz jest.
Podstawy informatyki Mechanizm obsługi sytuacji wyjątkowych Łukasz Sztangret Katedra Informatyki Stosowanej i Modelowania Prezentacja przygotowana w oparciu.
Systemy operacyjne Wykład 6 Procesy dr inż. Wojciech Bieniecki Instytut Nauk Ekonomicznych i Informatyki 1.
C++ mgr inż. Tomasz Turba Politechnika Opolska 2016.
jeszcze dygresja o macierzach...
dynamiczny przydział pamięci
Zapis prezentacji:

procesy odrębne –Unikatowy PID ( ) –Zmienne –Zbiory deskryptorów plików –Przestrzeń stosu (lokalne zmienne, wywołania funkcji) –Środowisko –Licznik rozkazów dzielone –Kod programu – brak możliwości zapisu –Biblioteki systemowe

Uruchamianie procesów #include system(const char *string) zwraca:127 – nie można uruchomić powłoki -1– inny błąd kod wy polecenia równoważne - sh –c string oczekuje na zakończenie procesu chyba że: system(polecenie &);

Zastepowanie procesu (rodzina funkcji exec) #include char **environ; int execl(const char *path, const char *arg0, (char *) 0); int execlp(const char *path, const char *arg0, (char *) 0); int execle(const char *path, const char *arg0, (char *) 0,const char *envp[]); int execv(const char *path, const char *argv[]); int execvp(const char *path, const char *argv[]); int execve(const char *path, const char *argv[], const char *envp[]);

. #include…. int main() { printf(start\n); execlp(ps, ps,aux,0); printf(koniec\n); exit(0); } PID ps – a PID proc. mac. brak powrotu do pr. mac. proces potomny dziedziczy deskryptory plików

Duplikowanie procesu #include pid_t fork(void); Zwraca: pid procesu potomnego - w procesie macierzystym 0 - w procesie potomnym -1 - błąd Proces potomny dziedziczy: zmienne, deskryptory plików

#include ….. switch (fork()) {case –1; printf(fork error); exit(1); case 0; /* akcja dla procesu potomnego */ break; default; /* akcja dla procesu macierzystego */ break; }

#include …. switch (fork()) {case –1; printf(fork error); exit(1); case 0; /* proces potomny */ execl(./program,program,NULL); exit(2); default; /* proces macierzysty */ }

getpid() zwraca pid procesu wywołującego zombie proces potomny po zakończeniu – pozostaje w systemie (aż pr. mac. wykona wait lub się zakończy) sierota proces mac. zakończył pracę nieprawidłowo (PPID=1)

#include pid_t wait(int *stat); pid_t waitpid(pid_t pid, int *stat, int opt); wait - zwraca pid procesu, który się zakończył pod adresem wskazywanym przez status umieszczany jest status zakończenia waitpid – opt =np. WNOHANG – zapobiega wstrzymywaniu procesu wywołującego (zwraca 0) oczekiwanie na zakończenie potomka

Zarządzanie procesami: #include int main() {int i,id,status; fprintf(stdout,Mój PID %d\n,getpid()); fprintf(stdout,Teraz tworze potomka\n ); id=fork(); if (id==0) fprintf(stdout,id=%d to pisze proces potomny PID= %d\n,id,getpid()); else { wait(&status); fprintf(stdout,id =%d to pisze proces macierzysty id= %d\n,id,getpid()); }; fprintf(stdout,A to pisza obydwa procesy PID=%d\n,getpid());}

Komunikacja między procesami: sygnały pliki łącza komunikacyjne łącza nazwane ( kolejki FIFO) semafory komunikaty pamięć dzielona

Sygnały Sygnały - jądro systemu oraz procesy mogą wysyłać sygnały do dowolnego procesu. Zestaw wszystkich sygnałów daje polecenie kill -l Sygnały są ponumerowane od 1 do 30 kill -9 PID - SIGKILL SIKILL, SIGSTOP - nie może być przechwycony przez proces i potraktowany inaczej SIGHUP - po zamknięciu sesji wszystkie procesy potomne procesu login dostają sygnał o numerze 1, powodujący ich przerwanie pod warunkiem, że nie przejmują tego sygnału i nie podejmują innego działania Można uruchomić program odporny na ten sygnał np. przez nohup dowolny program

Sygnały fcja signal – manipulowanie sygnałami #include SIG_IGN – ignorowanie sygnału SIG_DFL – przywraca domyślne działanie (również po przechwyceniu danego sygnału) …. void au(int sig) {printf(przechwytany sygnal %d\n,sig);} int main() {…… (void) signal(SIGINT,au); …….. }

#include int raise(int sig); - do siebie #include int kill(pid_t pid, int sig); - do procesu o identycznym uid #include unsigned int alarm(unsigned int sec); int pause(void) alarm: wysyła sygnał SIGALARM za sec sekund każdy proces może mieć max. 1 zaplanowany alarm pause – wstrzymuje działanie programu do otrzymania sygnału sigaction – interfejs obsługi sygnałów

Pliki- Pliki - najczęstsza metoda komunikowania się procesów (jeden proces tworzy plik za pomocą dowolnego edytora, drugi przetwarza ten tekst – porządkuje alfabetycznie) problem: proces czytający może wyprzedzić proces piszący i uznać, że komunikacja została zakończona -> łącza komunikacyjne Łącza komunikacyjne nie są plikami chociaż mają swój i-węzeł nie ma dowiązania w systemie plików jeśli proces czytający zbyt wyprzedzi proces piszący -> oczekuje na dalsze dane; jeśli proces piszący zbyt wyprzedzi proces czytający -> zostaje uśpiony łącza komunikacyjne wykorzystywane z poziomu powłoki - potoki dotyczą procesów pokrewnych powolne

Kolejki FIFO łącza nazwane - kolejki FIFO (first-in-first-out) plik specjalny (typ pliku - p) może być otwarty przez każdy proces umożliwia współpracę wielu procesów piszących i czytających (gwarantują niepodzielność) powolne Semafory Semafory – uniemożliwiają dostępu do zasobów dwóm lub większej liczbie procesów flaga możliwa do ustawiana i opuszczania przez różne procesyKomunikaty Procesy mogą przesłać do kolejki komunikatów niewielką ilość danych Procesy, które mają uprawnienia mogą pobierać z niej kolejki komunikaty

Pamięć dzielona najszybszy sposób komunikacji między procesami ten sam obszar pamięci jest przydzielany kilku procesom danych wygenerowane przez jeden proces są natychmiast dostępne dla innych procesów dostęp do pamięci dzielonej wymaga synchronizacji – semafory