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

Podobne dokumenty
Obsługa plików Procesy

Procesy. S. Samolej: Procesy

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

Temat zajęć: Obsługa procesów w systemie.

2. Zarządzanie procesami

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

procesy odrębne dzielone

Procesy. 5. Procesy (2005/2006)

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

Model procesu w systemie Linux. Tomasz Borzyszkowski

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

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

Systemy Operacyjne Ćwiczenia

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

Procesy w systemach UNIX i Linux

2. Zarządzanie procesami

Zarządzanie Procesami

Procesy, pliki, potoki, sygnały - uzupełnienie

2. Zarządzanie procesami

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

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

Funkcje jadra systemu operacyjnego UNIX

Uruchamianie programów w systemie Linux, potoki, strumienie, procesy, alias

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

Funkcje jadra systemu operacyjnego UNIX

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

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

4.2 Sposób korzystania z l acza

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

J. Ułasiewicz Łącza nienazwane, nazwane, select 1

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

UXP1A Unix Programowanie i Architektura

Laboratorium systemów operacyjnych ćwiczenie nr 3. [ilość modułów: 1] Temat zajęć: Procesy w systemie operacyjnym

Pobieranie argumentów wiersza polecenia

Krótki kurs programowania współbieżnego

Systemy Operacyjne 1 Laboratorium 2 Procesy i sygnały w Linuksie (jeden tydzień) dr inż. Arkadiusz Chrobot

Kolejki FIFO (łącza nazwane)

Procesy i potoki. S. Samolej: Procesy

Zarządzanie procesami (omawiane zagadnienia)

Stany procesu. nowy aktywny oczekujący gotowy zakończony. zakończ. nowy. przerwanie gotowy aktywny. we/wy czek. we/wy czekający

Jądro Powłoka System plików Programy użytkowe

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

Dariusz Wawrzyniak 5 kwietnia 2001

Łącza nienazwane(potoki)

Temat zajęć: Obsługa łączy komunikacyjnych

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

// Liczy srednie w wierszach i kolumnach tablicy "dwuwymiarowej" // Elementy tablicy są generowane losowo #include <stdio.h> #include <stdlib.

Systemy Operacyjne I: Procesy

Wstęp do Programowania, laboratorium 02

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

Wstęp do programowania 1

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

IPC: Kolejki komunikatów

Moduł 4: Strumienie, potoki, sterowanie procesami

UŻYCIE I ZARZĄDZANIE WĄTKAMI

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

J. Ułasiewicz Łącza nienazwane, nazwane, select 1

UŻYCIE I ZARZĄDZANIE WĄTKAMI

Pamięć współdzielona

Wskaźniki. Informatyka

Katedra Elektrotechniki Teoretycznej i Informatyki. wykład 12 - sem.iii. M. Czyżak

... Ireneusz Mrozek. Wydział Informatyki

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

Instytut Teleinformatyki

SYSTEMY OPERACYJNE WYKLAD 6 - procesy

Instytut Teleinformatyki

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

Wskaźniki w C. Anna Gogolińska

PROGRAMOWANIE SYSTEMÓW CZASU RZECZYWISTEGO

POZNA SUPERCOMPUTING AND NETWORKING CENTER. Wprowadzenie do systemu operacyjnego Linux zarzdzanie procesami

x szereg(x)

Krótkie wprowadzenie do korzystania z OpenSSL

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

Systemy operacyjne III

5 Przygotował: mgr inż. Maciej Lasota

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

Argumenty wywołania programu, operacje na plikach

Wstęp do informatyki Shell podstawy

SUMA KONTROLNA (icmp_cksum) NUMER KOLEJNY (icmp_seq)

Komunikacja za pomocą potoków. Tomasz Borzyszkowski

Programowanie Proceduralne

The Graphics View Framework. Oprogramowanie i wykorzystanie stacji roboczych. Wykład 5. he Graphics View Framework - architektura

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

1 Przygotował: mgr inż. Maciej Lasota

1. PRZESZUKIWANIE SYSTEMU PLIKÓW

ISO/ANSI C - funkcje. Funkcje. ISO/ANSI C - funkcje. ISO/ANSI C - funkcje. ISO/ANSI C - funkcje. ISO/ANSI C - funkcje

4. Procesy pojęcia podstawowe

Laboratorium Procesy w systemach UNIX 3.2 Polecenia związane z procesami

Podstawy informatyki. Informatyka stosowana - studia niestacjonarne. Grzegorz Smyk. Wydział Inżynierii Metali i Informatyki Przemysłowej

Procesy i sygnały. Procesy. 6. Procesy i sygnały (2006/2007)

Informacje wstępne #include <nazwa> - derektywa procesora umożliwiająca włączenie do programu pliku o podanej nazwie. Typy danych: char, signed char

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

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

Zarządzanie procesami

Języki i metodyka programowania. Wprowadzenie do języka C

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

Temat 1. Podstawy Środowiska Xcode i wprowadzenie do języka Objective-C

Wprowadzenie do programowania i programowanie obiektowe

4. Tablica dwuwymiarowa to jednowymiarowa tablica wskaźników do jednowymiarowych tablic danego typu.

Technologie Informacyjne - Linux 2

Transkrypt:

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

Plan zajęć 1 Procesy w systemie Linux proces procesy macierzyste i potomne procesy zombie i sieroty 2 Funkcje systemowe pobieranie identyfikatorów tworzenie procesów potomnych uruchamianie programów w ramach procesu kończenie i zabijanie procesów synchronizacja procesów macierzystych i potomnych przekierowywanie strumieni wejściowych/wyjściowych 3 Zadania teoretyczne 4 Zadania praktyczne Mateusz Hołenko Procesy [1/24]

Procesy w systemie Linux

Proces proces to nie program! pojęcie abstrakcyjne program w trakcie wykonywania procesami zarządza system operacyjny procesom przydzielane są zasoby systemowe procesor pamięć operacyjna urządzenia zewnętrzne Mateusz Hołenko Procesy [3/24]

Proces proces to nie program! pojęcie abstrakcyjne program w trakcie wykonywania procesami zarządza system operacyjny procesom przydzielane są zasoby systemowe procesor pamięć operacyjna urządzenia zewnętrzne Mateusz Hołenko Procesy [3/24]

Proces proces to nie program! pojęcie abstrakcyjne program w trakcie wykonywania procesami zarządza system operacyjny procesom przydzielane są zasoby systemowe procesor pamięć operacyjna urządzenia zewnętrzne Mateusz Hołenko Procesy [3/24]

Proces proces to nie program! pojęcie abstrakcyjne program w trakcie wykonywania procesami zarządza system operacyjny procesom przydzielane są zasoby systemowe procesor pamięć operacyjna urządzenia zewnętrzne Mateusz Hołenko Procesy [3/24]

Procesy macierzyste i potomne procesy tworzą hierarchię proces główny nazywa się init proces tworzący inne procesy staje się dla nich rodzicem (procesem macierzystym) wynik polecenia ps l a (PID identyfikator procesu, PPID identyfikator rodzica procesu) F UID PID PPID PRI NI VSZ RSS WCHAN STAT TTY TIME COMMAND... 0 0 1773 1 20 0 6196 644 n_tty_ Ss+ tty1 0 :00 / sbin / getty... tty1 0 1000 2090 2028 20 0 26188 6532 wait Ss pts /0 0 :00 / bin / bash 0 1000 32096 2090 20 0 10660 1156 R+ pts /0 0 : 00 ps l a Mateusz Hołenko Procesy [4/24]

Procesy macierzyste i potomne procesy tworzą hierarchię proces główny nazywa się init proces tworzący inne procesy staje się dla nich rodzicem (procesem macierzystym) wynik polecenia ps l a (PID identyfikator procesu, PPID identyfikator rodzica procesu) F UID PID PPID PRI NI VSZ RSS WCHAN STAT TTY TIME COMMAND... 0 0 1773 1 20 0 6196 644 n_tty_ Ss+ tty1 0 :00 / sbin / getty... tty1 0 1000 2090 2028 20 0 26188 6532 wait Ss pts /0 0 :00 / bin / bash 0 1000 32096 2090 20 0 10660 1156 R+ pts /0 0 : 00 ps l a Mateusz Hołenko Procesy [4/24]

Procesy macierzyste i potomne procesy tworzą hierarchię proces główny nazywa się init proces tworzący inne procesy staje się dla nich rodzicem (procesem macierzystym) wynik polecenia ps l a (PID identyfikator procesu, PPID identyfikator rodzica procesu) F UID PID PPID PRI NI VSZ RSS WCHAN STAT TTY TIME COMMAND... 0 0 1773 1 20 0 6196 644 n_tty_ Ss+ tty1 0 :00 / sbin / getty... tty1 0 1000 2090 2028 20 0 26188 6532 wait Ss pts /0 0 :00 / bin / bash 0 1000 32096 2090 20 0 10660 1156 R+ pts /0 0 : 00 ps l a Mateusz Hołenko Procesy [4/24]

Procesy zombie i sieroty procesy mogą kończyć swoje działanie w różnej kolejności procesy sieroty (ang. orphan) proces macierzysty się zakończył procesem macierzystym staje się init procesy zombie (ang. zombie) proces zakończył się, ale czeka na przekazanie statusu zakończenia nie zajmuje procesora ani innych zasobów występuje w tablicy procesów (tam znajduje się bowiem status zakończenia procesu) Mateusz Hołenko Procesy [5/24]

Procesy zombie i sieroty procesy mogą kończyć swoje działanie w różnej kolejności procesy sieroty (ang. orphan) proces macierzysty się zakończył procesem macierzystym staje się init procesy zombie (ang. zombie) proces zakończył się, ale czeka na przekazanie statusu zakończenia nie zajmuje procesora ani innych zasobów występuje w tablicy procesów (tam znajduje się bowiem status zakończenia procesu) Mateusz Hołenko Procesy [5/24]

Procesy zombie i sieroty procesy mogą kończyć swoje działanie w różnej kolejności procesy sieroty (ang. orphan) proces macierzysty się zakończył procesem macierzystym staje się init procesy zombie (ang. zombie) proces zakończył się, ale czeka na przekazanie statusu zakończenia nie zajmuje procesora ani innych zasobów występuje w tablicy procesów (tam znajduje się bowiem status zakończenia procesu) Mateusz Hołenko Procesy [5/24]

Funkcje systemowe

Pobieranie identyfikatorów identyfikator procesu PID pid_t getpid(void) identyfikator rodzica procesu PPID pid_t getppid(void) Mateusz Hołenko Procesy [7/24]

Pobieranie identyfikatorów identyfikator procesu PID pid_t getpid(void) identyfikator rodzica procesu PPID pid_t getppid(void) Mateusz Hołenko Procesy [7/24]

Tworzenie procesów potomnych tworzenie procesu potomnego pid_t fork(void) przykład zastosowania #include <unistd.h> #include <stdio.h> int main(int argc, char* argv[]) { printf("początek programu\n"); if (fork() == 0) { printf("tutaj pisze proces potomny!\n"); } else { printf("tutaj pisze proces macierzysty!\n"); } printf("tutaj piszą oba procesy!\n"); } 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 Mateusz Hołenko Procesy [8/24]

Tworzenie procesów potomnych tworzenie procesu potomnego pid_t fork(void) przykład zastosowania #include <unistd.h> #include <stdio.h> int main(int argc, char* argv[]) { printf("początek programu\n"); if (fork() == 0) { printf("tutaj pisze proces potomny!\n"); } else { printf("tutaj pisze proces macierzysty!\n"); } printf("tutaj piszą oba procesy!\n"); } 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 Mateusz Hołenko Procesy [8/24]

Uruchamianie programu w ramach procesu rodzina funkcji exec int execl(const char *path, const char *arg,...) int execlp(const char *file, const char *arg,...) int execle(const char *path, const char *arg,..., char *const envp[]) int execv(const char *path, char *const argv[]) int execvp(const char *file, char *const argv[]) int execve(const char *file, char *const argv[], char *const envp[]) poprawne wykonanie funkcji exec powoduje bezpowrotną zmianę wykonywanego programu! sugerowane wykorzystanie w połączeniu z funkcją fork Mateusz Hołenko Procesy [9/24]

Uruchamianie programu w ramach procesu rodzina funkcji exec int execl(const char *path, const char *arg,...) int execlp(const char *file, const char *arg,...) int execle(const char *path, const char *arg,..., char *const envp[]) int execv(const char *path, char *const argv[]) int execvp(const char *file, char *const argv[]) int execve(const char *file, char *const argv[], char *const envp[]) poprawne wykonanie funkcji exec powoduje bezpowrotną zmianę wykonywanego programu! sugerowane wykorzystanie w połączeniu z funkcją fork Mateusz Hołenko Procesy [9/24]

Kończenie i zabijanie procesu zakończenie działania procesu i zwrócenie statusu zakończenia status status zakończenia procesu proces zakończony poprawnie: 0 błąd: inna wartość void exit(int status) zabicie procesu potomnego pid identyfikator procesu, który ma zostać zabity (patrz man 2 kill!) sig numer sygnału wysyłany do procesu potomnego int kill(pid_t pid, int sig) Mateusz Hołenko Procesy [10/24]

Kończenie i zabijanie procesu zakończenie działania procesu i zwrócenie statusu zakończenia status status zakończenia procesu proces zakończony poprawnie: 0 błąd: inna wartość void exit(int status) zabicie procesu potomnego pid identyfikator procesu, który ma zostać zabity (patrz man 2 kill!) sig numer sygnału wysyłany do procesu potomnego int kill(pid_t pid, int sig) Mateusz Hołenko Procesy [10/24]

Synchronizacja procesów synchronizacja procesu macierzystego i potomnego status adres komórki pamięci, do którego zapisany zostanie status zakończenia procesu potomnego pid identyfikator procesu, na którego zakończenie funkcja ma oczekiwać (patrz man 2 wait!) options opcje określające sposób zakończenia funkcji pid_t wait(int* status) pid_t waitpid(pid_t pid, int* status, int options) Mateusz Hołenko Procesy [11/24]

Przykład wykorzystania funkcji exec #include <unistd.h> #include <stdio.h> int main(int argc, char* argv[]) { printf("początek działania programu\n"); if (fork() == 0) { execlp("ls", "ls", "-a", NULL); perror("błąd uruchamiania programu!"); exit(1); } wait(null); printf("koniec działania programu\n"); return 0; } 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 Mateusz Hołenko Procesy [12/24]

Przekierowywanie strumieni wejściowych/wyjściowych proces potomny dziedziczy tablicę otwartych deskryptorów przekierowania procesów ustawione przed wywołaniem funkcji fork obowiązują również w procesie potomnym! przykładowy program #include <unistd.h> #include <stdio.h> #include <fcntl.h> int main(int argc, char* argv[]) { dup2(creat("ls-out", 0600), 1); execvp("ls", argv); } 1 2 3 4 5 6 7 8 9 Mateusz Hołenko Procesy [13/24]

Przekierowywanie strumieni wejściowych/wyjściowych proces potomny dziedziczy tablicę otwartych deskryptorów przekierowania procesów ustawione przed wywołaniem funkcji fork obowiązują również w procesie potomnym! przykładowy program #include <unistd.h> #include <stdio.h> #include <fcntl.h> int main(int argc, char* argv[]) { dup2(creat("ls-out", 0600), 1); execvp("ls", argv); } 1 2 3 4 5 6 7 8 9 Mateusz Hołenko Procesy [13/24]

Przekierowywanie strumieni wejściowych/wyjściowych proces potomny dziedziczy tablicę otwartych deskryptorów przekierowania procesów ustawione przed wywołaniem funkcji fork obowiązują również w procesie potomnym! przykładowy program #include <unistd.h> #include <stdio.h> #include <fcntl.h> int main(int argc, char* argv[]) { dup2(creat("ls-out", 0600), 1); execvp("ls", argv); } 1 2 3 4 5 6 7 8 9 Mateusz Hołenko Procesy [13/24]

Zadania teoretyczne

Ile procesów zostanie stworzonych? #include <unistd.h> #include <stdio.h> #include <fcntl.h> int main(int argc, char* argv[]) { fork(); fork(); if(fork() == 0) fork(); fork(); } return 0; 1 2 3 4 5 6 7 8 9 10 11 12 13 14 Mateusz Hołenko Procesy [15/24]

Odpowiedź @-----------------------------------+ @-----------------+ @-----------------+ @-----+ @-----+ @-----+ @-----+ @-----+ @-----+ @-----+ @-----+ @--+ @--+ @--+ @--+ @--+ @--+ @--+ @--+ @--+ @--+ @--+ @--+ 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 Mateusz Hołenko Procesy [16/24]

Ile procesów zostanie stworzonych? #include <unistd.h> #include <stdio.h> #include <fcntl.h> #include <stdlib.h> int main(int argc, char* argv[]) { fork(); fork(); if(fork()!= 0) exit(0); fork(); } return 0; 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 Mateusz Hołenko Procesy [17/24]

Odpowiedź @-----------------------------------+ @-----------------+ @-----------------+ @-----+ @-----+ @-----+ @-----+ x @-----+ x @-----+ x @-----+ x @-----+ 1 2 3 4 5 6 7 8 Mateusz Hołenko Procesy [18/24]

Ile procesów zostanie stworzonych? #include <unistd.h> #include <stdio.h> #include <fcntl.h> #include <stdlib.h> int main(int argc, char* argv[]) { fork(); fork(); if(fork()!= 0) if(fork() == 0) fork(); else exit(0); fork(); } return 0; 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 Mateusz Hołenko Procesy [19/24]

Odpowiedź @----------------------------------------+ @-----------------------------------+ @-----------------------------------+ @--------------+ @--------------+ @--------------+ @--------------+ @--+ @--+ @--+ @--+ x @-----+ x @-----+ x @-----+ x @-----+ @--+ @--+ @--+ @--+ @--+ @--+ @--+ @--+ @--+ @--+ @--+ @--+ 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 Mateusz Hołenko Procesy [20/24]

Zadania praktyczne

Zadania Zadanie 1 Napisz program tworzący dwa procesy. Każdy ze stworzonych procesów powinien utworzyć proces potomka. Należy wyświetlać identyfikatory procesów rodziców i potomków po każdym wywołaniu funkcji fork. Zadanie 2 Napisz program wypisujący napis Poczatek, następnie wywołujący funkcję fork i wypisujący napis Koniec. Co jest efektem uruchomienia tego programu? Mateusz Hołenko Procesy [22/24]

Zadania Zadanie 1 Napisz program tworzący dwa procesy. Każdy ze stworzonych procesów powinien utworzyć proces potomka. Należy wyświetlać identyfikatory procesów rodziców i potomków po każdym wywołaniu funkcji fork. Zadanie 2 Napisz program wypisujący napis Poczatek, następnie wywołujący funkcję fork i wypisujący napis Koniec. Co jest efektem uruchomienia tego programu? Mateusz Hołenko Procesy [22/24]

Zadania Zadanie 3 Napisz program wypisujący napis Poczatek, następnie wywołujący funkcję exec powodującą wydruk zawartości bieżącego katalogu i następnie wypisujący napis Koniec. Co jest efektem uruchomienia tego programu? Zadanie 4 Napisz program którego rezultatem będzie wydruk zawartości bieżącego katalogu poprzedzony napisem Poczatek a zakończony napisem Koniec. Mateusz Hołenko Procesy [23/24]

Zadania Zadanie 3 Napisz program wypisujący napis Poczatek, następnie wywołujący funkcję exec powodującą wydruk zawartości bieżącego katalogu i następnie wypisujący napis Koniec. Co jest efektem uruchomienia tego programu? Zadanie 4 Napisz program którego rezultatem będzie wydruk zawartości bieżącego katalogu poprzedzony napisem Poczatek a zakończony napisem Koniec. Mateusz Hołenko Procesy [23/24]

Zadania Zadanie 5 Napisz program, którego wynikiem jest sformatowana lista procesów: poczatek listy proces 1 proces2... koniec listy Zadanie 6 Napisz program tworzący równocześnie trzy procesy zombi. Mateusz Hołenko Procesy [24/24]

Zadania Zadanie 5 Napisz program, którego wynikiem jest sformatowana lista procesów: poczatek listy proces 1 proces2... koniec listy Zadanie 6 Napisz program tworzący równocześnie trzy procesy zombi. Mateusz Hołenko Procesy [24/24]