Sieciowe Systemy Operacyjne
|
|
- Danuta Jastrzębska
- 6 lat temu
- Przeglądów:
Transkrypt
1 Sieciowe Systemy Operacyjne INES Tomasz Surmacz c Tomasz Surmacz, Wrocław, 10 grudnia 2018
2 Zagadnienia wstępne Zagadnienia wstępne 15h wykładu w 10 tygodni (wtorek/n 13:15-16:00) Kolokwium zaliczeniowe pod koniec (ostatni wykład lub okolice, do ustalenia w ciągu najbliższych 2 tygodni) 30h laboratorium (L2.1/C-16 Technopolis, 013/C-3) Ocena na podstawie ćwiczeń wykonywanych podczas zajęć Konsultacje i formy kontaktu Konsultacje: pok. 105/c tsurmacz@ict.pwr.wroc.pl, Subject: SSO WWW: WWW: Literatura Stevens, W. Richard Programowanie zastosowań sieciowych w systemie UNIX (Programowanie usług sieciowych, tom 1.) Bach, Maurice J. Budowa systemu operacyjnego UNIX Silberschatz, Abraham Podstawy systemów operacyjnych Ben-Ari, M. Podstawy programowania współbieżnego Tomasz Surmacz, Sieciowe Systemy Operacyjne, INEU 006, 2018/2019 2
3 1. Podstawy systemu UNIX System UNIX Program kursu Podstawy systemu UNIX System plików i prawa dostępu Wejście i wyjście w systemie UNIX Procesy Sygnały Strumienie pipe i FIFO Pamięć wirtualna, stronicowanie i segmentacja, pamięc wspólna Semafory, problemy współbieżności Komunikacja sieciowa - model ISO, pakiety, odwzorowanie w funkcjach systemu UNIX Funkcje komunikacji za pomocą gniazdek Procesy uruchamiane przez inetd Komunikacja z użyciem protokołów TCP i UDP Serwery i klienci Zaawansowane zagadnienia komunikacji sieciowej Tomasz Surmacz, Sieciowe Systemy Operacyjne, INEU 006, 2018/
4 1. Podstawy systemu UNIX System UNIX Podstawy systemu UNIX System UNIX Początki 1970: Ken Thompson, Dennis Ritchie (Bell Laboratories) na maszynie PDP-7, następnie PDP-11/ pierwsza wersja z jądrem napisanym w C 1979 BSD Unix (University of California, Berkeley) 1983 Unix System V 1990 Unix System V Release 4 XINU (XINU Is Not UNIX) system edukacyjny 1987 Minix (A. Tanenbaum) 1991 Linux 0.02 (Linus Torvalds) Brian Kernighan język C, powstał specjalnie w celu zapewnienia przenośności pisanego oprogramowania Tomasz Surmacz, Sieciowe Systemy Operacyjne, INEU 006, 2018/
5 1. Podstawy systemu UNIX System UNIX Podstawowe cechy systemu system wieloużytkownikowy system wielozadaniowy (wiele procesów) podział czasu wywłaszczanie procesów podsystem plików zarządzanie pamięcią biblioteki systemowe wszystkie urządzenia dostępne przez pliki specjalne 3 podstawowe wersje: (1988) Version 7 (wczesny odłam komercyjny) Berkeley BSD 4.1 vs. BSD 4.2 (BSD4.4) (wersja akademicka ) System V SysV Rel.3, SysV Rel.2 (SVR4) (wersja komercyjna) Obecnie: Pochodne BSD lub SysV (lub obu) Tomasz Surmacz, Sieciowe Systemy Operacyjne, INEU 006, 2018/
6 1. Podstawy systemu UNIX System UNIX Podstawowe różnice: parametry wykonania komend (np. ps -ef lub ps -aux) różne koncepcje dostępu do terminali (strumienie w SysV) inna obsługa przerwań systemowych (sygnałów) inne umiejscowienie standardowych programów Standardy: ANSI C POSIX (Portable Operating System Interface) X/Open Jedną z najwspanialszych zalet związanych ze standaryzacją jest to, że obowiązujących standardów jest tak wiele, że zawsze znajdzie się taki, który nam odpowiada. Licencje: Systemy komercyjne: SysV, SCO, Solaris, HPUX, OSF,... FreeBSD, Linux FSF & GNU Licencja GPL Tomasz Surmacz, Sieciowe Systemy Operacyjne, INEU 006, 2018/
7 1. Podstawy systemu UNIX Fundamentalne cechy wszystkich systemów UNIX Fundamentalne cechy wszystkich systemów UNIX Mechanizm ochrony bezpieczeństwa rozgraniczający użytkowników i administratora systemu Podział na pracę w trybie użytkownika i w trybie jądra systemu (wspomagany mechanizmami ochrony procesora) W trybie jądra wykonują się wszystkie funkcje systemowe Przejście do trybu jądra realizowane przez przerwania programowe System sterowany zdarzeniami (a nie polling ) aplikacje nie tracą czasu, oddając go innym procesom, a same są usypiane, biernie czekając na wystąpienie oczekiwanego zdarzenia Wszystkie 1 urządzenia, mechanizmy komunikacji wewnętrznej i sieciowej itp. Dostępne są przez pliki i deskryptory plików System plików umożliwiający kontrolę dostępu do plików i blokowanie prawa do zapisu pomiędzy procesami. Pamięć wirtualna i system plików stosują te same mechanizmy pełna integracja. Prosty i spójny interfejs zapewniany przez system operacyjny około 300 funkcji systemowych (MS- Windows kilkadziesiąt tysięcy) 1 prawie Tomasz Surmacz, Sieciowe Systemy Operacyjne, INEU 006, 2018/
8 1. Podstawy systemu UNIX System plików System plików Separatorem ścieżki jest znak / Katalog / to korzeń (root) systemu plików / Wszystkie katalogi/dyski są podłączone jako gałęzie drzewa katalogów zarówno lokalne, jak i zdalne. Różne rodzaje systemów plików: UFS, SysV, minix, ext2, MSDOS, NFS local usr bin bin lib etc dev /dev/dsk/c0t0d1s0 spool var log Komendy związane z plikami: ls, cd, pwd, mkdir, rmdir, cat, mv, cp, rm, mount, umount, df, du, quota Pliki: /etc/fstab, /etc/mntab, /etc/exports lib bin /dev/dsk/c0t0d1s1 home user1 user2 /dev/dsk/c1t2d0s4 Dziurawe pliki (sparse files man tar, man rsync) cyber:/export/home Tomasz Surmacz, Sieciowe Systemy Operacyjne, INEU 006, 2018/
9 1. Podstawy systemu UNIX Zarządzanie pamięcią Zarządzanie pamięcią Pamięć fizyczna systemu podzielona jest na strony Rozmiar strony z reguły kb Dostęp do stron pamięci realizowany jest przez tablicę deskryptorów pamięci, z pomocą sprzętowych układów MMU Pamięć wirtualna Swoboda adresowania Możliwość zaadresowania większego obszaru pamięci niż dostępny Stronicowanie pamięci/plik wymiany dokonywane automatycznie Podział pamięci w systemie UNIX Pamięć jądra systemu Bufory dyskowe Plik(i) wymiany (swap) Pamięć procesów użytkowników Kod programu (TEXT) Dane Stos Stos wywołań systemowych Tomasz Surmacz, Sieciowe Systemy Operacyjne, INEU 006, 2018/
10 1. Podstawy systemu UNIX Biblioteki Biblioteki Język C określa konstrukcje sterujące wykonaniem programu Funkcje nie są częścią języka C, lecz bibliotek systemowych lub programów nawet najbardziej podstawowe, jak printf() Funkcje systemowe znajdują się w bibliotekach dynamicznych, takich jak libc.so Biblioteki statyczne (np. /usr/lib/libc.a) dołączane w całości lub częściowo do kodu kompilowanego programu, w trakcie kompilacji programy linkowane statycznie są większe, lecz nie wymagają działającego linkera ld Biblioteki dynamiczne (np. /usr/lib/libsocket.so.2) dołączane dynamicznie do kodu programu w trakcie jego uruchamiania zajmują region pamięci współdzielony z innymi procesami mniejsze zapotrzebowanie na pamięć mniejsze programy dynamiczny linker programy ld i ldd Zmienna środowiskowa LD LIBRARY PATH Tomasz Surmacz, Sieciowe Systemy Operacyjne, INEU 006, 2018/
11 1. Podstawy systemu UNIX Biblioteki Podstawowe biblioteki systemowe: libc.so standardowe funkcje wejścia/wyjścia, zarządzania pamięcią, itp. libm.so funkcje matematyczne ld.so linker dynamiczny libsocket.so funkcje sieciowe (SysV) libnsl.so name server library tłumaczenie nazw komputerów na adresy libx11.so funkcje systemu okienkowego X11 Narzędzia przydatne do tworzenia/badania bibliotek dynamicznych ldd nm, ar, ranlib objdump, readelf Tomasz Surmacz, Sieciowe Systemy Operacyjne, INEU 006, 2018/
12 1. Podstawy systemu UNIX Użytkownicy Użytkownicy System wielozadaniowy (multitasking) System wieloużytkownikowy (multiuser) Konieczność ochrony użytkowników przed sobą nawzajem Atrybuty użytkownika /etc/passwd: root:x:0:1:super-user:/root:/sbin/sh ts:x:103:10:tomasz Surmacz:/home/ts:/usr/local/bin/tcsh nobody:x:60001:60001:nobody:/: Nazwa użytkownika Identyfikator (uid) Grupa (nazwa i identyfikator gid) Komentarz (pole GECOS imię/nazwisko, nr telefonu, itp.) Hasło dostępu obecnie przeniesione do /etc/shadow Katalog domowy Interpreter poleceń (shell) Tomasz Surmacz, Sieciowe Systemy Operacyjne, INEU 006, 2018/
13 1. Podstawy systemu UNIX Użytkownicy Dla jądra systemu istotne są: uid procesu gid procesu prawa dostępu do pliku uprawnienia specjalne (uid==0) Polecenia operujące na uid/gid: newgrp, su, login, id Tomasz Surmacz, Sieciowe Systemy Operacyjne, INEU 006, 2018/
14 1. Podstawy systemu UNIX Prawa dostępu Prawa dostępu Każdy plik w systemie ma swojego właściciela i właściciela grupowego Każdy plik opisany jest przez 3 grupy praw dostępu: dla właściciela (user) dla grupy (group) dla pozostałych użytkowników (other) Podstawowe prawa dostępu to (r)ead odczyt (w)rite pisanie e(x)ecute wykonanie właściciel grupa pozostali u g o drwxr-x--x root liczba dowiązań typ (katalog/plik/...) wheel Tomasz Surmacz, Sieciowe Systemy Operacyjne, INEU 006, 2018/
15 1. Podstawy systemu UNIX Prawa dostępu Przykładowa zawartość katalogu domowego: drwxr-x--x 44 ts users 2048 Feb 27 16:39. drwxr-xr-x 47 ts users 3072 Feb 28 00:28.. -rw ts users 3476 May cshrc -rw-r--r-- 1 ts users 16 Jun forward drwx ts mail 1024 Feb 27 03:44 Mail drwxr-xr-x 3 ts users 1024 Jun News -rw-r--r-- 1 ts wheel 4029 Feb 27 03:13 back.tar.gz drwxr-xr-x 3 ts users 1024 Dec 1 14:31 hgttg drwxr-xr-x 3 ts users 1024 Feb 27 03:44 sso drwxr-xr-x 3 ts users 1024 Feb 27 03:19 src Komendy pozwalające zmieniać prawa dostępu: chmod, chgrp chown (tylko użytkownik root!) umask Tomasz Surmacz, Sieciowe Systemy Operacyjne, INEU 006, 2018/
16 1. Podstawy systemu UNIX Prawa dostępu System plików UFS Sztywny podział na tablicę i-węzłów i bloki dyskowe / I-węzeł numer 1 jest zawsze katalogiem głównym systemu plików d d d I-węzeł zawiera prawa dostępu, liczbę dowiązań, daty (mtime, ctime, atime) i wskaźnik na numer bloku zawierającego plik f Katalog jest plikiem specjalnym, zawierającym nazwy plików i odpowiadające im numery i-węzłów Tablica i-węzłów w rzeczywistości zajmuje około 0.5-2% pojemności dysku blok tmp 70 usr 11 home 3 lib 95 var blok kot-ali 93 plik blok ala ma k ota. ala ma kota. ala ma kota al a ma kot a. ala m a kota. ala ma k ota. ala Plik znika z dysku dopiero gdy liczba dowiązań zmaleje do 0 df -k, df -i Tomasz Surmacz, Sieciowe Systemy Operacyjne, INEU 006, 2018/
17 1. Podstawy systemu UNIX Prawa dostępu Bity specjalne: -rwsr-xr-x set-user-id -rwxr-sr-x set-group-id -rw------t sticky bit drwxr-sr-x set-group-id drwxrwxrwt sticky bit prw-rw-rw- strumień (named pipe) srw-rw-rw- gniazdo w domenie UNIX (UNIX-domain socket) brw-rw---- urządzenie blokowe (block device) crw-rw---- urządzenie znakowe (character device) lrwxrwxrwx dowiązanie symboliczne (symbolic link) Tomasz Surmacz, Sieciowe Systemy Operacyjne, INEU 006, 2018/
18 1. Podstawy systemu UNIX Wejście/wyjście Wejście/wyjście standardowe wejście stdin standardowe wyjście stdout wyjście błędów stderr strumień pipe przekierowanie we/wy: < > << >> >& & /etc/passwd grep cat -n tee abc sort -t: +1 grep :0: < /etc/passwd cat -n tee abc sort -t: +1 abc system plików katalogi, podkatalogi, pliki Tomasz Surmacz, Sieciowe Systemy Operacyjne, INEU 006, 2018/
19 1. Podstawy systemu UNIX Środowisko pracy i środowisko programistyczne Środowisko pracy i środowisko programistyczne Interpreter poleceń shell /bin/csh /bin/sh /sbin/sh bash tcsh Inne (zsh, ksh, emacs ;-)) Edytory tekstu vi emacs jed joe Kompilatory cc gcc g++ Program make wywołujący odpowiednie kompilatory i linker Linkowanie ld lub gcc Pliki nagłówkowe: /usr/include, /usr/local/include Biblioteki: /usr/lib, /usr/local/lib Uruchamianie programów Debugger systemowy adb (debugowanie i zmiana parametrów jądra działającego systemu) Debugger GNU gdb Ścieżka wykonania katalog. (kropka) Tomasz Surmacz, Sieciowe Systemy Operacyjne, INEU 006, 2018/
20 2. Procesy Procesy Stany procesów: tworzone funkcją fork() tryb użytk. unikalny pid przodek (rodzic) potomek (dziecko) grupa procesów i przewodnik grupy przełączanie procesów/przełączanie kontekstu tryb jądra. tablica procesów priorytety nice uśpiony gotowy Tomasz Surmacz, Sieciowe Systemy Operacyjne, INEU 006, 2018/
21 2. Procesy Kontekst procesu Kontekst procesu Każdy proces posiada własne segmenty kodu, danych i stosu. Jądro systemu, poprzez system obsługi pamięci wirtualnej, w chwili wykonywania procesu ma dostęp do jednego segmentu kodu, jednego segmentu danych i jednego ( ) segmentu stosu. Tablica procesów zawiera wskaźniki do zapamiętanych kontekstów poszczególnych procesów zawierających ich prywatne mapy odwzorowujące wszystkie trzy segmenty programu na segmenty pamięci fizycznej. CPU proces 1 RAM proces 1 RAM kod kod 1 kod 1 dane dane stos stos 2 stos 2 proces 2 kod 3 4 CPU proces 2 kod kod 3 4 dane dane stos 5 stos stos 5 Przełączenie kontekstu polega na zapamiętaniu aktualnego stanu procesu (odwzorowanie segmentów pamięci, stan procesora) w jego obszarze kontekstu, po czym wczytaniu do procesora kontekstu innego procesu. Tomasz Surmacz, Sieciowe Systemy Operacyjne, INEU 006, 2018/
22 2. Procesy Sterowanie procesami z powłoki użytkownika Sterowanie procesami z powłoki użytkownika Każdy proces zwraca wartość: 0 ok, >0 błąd Separator komend: znak ; lub & lub znak nowej linii Uruchamianie w tle: proces & Łączenie procesów strumieniem: proces1 proces2 Warunkowe wykonanie drugiego procesu: jeśli pierwszy zakończył się poprawnie: proces1 && proces2 jeśli pierwszy zakończył się błędem: proces1 proces2 Przekierowanie wyjścia błędów: csh: proces >& plik oraz proces1 & proces2 sh: proces > plik 2>&1 Zatrzymanie procesu: stop %nazwa, Klawisz Ctrl-Z, kill -STOP, kill -SUSP Zabicie procesu lub wysłanie sygnału: kill, kill -WINCH, kill -HUP, kill -KILL itp. Ponowne uruchomienie zatrzymanego procesu: fg Ponowne uruchomienie procesu w tle: bg Sprawdzenie listy działających procesów: jobs, a także ps Tomasz Surmacz, Sieciowe Systemy Operacyjne, INEU 006, 2018/
23 2. Procesy Tworzenie nowych procesów Tworzenie nowych procesów Do tworzenia nowych procesów służy fynkcja fork() ze standardowej biblioteki libc.so. Nowy proces, utworzony funkcją fork() jest dokładną kopią rodzica i wykonuje się w tym samym miejscu za wywołaniem funkcji fork() printf("ok\n"); a=7; p=fork(); if (p==-1) {... pid=1234 printf("ok\n"); a=7; p=fork(); if (p==-1) {... pid=1234 printf("ok\n"); a=7; p=fork(); if (p==-1) {... pid=1240 Oba procesy nie różnią się niczym, poza wartością zwróconą przez funkcję fork(): rodzic: numer procesu potomnego dziecko: wartość 0 Tomasz Surmacz, Sieciowe Systemy Operacyjne, INEU 006, 2018/
24 2. Procesy Tworzenie nowych procesów Tworzenie nowych procesów (c.d.) Sposobem na rozróżnienie obu procesów jest zbadanie wartości zwracanej przez fork(). pid=fork(); switch (pid) { case -1: fprintf(stderr, "Błąd fork!\n"); exit(1); printf("ok\n"); a=7; p=fork(); if (p==-1) {... pid=1234 } case 0: /* dziecko / child */ printf("tu pisze dziecko. pid rodzica=%d\n", getppid()); break; default: /* rodzic / parent */ printf("to drukuje rodzic. pid dziecka=%d\n", pid); printf("ok\n"); a=7; p=fork(); if (p==-1) {... pid=1234 printf("ok\n"); a=7; p=fork(); if (p==-1) {... pid=1240 Inne funkcje: getpid(), getppid(), wait(), kill(), exec() Tomasz Surmacz, Sieciowe Systemy Operacyjne, INEU 006, 2018/
25 2. Procesy Tworzenie nowych procesów Funkcja fork() przydziela nowemu procesowi pozycję w tablicy procesów przydziela nowemu procesowi nowy, unikalny identyfikator tworzy kopię kontekstu procesu macierzystego, kopiując segmenty pamięci lub zwiększając licznik odwołań do segmentu (np. współdzielonego segmentu kodu) zombie tryb użytk. tryb jądra. wywłaszcz. otwarte pliki rodzica pozostawia otwarte w dziecku, a więc zwiększa liczniki w tablicy plików i i-węzłów przekazuje rodzicowi pid dziecka, a dziecku wartość 0. nowy proces, choć nie był jeszcze nigdy wykonywany, budzi się tak, jakby zasnął w oczekiwaniu na zasób (wychodzi ze stanu uśpienia) uśpiony gotowy utworzony fork() Tomasz Surmacz, Sieciowe Systemy Operacyjne, INEU 006, 2018/
26 2. Procesy Tworzenie nowych procesów Funkcje exec() Rodzina funkcji: execl(), execv(), execle(), execve(), execlp(), execvp() nazwa funkcji określa jednocześnie zakres przekazywanych parametrów do nowego programu (wektor argumentów, zmienne środowiskowe) oraz to, czy przeszukiwać ścieżkę (zmienną $PATH) 1. argument rzeczywista ścieżka do uruchamianego programu lub skryptu 2. argument i dalsze paramentry wywołania Wywołanie nadpisuje w aktualnym kontekście procesu segmenty kodu, danych i stosu nowym programem i wykonanie funkcji main() if ((pid=fork())==0) { execl("/bin/ls", "ls", "-la", "/tmp", NULL); printf("błąd!!! Ta instrukcja nie ma prawa się wykonać!\n"); } else { wait(null); } Nowy program dziedziczy: numer procesu i numer procesu rodzica oraz przynależność do grupy procesów wartość nice wartość umask priorytet uid, gid i przynależność do grup użytkowników katalog bieżący limity zasobów otwarte pliki a kilka innych wartości dotyczących blokad na plikach, semaforów i obsługi sygnałów (man exec) a niekoniecznie! uwaga na fcntl() i FD CLOEXEC Tomasz Surmacz, Sieciowe Systemy Operacyjne, INEU 006, 2018/
27 2. Procesy Kończenie procesu Kończenie procesu wait() exit() Zakończony proces staje się zombie i powoduje wysłanie do rodzica sygnału SIGCLD Wywołanie przez rodzica funkcji wait() pozwala odebrać status zwrócony przez exit() uwolniony zombie ostatecznie znika z systemu wywołanie wait(), gdy nie ma żadnego zombie, zawiesza proces, do momentu gdy któreś z dzieci zakończy żywot lub gdy już nie będzie żadnego. (Zawieszenie kończy się także po odebraniu sygnału przez proces). Różne funkcje wait(): pid_t wait (int *status); pid_t waitpid (pid_t pid, int *status, int options); pid_t wait3 (int *status, int options, struct rusage *rusage); pid_t wait4 (pid_t pid, int *status, int options, struct rusage *rusage); Tomasz Surmacz, Sieciowe Systemy Operacyjne, INEU 006, 2018/
28 3. Strumienie pipe i FIFO Strumienie pipe Strumienie pipe i FIFO Strumienie pipe pozwalają łączyć spokrewnione ze sobą procesy transmisja jednokierunkowa z reguły łączą wyjście stdout jednego procesu z wejściem stdin innego tworzone funkcją pipe(int fd[2]) wypełnia 2-elementową tablicę deskryptorów proces 1 proces 2 fd[1] jest końcem otwartym do pisania fd[0] jest końcem otwartym do czytania jądro systemu fd[1] jadro systemu fd[0] oba końce to zwykłe deskryptory plików można na nich operować takimi funkcjami jak read(), write(), fprintf(), czy close(). jądro systemu gwarantuje, że operacje zapisu nie przekraczające rozmiaru strumienia są niepodzielne Tomasz Surmacz, Sieciowe Systemy Operacyjne, INEU 006, 2018/
29 3. Strumienie pipe i FIFO Pisanie do strumienia pipe Pisanie do strumienia pipe proces 1 proces 2 jądro systemu jadro systemu fd[1] fd[0] strumień pipe pełni jednocześnie rolę bufora o pojemności (minimum 4kB) zapisanie danych, gdy jest miejsce w strumieniu, powoduje natychmiastowy powrót z funkcji write() itp. zapisanie danych powyżej maksymalnego rozmiaru powoduje zablokowanie procesu, do czasu aż zwolni się miejsce w strumieniu (ktoś te dane przeczyta) za pomocą odpowiednich funkcji fcntl() lub ioctl() można ustawić opcję O NDELAY, lecz wówczas proces piszący musi być przygotowany na to, że może mu się udać zapis tylko części wysyłanych danych pisanie do strumienia, którego nikt nie czyta (jego drugi koniec został zamknięty) powoduje wysłanie do procesu piszącego sygnału SIGPIPE zamknięcie zapisywanego końca powoduje, że proces czytający w wyniku wywołania funkcji read() otrzyma wartość 0 Tomasz Surmacz, Sieciowe Systemy Operacyjne, INEU 006, 2018/
30 3. Strumienie pipe i FIFO Czytanie ze strumienia pipe Czytanie ze strumienia pipe otrzymywane dane stanowią strumień nie podzielony na żadne pakiety lub inne fragmenty czytanie ze strumienia może zwrócić mniej danych, niż zażądano jeśli strumień jest pusty i zamknięty do zapisu, funkcja read() zwraca wartość 0, oznaczającą EOF. jeśli strumień jest pusty, ale otwarty do zapisu, funkcja read() zostaje zablokowana, do momentu gdy można będzie coś przeczytać proces 1 proces 2 blokowania można uniknąć stosując opcję O NDELAY w funkcji fcntl() lub korzystając z funkcji select() zamknięcie strumienia do odczytu, gdy ciągle znajdowały się w nim nie przeczytane dane, generuje sygnał SIGPIPE wysyłany do procesu piszącego zamknięcie pustego strumienia danych nie powoduje żadnych konsekwencji dla procesu piszącego dopóki nie spróbuje czegoś zapisać. dzięki blokowaniu możliwe jest wykorzystanie strumieni do wzajemnej synchronizacji procesów jądro systemu fd[1] jadro systemu fd[0] Tomasz Surmacz, Sieciowe Systemy Operacyjne, INEU 006, 2018/
31 3. Strumienie pipe i FIFO Łączenie dwóch procesów strumieniem pipe Łączenie dwóch procesów strumieniem pipe proces int fd[2]; if (pipe(fd)==-1) perror("pipe");... jądro systemu fd[1] fd[0] switch (p=fork()){ case 0: /*dziecko*/... break; default: /*rodzic*/... } fd[1] proces fd[0] fd[1] proces potomny fd[0] jądro systemu jadro systemu fd[1] fd[0] Tomasz Surmacz, Sieciowe Systemy Operacyjne, INEU 006, 2018/
32 3. Strumienie pipe i FIFO Łączenie dwóch procesów strumieniem pipe Łączenie dwóch procesów strumieniem pipe (c.d.) switch (p=fork()){ case 0: /*dziecko*/... break; default: /*rodzic*/... } fd[1] proces fd[0] fd[1] proces potomny fd[0] jądro systemu jadro systemu fd[1] fd[0] /*rodzic*/ close(fd[0]); write(fd[1], buf, strlen(buf)+1); fd[1] proces proces potomny fd[0] /*dziecko*/ close(fd[1]); n=read(fd[0], buf, BUFSIZE); jądro systemu fd[1] jadro systemu fd[0] Tomasz Surmacz, Sieciowe Systemy Operacyjne, INEU 006, 2018/
33 3. Strumienie pipe i FIFO Tworzenie strumieni stdout-stdin Tworzenie strumieni stdout-stdin Do kopiowania otwartych deskryptorów służą funkcje dup() i dup2() dup(n) kopiuje deskryptor n na najniższy wolny numer deskryptora Poniższy program: int fdes; fdes=open("/tmp/test", "rt"); close(0); dup(fdes); spowoduje przepisanie deskryptora fdes do deskryptora nr 0. to samo można osiągnąć za pomocą dup2(fdes, 0) Jak korzystając z dup() uzyskać efekt taki sam jak w dup2(fdes, 10)? Tomasz Surmacz, Sieciowe Systemy Operacyjne, INEU 006, 2018/
34 3. Strumienie pipe i FIFO Tworzenie strumieni stdout-stdin Tworzenie strumieni stdout-stdin Najczęstszym zastosowaniem jest zastąpienie standardowego wejścia (lub wyjścia) strumieniem pipe, przed wykonaniem funkcji exec(): int fd[2]; pipe(fd); if ((f=fork()) == 0) { /* dziecko -- będzie czytać */ close(fd[1]); close(0); dup(fd[0]); execlp("cat", "cat", "-n", NULL); fprintf(stderr, "exec się nie udał!\n"); exit(1); } else { /* rodzic lub błąd fork() */... wait(); } Tomasz Surmacz, Sieciowe Systemy Operacyjne, INEU 006, 2018/
35 3. Strumienie pipe i FIFO Funkcja popen() Funkcja popen() Podobny efekt można osiągnąć za pomocą funkcji popen(): #include <stdio.h> FILE *popen(const char *command, const char *mode); int pclose(file *stream); popen() tworzy strumień pipe oraz proces potomny, w którym wykonuje /bin/sh, przekazując mu jako paramentr nazwę programu do wykonania jeśli *type== r, to standardowe wyjście uruchomionego podprocesu jest połączone ze strumieniem, a proces główny może czytać ze zwróconego deskryptora jeśli *type== w, zwrócony koniec jest otwarty do zapisu i połączony ze standardowym wejściem uruchomionego podprocesu zakończenie komunikacji może wymagać użycia pclose(), konieczna też jest synchronizacja za pomocą wait(). Wady stosowania popen(): za każdym razem niepotrzebnie uruchamiany jest /bin/sh; brak pełnej kontroli nad wejściem i wyjściem z podprocesu; nie jest możliwe jednoczesne przechwycenie wejścia i wyjścia ani rozdzielenie std. wyjścia od wyjścia błędów; Tomasz Surmacz, Sieciowe Systemy Operacyjne, INEU 006, 2018/
36 3. Strumienie pipe i FIFO Funkcja popen() funkcja popen() NIGDY i pod żadnym pozorem nie powinna być stosowana w programach typu set-user-id (zbyt łatwo przeoczyć złe dane przekazywane do interpretera sh). Tomasz Surmacz, Sieciowe Systemy Operacyjne, INEU 006, 2018/
37 3. Strumienie pipe i FIFO Strumienie FIFO Strumienie FIFO Zasadnicze różnice w stosunku do strumieni pipe: Posiadają dowiązanie w systemie plików tworzone funkcją mkfifo()/mknod() lub komendą mknod. Mogą być używane przez procesy nie spokrewnione ze sobą, a nawet procesy różnych użytkowników. Funkcja open() używana do otwierania kolejki FIFO do zapisu blokuje proces, aż do momentu otwarcia kolejki do odczytu, i odwrotnie. Dopiero gdy kolejka otwarta jest jednocześnie do zapisu i odczytu obie funkcje open() powracają ze stanu uśpienia; Sprzątanie tymczasowych kolejek może wymagać usunięcia ich z systemu plików funkcją unlink(). Kolejki FIFO mają z reguły większy rozmiar bufora (4 16 kb) Podobieństwa: Zamknięcie końca używanego do pisania (dokładniej: wszystkich końców) generuje u czytelników EOF; Zamknięcie końca używanego do czytania generuje sygnał SIGPIPE wysyłany do wszystkich piszących do strumienia; Zapis i odczyt przez standardowe funkcje I/O, takie jak write() czy read(); Niepodzielność zapisów mniejszych niż rozmiar strumienia; Blokowanie procesów w przypadku przepełnienia lub pustego strumienia (i możliwość zastosowania O NDELAY). Tomasz Surmacz, Sieciowe Systemy Operacyjne, INEU 006, 2018/
38 3. Strumienie pipe i FIFO Korzystanie ze strumieni FIFO Korzystanie ze strumieni FIFO #include <stdio.h> #include <errno.h> main() { int fd; int err; err=mknod("/tmp/fifo1", S_IFIFO 0660, 0) if (err<0 && errno!=eexist) { fprintf(stderr, "Nie mogę utworzyć FIFO\n"); exit (1); } fd=open("/tmp/fifo1, O_RDONLY); /* blokada? */ if (fd<0) { fprintf(stderr, "Nie mogę otworzyć FIFO do czytania\n"); exit(2); } } read(fd,......);... close(fd); unlink("/tmp/fifo1"); Tomasz Surmacz, Sieciowe Systemy Operacyjne, INEU 006, 2018/
39 4. Semafory Sekcja krytyczna Semafory Sekcja krytyczna Dwa procesy niezależnie modyfikują wspólną zmienną a, jeden po drugim int a,b; b=a; b+=100; a=b; 500 a == int a,c; 600 a == 600 c=a; c+=300; a=c; 900 a == 900 int a,b; b=a; b+=100; a=b; a == 500 a == 800 a == int a,c; c=a; c+=300; a=b; Dwa procesy niezależnie modyfikują wspólną zmienną a, lecz system operacyjny powoduje chwilowe wstrzymanie pierwszego procesu w trakcie wykonywania tej operacji. Tomasz Surmacz, Sieciowe Systemy Operacyjne, INEU 006, 2018/
40 4. Semafory Sekcja krytyczna Od momentu pobrania wartości zmiennej a do momentu jej odesłania żaden inny proces nie powinien mieć do niej dostępu Fragment programu potrzebujący wyłączności działania nazwiemy sekcją krytyczną. int a,b; b=a; int a,c; b+=100; a=b; c=a; c+=300; a=c; Rozwiązanie? static int wolny=1; /* semafor */ Zajmij(int *wolny) { Zwolnij(int *wolny) { main() { while (*wolny<=0) *wolny++; int a, b; sleep(1); } Zajmij(&sem); // Dlaczego *wolny--; b=a; // to nie } b+=100; // działa? a=b; Zwolnij(&sem); } Tomasz Surmacz, Sieciowe Systemy Operacyjne, INEU 006, 2018/
41 4. Semafory Sekcja krytyczna To będzie działać, jeśli operacje Zajmij() i Zwolnij() będą niepodzielne. int a,b; Zajmij(s); b=a; b+=100; a=b; int a,c; Zajmij(s); Zwolnij(s); c=a; c+=300; a=c; Zwolnij(s); Operacja Zajmij() jest wejściem do sekcji krytycznej usypia proces, jeśli zasób już jest zajęty, aż do momentu, gdy inny proces go zwolni. Proces zostaje umieszczony w kolejce procesów oczekujących na zwolnienie zasobu (semafora); Operacja Zwolnij() stanowi wyjście z sekcji krytycznej nigdy nie usypia procesu, za to może spowodować obudzenie innego (przeniesienie go z kolejki oczekujących). tryb użytk. tryb jądra. Obie operacje są niepodzielne (atomowe) i działają na poziomie jądra systemu. uśpiony gotowy Tomasz Surmacz, Sieciowe Systemy Operacyjne, INEU 006, 2018/
42 4. Semafory Sekcja krytyczna Semafor możemy traktować jak abstrakcyjny typ danych składający się ze zmiennej i kolejki procesów: Zajmij(S) Jeśli S > 0, to S S 1 i idź dalej. Jeśli S = 0, to umieść proces w kolejce oczekujących na zwolnienie semafora i zaśnij. Zwolnij(S) Jeśli kolejka oczekujących jest pusta, to S S + 1: Jeśli ktoś czeka, to usuń go z kolejki oczekujących i obudź go, nie zmieniając wartości S. Semafor binarny przyjmujący jedynie wartości 0 i 1. Semafor ogólny przymujące dowolne (lub wybrane) wartości nieujemne Bieżąca wartość semafora odpowiada liczbie wolnych zasobów; Osiągnięcie wartości 0 oznacza, że kolejny proces żądający zasobu zostanie uśpiony; Możliwe jest zmniejszenie lub zwiększenie wartości semafora o wartość inną niż 1 (o ile zmniejszenie nie doprowadziłoby do osiągnięcia wartości ujemnej). Tomasz Surmacz, Sieciowe Systemy Operacyjne, INEU 006, 2018/
43 4. Semafory Sekcja krytyczna Inne przykłady wymagające ochrony dostępu do sekcji krytycznej: modyfikacja wspólnej zmiennej w pamięci lub pliku (konto bankowe?); zapis pliku przez kilka procesów; modyfikacja rekordu w bazie danych; dostęp do urządzeń zewnętrznych (terminale, modemy, itp.); Inne przykłady synchronizacji za pomocą semaforów: Producent-konsument jeden proces produkuje dane i sygnalizuje to zwalniając semafor: drugi konsumuje je, oczekując na nie przez zajęcie semafora. Synchronizacja kilku procesów w oczekiwaniu na jedno wspólne wydarzenie Tomasz Surmacz, Sieciowe Systemy Operacyjne, INEU 006, 2018/
44 4. Semafory Problem pięciu filozofów Problem pięciu filozofów Życie filozofa to medytacje, ale to wyczerpujące zajęcie, więc filozof czasami robi się głodny; Głodny filozof udaje się do jadalni i zajmuje miejsce przy stole; Filozof je tylko wtedy, gdy ma dwa widelce; Dwóch filozofów nie może jednocześnie trzymać tego samego widelca; 5 1 Najedzony filozof wychodzi z jadalni i wraca medytować. 2 Problemy: 4 Żaden filozof nie powinien zostać zagłodzony. Nie można dopuścić do blokady. 3 Problem higieny pomijamy, jako nie wnoszący nic do rozwiązania. Tomasz Surmacz, Sieciowe Systemy Operacyjne, INEU 006, 2018/
45 4. Semafory Tworzenie semaforów Tworzenie semaforów int semget(key t key, int n sems, int semflg); Funkcja semget() tworzy nowy zbiór semaforów lub znajduje już istniejący: Jeśli klucz ma wartość IPC PRIVATE, zawsze jest tworzony nowy zbiór semaforów; Jeśli semafor o podanym kluczu już istnieje, zostaje zwrócony jego identyfikator, o ile użytkownik ma odpowiednie prawa dostępu do niego, w przeciwnym razie zwracany jest (poprzez zmienną errno) błąd ENOENT; Jeśli semafor nie istnieje, a wśród opcji semflg ustawiona była IPC CREAT, zostaje utworzony nowy semafor i zwrócony jego identyfikator; Użycie opcji IPC EXCL wymusza utworzenie nowego semafora jeżeli były ustawione obie opcje: IPC CREAT i IPC EXCL, a semafor już istniał, zostaje zwrócony błąd EEXIST. Jeśli tworzony jest nowy semafor, najmłodsze 9 bitów w opcjach oznacza prawa dostępu do tworzonego semafora, np albo #include <sys/types.h> #include <sys/ipc.h> #include <sys/sem.h> #define KEY ((key_t) 12345L) #define PERM 0600 main() { int semid; if ( (semid=semget(key, 1, PERM IPC_CREAT)) < 0) { fprintf(stderr, "Nie można utworzyć semafora\n"); exit (1); }... } Tomasz Surmacz, Sieciowe Systemy Operacyjne, INEU 006, 2018/
46 4. Semafory Usuwanie semaforów Usuwanie semaforów int semctl(int semid, int semnum, int cmd, union semun arg); union semun { int val; struct semid_ds *buf; ushort_t *array; } arg ; Funkcja semctl() pozwala usunąć semafor, ale także wykonać na nim różne operacje. Sposób działania zależy od parametru cmd, a parametr semnum określa numer semafora w grupie, którego dotyczy operacja (przy pierwszych 3 operacjach, dotyczących całej grupy, ten parametr jest nieistotny): IPC STAT umieszcza dane o semaforze (właściciel, prawa dostępu, itp.) w strukturze wskazywanej przez buf; IPC SET zmienia parametry grupy semaforów na parametry przekazane w strukturze wskazywanej przez buf. Zmienione mogą zostać: właściciel i grupa (o ile wołający proces ma uid=0 lub taki sam, jak proces, który utworzył semafor) i prawa dostępu do semafora. IPC RMID usuwa grupę semaforów z systemu. GETVAL pobiera i zwraca wartość semafora semnum; SETVAL ustawia wartość semafora semnum na wartość val unii semun przekazanej jako argument arg; Polecenia systemowe związane z semaforami: ipcrm usuwa semafor (grupę semaforów) z systemu; ipcs -s sprawdza status semafora. Tomasz Surmacz, Sieciowe Systemy Operacyjne, INEU 006, 2018/
47 4. Semafory Zajmowanie i zwalnianie semaforów Zajmowanie i zwalnianie semaforów int semop(int semid, struct sembuf *sops, size_t nsops); struct sembuf { short sem_num; /* numer semafora */ short sem_op; /* operacja na semaforze */ short sem_flg; /* opcje */ } Ogólnie: sem op < 0 zajęcie semafora sem op > 0 zwolnienie semafora sem op == 0 synchronizacja z semaforem (oczekiwanie, aż jego wartość osiągnie 0) Opcje sem flg: IPC NOWAIT Jeżeli nie można wykonać żądanej operacji, proces nie zostaje uśpiony, lecz funkcja wraca z błędem EAGAIN SEM UNDO Jeżeli semafor zostaje przydzielony, liczba, o jaką została zmniejszona jego wartość, zostaje dodana do zmiennej semadj procesu (a przy zwalnianiu semafora odjęta od tej zmiennej). Jeśli proces zostaje zakończony z niezerową wartością semadj (np. po otrzymaniu sygnału itp.), funkcja exit() spowoduje dodanie tej zmiennej do wartości semafora (czyli zwolnienie zajętych zasobów). Tomasz Surmacz, Sieciowe Systemy Operacyjne, INEU 006, 2018/
48 4. Semafory Zajęcie semafora Zajęcie semafora struct sembuf op_zajm={ 0, /* semafor nr 0 */ -1, /* zajmij == odejmij wartość N (tutaj: 1) */ 0 /* opcje */ }; int semid; semid=semget(ipc_private, 1, IPC_CREAT); if (semid==-1)... (błąd)... semop(semid, &op_zajm, 1); /* sekcja krytyczna */ Algorytm zajmowania semafora (N < 0): jeśli wartość semafora jest większa lub równa wartości bezwzględnej N, to zmniejsz ją o tyle (a jeśli użyto opcji SEM UNDO, to dodatkowo zwiększ o N zmienną semadj). jeśli nie, i nie została użyta opcja IPC NOWAIT, zwiększ licznik procesów oczekujących na semafor i zawieś proces, aż do czasu, gdy nastąpi jedno ze zdarzeń: zostanie spełniony ten warunek. Wówczas wartość semafora jest pomniejszana o N (i ew. zwiększana o N wartość semadj), zmniejszany jest licznik procesów oczekujących, a proces zostaje obudzony. semafor zostanie usunięty z systemu; proces otrzyma sygnał (funkcja zwróci błąd EINTR lub zostanie automatycznie wznowiona). jeśli nie było możliwe zajęcie semafora, ale użyto opcji IPC NOWAIT, wróć natychmiast z błędem EAGAIN. Tomasz Surmacz, Sieciowe Systemy Operacyjne, INEU 006, 2018/
49 4. Semafory Zwolnienie semafora Zwolnienie semafora struct sembuf op_tab[2]={ 0, /* semafor nr 0 */ -1, /* zajmij == odejmij wartość N (tutaj: 1) */ 0 /* opcje */ }, { 0, /* semafor nr 0 */ 1, /* zwolnij == dodaj wartość N (tutaj: 1) */ 0 /* opcje */ }; int semid; semid=semget(ipc_private, 1, IPC_CREAT); if (semid==-1)... (błąd)... semop(semid, op_tab, 1); /* sekcja krytyczna */ /*... */ semop(semid, &(op_tab[1]), 1); Algorytm zwalniania semafora przez system operacyjny (N > 0): wartość semafora zostaje zwiększona o N, jeśli ustawiona jest opcja SEM UNDO, wartość ta jest również odejmowana od zmiennej semadj procesu związanej z tym semaforem, jeśli licznik procesów oczekujących na semafor ma wartość większą od zera, zostaje obudzony pierwszy proces z kolejki. Tomasz Surmacz, Sieciowe Systemy Operacyjne, INEU 006, 2018/
50 4. Semafory Oczekiwanie na zajęcie semafora przez inny proces Oczekiwanie na zajęcie semafora przez inny proces Jeśli wartość N jest równa 0, proces oczekuje aż semafor zostanie zajęty przez inny proces: jeśli wartość semafora wynosi 0, funkcja semop() wraca natychmiast; jeśli wartość semafora jest większa od 0, ale użyto opcji IPC NOWAIT, funkcja natychmiast wraca z błędem EAGAIN; jeśli wartość semafora jest większa od 0 i nie użyto opcji IPC NOWAIT, zostaje zwiększona wartość semzcnt semafora, a proces zostaje uśpiony, do czasu, gdy: wartość semafora (semval) osiągnie zero; semafor zostanie usunięty z systemu; proces otrzyma sygnał, który ma zostać przechwycony. Wówczas wartość semzcnt jest zmniejszana i wołana procedura obsługi sygnału zarejestrowana wcześniej wywołaniem funkcji signal(). Zastosowania dla tego typu postępowania: Rozwiązanie problemu wyścigu podczas inicjowania wartości semafora. Synchronizacja z procesem żądającym dostępu do zasobu (jednoczesna operacja typu czekaj, aż osiągnie 0, a gdy się to stanie, zwolnij ). Tomasz Surmacz, Sieciowe Systemy Operacyjne, INEU 006, 2018/
51 5. Pamięć wspólna Stronicowanie pamięci Pamięć wspólna Stronicowanie pamięci Adresy wkompilowane w programy nie mogą być adresami pamięci fizycznej, bo nie byłoby możliwe współbieżne wykonywanie kilku procesów. Kompilatory generują kod operujący w wirtualnej przestrzeni adresowej (ograniczonej z góry, np. do 4GB), a tłumaczenia adresów wirtualnych na rzeczywiste dokonuje jednostka MMU procesora. System może wykonywać kilka kopii tego samego programu, operującego tymi samymi adresami pamięci wirtualnej, więc tłumaczenie adresów wirtualnych na fizyczne jest ściśle związane z kontekstem procesu. Pamięć wirtualna uzyskiwana jest przez segmentację i stronicowanie. Jednostkowym obszarem pamięci jest strona, zwykle wielkości od 8 do 32 kb (stały rozmiar zależny od systemu). obszar procesu nr strony offset 20 bit 12 bit A 7 3 F 0 1A7 tablica stron 8F RWX 8CF04000 R R-- 8DD22000 R-X... RWX 8CF1A000 RW- 8CF1B000 RW- 3F0 pamięć fizyczna 8C CF19000 strona pamięci 8CF1A000 8CF1B000 Tomasz Surmacz, Sieciowe Systemy Operacyjne, INEU 006, 2018/
52 5. Pamięć wspólna Segmentacja pamięci Segmentacja pamięci W rzeczywistości dostęp do pamięci jest trochę bardziej skomplikowany. Dostęp do pamięci fizycznej odbywa się w pierwszym rzędzie poprzez segmenty (danych, kodu, stosu), a dopiero potem strony: obszar procesu segment i nr strony offset 20 bit 12 bit A 7 3 F 0 pamięć fizyczna 8C CF19000 tablica segmentów kod kod tablica stron 8CF04000 R R CF1A000 RW- 8CF1B000 RW- 3F0 8CF1A000 dane stos stos 8F RWX 8DD22000 R-X CF1B000 R-X 8CF1B000 8FAA5000 RW- 8FAA6000 RW FAD1000 RW- Każdy segment posiada własną tablicę stron (adres tablicy i jej długość); segment reprezentuje ciągły obszar pamięci; Tomasz Surmacz, Sieciowe Systemy Operacyjne, INEU 006, 2018/
53 5. Pamięć wspólna Segmentacja pamięci przy każdym dostępie do pamięci starsza część adresu wyznacza używany segment, a jednocześnie jest porównywana z jego wielkością, w celu wykrycia dostępu poza przydzielony segment; starsza część adresu wyznacza indeks w tablicy stron segmentu i pozwala odczytać adres strony pamięci fizycznej; ostateczny adres powstaje przez zsumowanie adresu strony i offsetu. obszar procesu segment i nr strony offset 20 bit 12 bit A 7 3 F 0 pamięć fizyczna 8C CF19000 tablica segmentów kod kod tablica stron 8CF04000 R R CF1A000 RW- 8CF1B000 RW- 3F0 8CF1A000 dane stos stos 8F RWX 8DD22000 R-X CF1B000 R-X 8CF1B000 8FAA5000 RW- 8FAA6000 RW FAD1000 RW- Tomasz Surmacz, Sieciowe Systemy Operacyjne, INEU 006, 2018/
54 5. Pamięć wspólna Tworzenie segmentu pamięci wspólnej Tworzenie segmentu pamięci wspólnej int shmget(key t key, int size, int shmflg); Funkcja shmget() tworzy nowy segment pamięci wspólnej lub znajduje już istniejący: Jeśli klucz ma wartość IPC PRIVATE, tworzony jest nowy segment; Jeśli segment o podanym kluczu już istnieje, zostaje zwrócony jego identyfikator, o ile użytkownik ma odpowiednie prawa dostępu do niego, w przeciwnym razie zwracany jest (poprzez zmienną errno) błąd ENOENT; Jeśli segment pamięci wspólnej nie istnieje, a wśród opcji shmflg ustawiona była IPC CREAT, zostaje utworzony nowy blok pamięci i zwrócony jego identyfikator; Użycie opcji IPC EXCL wymusza utworzenie nowego segmentu pamięci jeżeli były ustawione obie opcje: IPC CREAT i IPC EXCL, a segment już istniał, zostaje zwrócony błąd EEXIST. Jeśli tworzony jest nowy segment pamięci, najmłodsze 9 bitów w opcjach oznacza prawa dostępu do tworzonego bloku pamięci, np albo #include <sys/types.h> #include <sys/ipc.h> #include <sys/shm.h> #define KEY ((key_t) 12345L) #define PERM 0600 #define SIZE 4096 main() { int shmid; } if ( (shmid=shmget(key, SIZE, PERM IPC_CREAT)) < 0) { fprintf(stderr, "Nie można utworzyć bloku pamięci wspólnej\n"); exit (1); }... Tomasz Surmacz, Sieciowe Systemy Operacyjne, INEU 006, 2018/
55 5. Pamięć wspólna Usuwanie pamięci wspólnej Usuwanie pamięci wspólnej int shmctl(int shmid, int cmd, struct shmid_ds *buf); Funkcja shmctl() pozwala usunąć segment pamięci wspólnej, ale także wykonać na nim różne operacje. Sposób działania zależy od parametru cmd: IPC STAT umieszcza dane o bloku pamięci (takie jak właściciel, prawa dostępu, itp.) w strukturze wskazywanej przez buf; IPC SET zmienia parametry segmentu pamięci wspólnej na parametry przekazane w strukturze wskazywanej przez buf. Zmienione mogą zostać: właściciel i grupa (o ile wołający proces ma uid==0 lub taki sam, jak proces, który utworzył segment pamięci wspólnej) i prawa dostępu do segmentu. IPC RMID usuwa segment pamięci wspólnej z systemu. SHM LOCK zablokowanie w pamięci segmentu pamięci wspólnej (operacja może być wykonana wyłącznie przez użytkownika posiadającego euid==0); SHM UNLOCK odblokowanie segmentu. Polecenia systemowe związane z pamięcią wspólną: ipcrm usuwa segment pamięci wspólnej z systemu; ipcs -m sprawdza status pamięci wspólnej w systemie. Tomasz Surmacz, Sieciowe Systemy Operacyjne, INEU 006, 2018/
56 5. Pamięć wspólna Korzystanie z pamięci wspólnej Korzystanie z pamięci wspólnej Zanim proces będzie mógł odczytać coś z pamięci wspólnej lub do niej zapisać, musi zażądać od systemu dołączenia segmentu pamięci wspólnej do własnej przestrzeni adresowej (widząc jakby przez okienko swojej pamięci segment pamięci wspólnej). Po zakończeniu korzystania z pamięci wspólnej, proces powinien odłączyć ją od swojej przestrzeni adresowej. Służą do tego odpowiednio funkcje shmat() i shmdt(). void *shmat(int shmid, const void *shmaddr, int shmflg); int shmdt(const void *shmaddr); Funkcja shmat() zwraca adres przyłączonego segmentu. Adres ten zależy od użytych parametrów shmaddr i shmflg: Jeśli shmaddr==null (czyli (void*)0), to przydzielany jest pierwszy wolny adres znaleziony przez system; Jeśli shmaddr jest niezerowy, wówczas system podłącza segment pamięci wspólnej pod podanym adresem, chyba że została użyta także opcja SHM RND, wówczas adres zostaje wyrównany w dół, do najbliższego adresu podzielnego przez SHMLBA. Użycie opcji SHM RDONLY powoduje podłączenie pamięci w trybie wyłącznie do odczytu, w przeciwnym razie dostęp jest do czytania i pisania. Funkcja shmdt() odłącza od przestrzeni adresowej procesu segment pamięci wspólnej wskazywany przez shmaddr. Tomasz Surmacz, Sieciowe Systemy Operacyjne, INEU 006, 2018/
57 5. Pamięć wspólna Zarządzanie segmentami pamięci przez system Zarządzanie segmentami pamięci przez system Przydzielanie segmentu pamięci: Nowy segment może zostać przydzielony programowi tylko w kilku wypadkach: Tworzenie nowego procesu za pomocą funkcji fork() Zwolnienie wszystkich segmentów procesu i przydział nowych w chwili wykonania exec() Przydział segmentu pamięci wspólnej za pomocą shmget() Przyłączenie przydzielonych segmentów do procesu: Nowo tworzony proces: fork(), exec() Segment pamięci wspólnej: shmat() Zmiana rozmiaru segmentu: Segmenty prywatne: automatycznie, funkcją sbrk() Segmenty wspólne: nigdy Odłączanie segmentów od procesu: Segmenty prywatne: exit() i exec() Tomasz Surmacz, Sieciowe Systemy Operacyjne, INEU 006, 2018/
58 5. Pamięć wspólna Zarządzanie segmentami pamięci przez system Segmenty wspólne: shmdt() Zwalnianie segmentów: Segmenty prywatne: dokonywane automatycznie w chwili, gdy segment przestaje być dołączony do jakiegokolwiek procesu (o ile nie był ustawiony sticky bit rwxr-xr-t). Segmenty wspólne: po wykonaniu shmctl(ipc RMID) Tomasz Surmacz, Sieciowe Systemy Operacyjne, INEU 006, 2018/
59 5. Pamięć wspólna Pamięć wspólna widziana przez 2 procesy Pamięć wspólna widziana przez 2 procesy proces 1 nr strony offset 20 bit 12 bit pamięć fizyczna 8C A 7 3 F 0 8CF18000 proces 2 nr strony offset 20 bit 12 bit E 3 F 0 1A7 tablica stron 8F RWX 8CF04000 R R-- 8DD22000 R-X CF1A000 RW- 8CF1B000 RW- 8CF E tablica stron 8F R-X CF1A000 RW- 8DC10000 RW- 8CFD4000 RW- 8CFBB000 R-- 8CFA0000 R-- 3F0 8CF1A000 8CF1B000 Tomasz Surmacz, Sieciowe Systemy Operacyjne, INEU 006, 2018/
60 5. Pamięć wspólna Wspólny dostęp do plików mmap() Wspólny dostęp do plików mmap() #include <sys/mmap.h> void *mmap(void *addr, size_t len, int prot, int flags, int fildes, off_t off); Funkcja mmap() pozwala na dostęp do otwartych plików tak, jakby znajdowały się w pamięci RAM zamiast poruszać się po pliku za pomocą fseek() i pisać/czytać przez fread() i fwrite(), można używać wskaźników i zwykłych operacji przypisania. addr preferowany adres w pamięci (jeśli NULL system przydzieli adres nie kolidujący z dotychczas przydzielonymi segmentami); len wielkość obszaru; prot jedna lub kilka opcji połączonych logicznym or : PROT READ, PROT WRITE, PROT EXEC, PROT NONE (w niektórych systemach część z kombinacji jest niedostępna, np. write+exec); flags opcje dotyczące mapowanych danych, m.in.: MAP SHARED zmiany są dokonywane wspólnie z innymi procesami; MAP PRIVATE zmiany są dokonywane na prywatnej kopii danych (pierwsza próba zapisu powoduje utworzenie kopii); fildes deskryptor otwartego uprzednio pliku (musi to być zwykły plik, a nie np. gniazdko, FIFO itp.); off przesunięcie mapowanego obszaru względem początku pliku. Inne funkcje: munmap(), msync(). Tomasz Surmacz, Sieciowe Systemy Operacyjne, INEU 006, 2018/
61 5. Pamięć wspólna Pamięć wirtualna Pamięć wirtualna W rzeczywistości dostęp do pamięci jest trochę bardziej skomplikowany. (Deja Vu to takie dziwne uczucie,...) Tablica stron może zawierać informacje o stronach, których nie ma w pamięci fizycznej; w chwili dostępu do takiej strony generowany jest wyjątek powodujący zachowanie kontekstu procesu, ew. przeniesienie do kolejki procesów oczekujących na sprowadzenie strony z pamięci swap, oraz sprowadzenie strony, po czym wznowienie procesu tak, jakby nic się nie stało; Dodatkowo tablica zawiera licznik odwołań, automatycznie zmniejszany, a służący do szukania stron, które mogą być wyrzucone do pamięci swap. obszar procesu tablica segmentów kod kod dane stos stos segment i nr strony offset 20 bit 12 bit A 7 3 F 0 tablica stron 8CF04000 R--V R CF1A000 RW-V 8CF1B000 RW-V 8FAA5000 RW-V 8FAA6000 RW-V FAD1000 RW-V F RWXV 1 8DD22000 R-XV CF1B000 R-XV F0 pamięć fizyczna 8C CF CF1A000 8CF1B000 plik wymiany swap Tomasz Surmacz, Sieciowe Systemy Operacyjne, INEU 006, 2018/
62 5. Pamięć wspólna Pełny diagram stanów procesów Pełny diagram stanów procesów przerwanie tryb użytk. powrót zombie exit() kill() uśpiony f. blokująca tryb jądra. obudzenie wywłaszcz. gotowy wywłaszcz. uśpiony/swap swap-out swap-in gotowy/swap utworzony fork() Tomasz Surmacz, Sieciowe Systemy Operacyjne, INEU 006, 2018/
63 5. Pamięć wspólna fork() jeszcze raz fork() jeszcze raz Tworzenie nowego procesu funkcją fork() wymaga skopiowania do nowego procesu segmentu danych i stosu. Tworzenie nowych segmentów, alokowanie na nie stron pamięci i skopiowanie zawartości procesu macierzystego to kosztowne operacje. Jeśli fork() jest wykonywany tylko po to, by chwilę później wykonać exec(), jest to niepotrzebnie wykonywana praca i strata czasu. Do poprawy efektywności wykonywania fork()+exec() służy uproszczona funkcja vfork(), która: Tworzy nowy proces, podobnie jak fork() Nie rozdziela segmentów danych i stosu tych procesów Wstrzymuje proces rodzica do momentu gdy proces potomny wykona którąś z funkcji exec() lub się zakończy. Proces potomny dziedziczy otwarte pliki podobnie jak w fork() ich zamykanie jest niezależne od zamykania ich w rodzicu. Proces potomny tworzony przez vfork() ma bardzo ograniczone pole działania: Może pozamykać niepotrzebne deskryptory plików Nie może modyfikować żadnych zmiennych Nie może wołać żadnych własnych funkcji ani wykonać return Nie może wołać żadnych funkcji systemowych, z wyjątkiem funkcji z rodziny exec() i funkcji exit() Tomasz Surmacz, Sieciowe Systemy Operacyjne, INEU 006, 2018/
64 6. Wątki Wątki Istnieje kilka bibliotek do tworzenia wątków, wzajemnie niekompatybilnych. Najpopularniejsze to: Solaris threads POSIX Threads (pthreads) Wątki zdefiniowane standardem POSIX są przenośne, system zapewnia wymuszanie opcji schedulera. Wątki systemu Solaris mogą być wstrzymywane i wznawiane, można w nich korzystać ze zoptymalizowanych operacji na semaforach i blokad czytania/pisania, a w systemach wieloprocesorowych mogą być uruchamiane równolegle. Podstawowe cechy wątków: Tworzenie wątków jest szybsze i tańsze niż tworzenie nowego procesu Wszystkie wątki dzielą między sobą przestrzeń adresową procesu dane i kod programu; Każdy wątek ma osobny stos i pewne atrybuty dotyczące wykonywania Wszystkie mają wspólny jeden numer procesu, rozróżniane są przez ID wątku uzyskiwany przy tworzeniu nowego wątku Synchronizacja odbywa się przez specjalne funkcje związane z wątkami, operujące na semaforach, monitorach lub zmiennych warunkowych. Nie wszystkich funkcji systemowych można używać w wątkach w bezpieczny sposób ( MT-Safe ). Tomasz Surmacz, Sieciowe Systemy Operacyjne, INEU 006, 2018/
65 6. Wątki Podstawowe funkcje pthread create() (POSIX), thr create() (Solaris) pthread exit(), thr exit() pthread join(), thr join() pthread detach(), pthread mutex init(), mutex init() pthread mutex trylock(), mutex trylock() pthread mutex lock(), mutex lock() pthread mutex unlock(), mutex unlock() pthread mutex destroy(), mutex destroy() operacje na monitorach sem init(), sem wait(), sem trywait() i inne operacje na semaforach pthread cond init(), pthread cond wait(), pthread cond timedwait(), pthread cond signal() i inne sched yield(), thr yield() Tomasz Surmacz, Sieciowe Systemy Operacyjne, INEU 006, 2018/
Sieciowe Systemy Operacyjne
Sieciowe Systemy Operacyjne INEU 006 Tomasz Surmacz tsurmacz@ict.pwr.wroc.pl c Tomasz Surmacz, Wrocław, 30 listopada 2015 Zagadnienia wstępne Zagadnienia wstępne 30h wykładu w 10 tygodni (środa 17:05-19:35,
Sieciowe Systemy Operacyjne
Sieciowe Systemy Operacyjne INES 00306 Tomasz Surmacz tsurmacz@ict.pwr.wroc.pl Niniejsza publikacja stanowi materiały do wykładu prowadzonego na Politechnice Wrocławskiej i ma charakter autorski. Rozpowszechnianie
Poniższe funkcje opisane są w 2 i 3 części pomocy systemowej.
Procesy Proces (zwany też zadaniem) jest jednostką aktywną, kontrolowaną przez system operacyjny i związaną z wykonywanym programem. Proces ma przydzielone zasoby typu pamięć (segment kodu, segment danych,
Łącza nienazwane(potoki) Łącza nienazwane mogą być używane tylko pomiędzy procesami ze sobą powiązanymi.
Przykład: $ ls more Łącza nienazwane(potoki) Łącza nienazwane mogą być używane tylko pomiędzy procesami ze sobą powiązanymi. Tworzenie łącza #include int pipe(int filedes[2]); Przykład: int
SYSTEMY OPERACYJNE I laboratorium 3 (Informatyka stacjonarne 2 rok, semestr zimowy)
Procesy i shell. Polecenia ps, sleep, exit, jobs, bg, fg, top, kill, bash, tcsh, which, type, whereis, touch. Metaznak & i >>. Dowiązania miękkie i twarde. Proces jest programem, który jest wykonywany
Pamięć współdzielona
Pamięć współdzielona Systemy Operacyjne 2 Piotr Zierhoffer 17 listopada 2011 Mechanizmy IPC IPC Inter Process Communication kolejki komunikatów, pamięć współdzielona semafory polecenia bash: ipcs, ipcrm
Komunikacja za pomocą potoków. Tomasz Borzyszkowski
Komunikacja za pomocą potoków Tomasz Borzyszkowski Wstęp Sygnały, omówione wcześniej, są użyteczne w sytuacjach błędnych lub innych wyjątkowych stanach programu, jednak nie nadają się do przekazywania
Pliki. Funkcje tworzące pliki i operujące na nich opisane są w części 2 pomocy systemowej. Tworzenie i otwieranie plików:
Pliki W celu wykonania jakiejkolwiek operacji na istniejącym pliku, plik ten musi zostać otwarty, natomiast jeśli plik jeszcze nie istnieje, to musi zostać utworzony. Plik może zostać otwarty w trybie:
Programowanie Współbieżne
Programowanie Współbieżne Tomasz Surmacz tsurmacz@ict.pwr.wroc.pl Niniejsza publikacja stanowi materiały do wykładu prowadzonego na Politechnice Wrocławskiej i ma charakter autorski. Rozpowszechnianie
Kurs systemu Unix wykład wstępny. Kurs systemu Unix 1
Kurs systemu Unix wykład wstępny Kurs systemu Unix 1 Cele wykladu Zdobycie podstawowej wiedzy o systemie i jego narzędziach. Poznanie unixowych języków skryptowych (bash, awk,...). Nauka programowania
4.2 Sposób korzystania z l acza
4.2 Sposób korzystania z l acza 31 Opis programu: Program procesu potomnego (linie 16 19) jest taki sam, jak w przyk ladzie na listingu 3. W procesie macierzystym nastepuje z kolei przekierowanie standardowego
Procesy. Systemy Operacyjne 2 laboratorium. Mateusz Hołenko. 9 października 2011
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
Łącza nienazwane(potoki)
8. Łącza nienazwane(potoki) Łącze (potok, ang. pipe) jest to urządzenie komunikacyjne pozwalające na przesyłanie informacji w jedną stronę. Jeden proces wysyła dane do łącza za pomocą funkcji write, zaś
Mechanizmy z grupy IPC
Mechanizmy z grupy IPC Podobnie jak łącza, IPC (Inter Process Communication) jest grupą mechanizmów komunikacji i synchronizacji procesów działających w ramach tego samego systemu operacyjnego. W skład
"Klasyczna" struktura systemu operacyjnego:
"Klasyczna" struktura systemu operacyjnego: Użytkownik Powłoka (shell) Programy użytkowe Programy systemowe API Jądro (kernel) Programy obsługi sprzętu (drivers) Sprzęt Funkcje systemu operacyjnego obsługa
Działanie systemu operacyjnego
Działanie systemu operacyjnego Budowa systemu komputerowego I NIC Jednostka centralna Sterownik dysku Sterownik drukarki Sterownik sieci Szyna systemowa (magistrala danych) Sterownik pamięci operacyjnej
Uniwersytet w Białymstoku Wydział Ekonomiczno-Informatyczny w Wilnie SYLLABUS na rok akademicki 2009/2010
Tryb studiów Studia stacjonarne Kierunek studiów Informatyka Poziom studiów Pierwszego stopnia Rok studiów/semestr 2(rok)/(sem) Specjalność Bez specjalności Kod katedry/zakładu w systemie USOS 10000000
Jądro Powłoka System plików Programy użytkowe
LINUX Jądro Powłoka System plików Programy użytkowe / tmp etc dev bin usr home proc bin lib ułatwienia pliki ukryte pol1;pol2 pol1 \ arg1 \ arg2 ~/.. $HOME.nazwa ls -a metaznaki *? [.] maskowanie
Działanie systemu operacyjnego
Budowa systemu komputerowego Działanie systemu operacyjnego Jednostka centralna dysku Szyna systemowa (magistrala danych) drukarki pamięci operacyjnej I NIC sieci Pamięć operacyjna Przerwania Przerwania
Instrukcja do laboratorium Systemów Operacyjnych (semestr drugi)
Instrukcja do laboratorium Systemów Operacyjnych (semestr drugi) wiczenie trzecie Temat: Potoki i ł cza nazwane w Linuksie. Opracowanie: mgr in ż. Arkadiusz Chrobot Wprowadzenie 1. Komunikacja z wykorzystaniem
Laboratorium z systemów operacyjnych. System plików - funkcje systemowe. Anna Wojak
Laboratorium z systemów operacyjnych System plików - funkcje systemowe Anna Wojak 1 Zagadnienia do samodzielnego przygotowania: podstawowe polecenia linux, podstawy programowania w jezyku C, deskryptor
Instytut Teleinformatyki
Instytut Teleinformatyki Wydział Inżynierii Elektrycznej i Komputerowej Politechnika Krakowska programowanie usług sieciowych IPC Systemu V laboratorium: 08 Kraków, 2014 08. Programowanie Usług Sieciowych
Wykład 3. Procesy i wątki. Wojciech Kwedlo, Wykład z Systemów Operacyjnych -1- Wydział Informatyki PB
Wykład 3 Procesy i wątki Wojciech Kwedlo, Wykład z Systemów Operacyjnych -1- Wydział Informatyki PB Pojęcie procesu Program = plik wykonywalny na dysku Proces = uruchomiony i wykonywany program w pamięci
Działanie systemu operacyjnego
Działanie systemu operacyjnego Budowa systemu komputerowego Jednostka centralna Sterownik dysku Sterownik drukarki Sterownik sieci Szyna systemowa (magistrala danych) Sterownik pamięci operacyjnej Pamięć
4. Procesy pojęcia podstawowe
4. Procesy pojęcia podstawowe 4.1 Czym jest proces? Proces jest czymś innym niż program. Program jest zapisem algorytmu wraz ze strukturami danych na których algorytm ten operuje. Algorytm zapisany bywa
Laboratorium Systemów Operacyjnych. Ćwiczenie 4. Operacje na plikach
Laboratorium Systemów Operacyjnych Ćwiczenie 4. Operacje na plikach Wykonanie operacji wymaga wskazania pliku, na którym operacja ma zostać wykonana. Plik w systemie LINUX identyfikowany jest przez nazwę,
Instrukcja do laboratorium Systemów Operacyjnych. (semestr drugi)
Instrukcja do laboratorium Systemów Operacyjnych (semestr drugi) Ćwiczenie trzecie (jedne zajęcia) Temat: Potoki i łącza nazwane w Linuksie. Opracowanie: dr in ż. Arkadiusz Chrobot Wprowadzenie 1. Komunikacja
System plików Linuxa. Tomasz Borzyszkowski
System plików Linuxa Tomasz Borzyszkowski Diagram blokowy jądra systemu Programy użytkowników Poziom użytkownika Poziom jądra Biblioteki Interfejs funkcji systemowych Podsystem plików Bufor Znakowe Blokowe
Systemy operacyjne. Instrukcja laboratoryjna. Ćwiczenie 1: Polecenia systemu UNIX/LINUX. Opracował: dr inż. Piotr Szpryngier
Systemy operacyjne Instrukcja laboratoryjna Ćwiczenie 1: Polecenia systemu UNIX/LINUX Opracował: dr inż. Piotr Szpryngier Olsztyn 2009 1 Wprowadzenie. Cel zajęć praktycznych. Wymagania stawiane studentom
Działanie systemu operacyjnego
Budowa systemu komputerowego Działanie systemu operacyjnego Jednostka centralna dysku Szyna systemowa (magistrala danych) drukarki pamięci operacyjnej sieci Pamięć operacyjna Przerwania Przerwania Przerwanie
Kolejki FIFO (łącza nazwane)
Kolejki FIFO (łącza nazwane) Systemy Operacyjne 2 laboratorium Mateusz Hołenko 6 listopada 2011 Plan zajęć 1 Łącza w systemie Linux kolejki FIFO vs. potoki specyfika łączy nazwanych schemat komunikacji
Znaki globalne w Linuxie
Znaki globalne w Linuxie * reprezentuje jeden lub wiele znaków (wild-card character)? reprezentuje dokładnie jeden znak (wild-card character) [abcde] reprezentuje dokładnie jeden znak z wymienionych [a-e]
Użytkownicy I. Użytkownik. Głównym celem istnienia użytkowników i grup w systemie jest utrzymanie porządku i separacja uprawnień.
Użytkownicy I Głównym celem istnienia użytkowników i grup w systemie jest utrzymanie porządku i separacja uprawnień. Użytkownik login (nazwa) UID identyfikator numeryczny przynależność do grup, w tym dokładnie
Procesy i wątki. Blok kontrolny procesu. Proces. Proces - elementy. Stan procesu
Proces Procesy i wątki Proces jest wykonywanym programem. Wykonanie procesu musi przebiegać w sposób sekwencyjny ( w dowolnej chwili na zamówienie naszego procesu może być wykonany co najwyżej jeden rozkaz
Powłoka I. Popularne implementacje. W stylu sh (powłoki zdefiniowanej w POSIX) W stylu csh. bash (najpopularniejsza) zsh ksh mksh.
Powłoka I Popularne implementacje W stylu sh (powłoki zdefiniowanej w POSIX) bash (najpopularniejsza) zsh ksh mksh W stylu csh csh tcsh 12 października 2018 1 / 16 Powłoka II Zachęta Komunikuje się z użytkownikiem
Obsługa plików. Systemy Operacyjne 2 laboratorium. Mateusz Hołenko. 25 września 2011
Obsługa plików Systemy Operacyjne 2 laboratorium Mateusz Hołenko 25 września 2011 Plan zajęć 1 Pliki w systemie Linux i-węzły deskryptory plików 2 Operacje na plikach otwieranie i zamykanie zapis i odczyt
Systemy operacyjne. Systemy operacyjne. Systemy operacyjne. Program wykładów. Strona WWW przedmiotu: Program ćwiczeń projektowych
Systemy operacyjne Systemy operacyjne Inżynieria obliczeniowa, II rok Krzysztof Wilk Katedra Informatyki Stosowanej i Modelowania wilk@agh.edu.pl Wykłady: 7 tygodni po 2 h, s. 209, B-4 Projekty: 2 godziny
Model procesu w systemie Linux. Tomasz Borzyszkowski
Model procesu w systemie Linux Tomasz Borzyszkowski Definicja procesu klasyka Definicja [M.Bach WNT95] Proces jest wykonaniem programu i składa się ze zbiorowości bajtów, które CPU interpretuje jako instrukcje
Biblioteka standardowa - operacje wejścia/wyjścia
Biblioteka standardowa - operacje wejścia/wyjścia Przemysław Gawroński D-10, p. 234 Wykład 6 15 stycznia 2019 (Wykład 6) Biblioteka standardowa - operacje wejścia/wyjścia 15 stycznia 2019 1 / 14 Outline
Systemy operacyjne III
Systemy operacyjne III WYKŁAD 2 Jan Kazimirski 1 Procesy w systemie operacyjnym 2 Proces Współczesne SO w większości są systemami wielozadaniowymi. W tym samym czasie SO obsługuje pewną liczbę zadań procesów
Obsługa plików Procesy
Obsługa plików Procesy Systemy Operacyjne 2 laboratorium Mateusz Hołenko 15 października 2011 Plan zajęć 1 Obsługa plików 1 Pliki w systemie Linux i-węzły deskryptory plików 2 Operacje na plikach 3 Operacje
IdyllaOS. Prosty, alternatywny system operacyjny. www.idyllaos.org. Autor: Grzegorz Gliński. Kontakt: milyges@gmail.com
IdyllaOS www.idyllaos.org Prosty, alternatywny system operacyjny Autor: Grzegorz Gliński Kontakt: milyges@gmail.com Co to jest IdyllaOS? IdyllaOS jest to mały, prosty, uniksopodobny, wielozadaniowy oraz
Wstęp do systemów wielozadaniowych laboratorium 02 Praca w systemie plików
Wstęp do systemów wielozadaniowych laboratorium 02 Praca w systemie plików Jarosław Piersa Wydział Matematyki i Informatyki, Uniwersytet Mikołaja Kopernika 2013-10-08 Co to jest konsola / terminal UNIX-owy?
System operacyjny UNIX system plików. mgr Michał Popławski, WFAiIS
System operacyjny UNIX system plików System plików systemu UNIX (s5fs) System plików ma strukturę drzewa. Na samym szczycie znajduje się korzeń (root), symbolicznie przedstawiany jako /. Z punktu widzenia
Proces y i y w i ąt ą ki
Procesy i wątki Proces Proces jest wykonywanym programem. Wykonanie procesu musi przebiegać w sposób sekwencyjny ( w dowolnej chwili na zamówienie naszego procesu może być wykonany co najwyżej jeden rozkaz
Temat zajęć: Tworzenie i obsługa wątków.
Temat zajęć: Tworzenie i obsługa wątków. Czas realizacji zajęć: 180 min. Zakres materiału, jaki zostanie zrealizowany podczas zajęć: Tworzenie wątków, przekazywanie parametrów do funkcji wątków i pobieranie
4. Procesy pojęcia podstawowe
4. Procesy pojęcia podstawowe 4.1 Czym jest proces? Proces jest czymś innym niż program. Program jest zapisem algorytmu wraz ze strukturami danych na których algorytm ten operuje. Algorytm zapisany bywa
Projektowanie oprogramowania systemów PROCESY I ZARZĄDZANIE PROCESAMI
Projektowanie oprogramowania systemów PROCESY I ZARZĄDZANIE PROCESAMI plan Cechy, właściwości procesów Multitasking Scheduling Fork czym jest proces? Działającą instancją programu Program jest kolekcją
Linux: System Plików
Linux: System Plików Systemy Operacyjne Mateusz Hołenko 3 marca 2013 Plan zajęć Wszystko jest plikiem Obsługa systemu plików Prawa dostępu Wyszukiwanie Mateusz Hołenko Linux: System Plików [2/24] Wszystko
SYSTEMY OPERACYJNE WYKLAD 6 - procesy
Wrocław 2007 SYSTEMY OPERACYJNE WYKLAD 6 - procesy Paweł Skrobanek C-3, pok. 323 e-mail: pawel.skrobanek@pwr.wroc.pl www.equus.wroc.pl/studia.html 1 Zasoby: PROCES wykonujący się program ; instancja programu
Od uczestników szkolenia wymagana jest umiejętność programowania w języku C oraz podstawowa znajomość obsługi systemu Linux.
Kod szkolenia: Tytuł szkolenia: PS/LINUX Programowanie systemowe w Linux Dni: 5 Opis: Adresaci szkolenia Szkolenie adresowane jest do programistów tworzących aplikacje w systemie Linux, którzy chcą poznać
Wstęp do informatyki Shell podstawy
Wstęp do informatyki Shell podstawy Podstawowe polecenia less plik(i) Przeglądaj interaktywnie zawartość plików. Można używać klawiszy kursora, PgDn, PgUp, etc. Koniec pracy (q), wyszukiwanie / Less is
Krótki kurs programowania współbieżnego (2)
Krótki kurs programowania współbieżnego (2) Procesy i sygnały w języku C (to było ostatnio) Wspólny dostęp do plików (to też) Semafory i pamięć dzielona Inne metody komunikowania Kurs systemu UNIX 1 Dzielenie
Temat zajęć: Obsługa procesów w systemie.
Temat zajęć: Obsługa procesów w systemie. Czas realizacji zajęć: 90 min. Zakres materiału, jaki zostanie zrealizowany podczas zajęć: Procesy macierzyste i potomne, tworzenie procesów potomnych, uruchamianie
SYSTEMY CZASU RZECZYWISTEGO - VxWorks
WZAJEMNE WYKLUCZANIE Wiele metod. Np. wyłączanie przerwań: funkcja() //... Int blokada = intlock(); // Obszar krytyczny, któremu nie możemy przerwać intunlock(blokada); wyłączanie wywłaszczania: funkcja()
Instrukcja do laboratorium Systemów Operacyjnych. (semestr drugi)
Instrukcja do laboratorium Systemów Operacyjnych (semestr drugi) Ćwiczenie drugie (jedne zajęcia) Temat: Procesy i sygnały w Linuksie. Opracowanie: mgr in ż. Arkadiusz Chrobot Wprowadzenie 1. Budowa procesu
Shared memory and messages. Functions. process 0. process 1. program 0. program 0. data 0. data 1. program 1. data 0. data 1.
Shared memory and messages Shared memory vs message passing Shared memory - C functions Shared memory - example program Message queues - C functions Message queues - example program process 0 process 1
Programowanie współbieżne Wykład 10 Synchronizacja dostępu do współdzielonych zasobów. Iwona Kochańska
Programowanie współbieżne Wykład 10 Synchronizacja dostępu do współdzielonych zasobów Iwona Kochańska Mechanizm synchronizacji wątków/procesów Wykorzystanie semaforów zapobiega niedozwolonemu wykonaniu
METODY I JĘZYKI PROGRAMOWANIA PROGRAMOWANIE STRUKTURALNE. Wykład 02
METODY I JĘZYKI PROGRAMOWANIA PROGRAMOWANIE STRUKTURALNE Wykład 02 NAJPROSTSZY PROGRAM /* (Prawie) najprostszy przykład programu w C */ /*==================*/ /* Między tymi znaczkami można pisać, co się
System operacyjny MACH
Emulacja w systemie MCH System operacyjny MCH 4. SD Systemu V HP/UX MS-DOS VMS inne Mikrojądro Zbigniew Suski Zbigniew Suski Podstawowe cele projektu MCH! Dostarczenie podstawy do budowy innych systemów
Wykład 3: Implementacja programów wbudowanych
Systemy wbudowane Wykład 3: Implementacja programów wbudowanych Problemy implementacji oprogramowania wbudowanego Szeregowanie zadań System operacyjny Obsługa przerwań 10/16/2010 S.Deniziak:Systemy wbudowane
Programowanie równoległe i rozproszone. Monitory i zmienne warunku. Krzysztof Banaś Programowanie równoległe i rozproszone 1
Programowanie równoległe i rozproszone Monitory i zmienne warunku Krzysztof Banaś Programowanie równoległe i rozproszone 1 Problemy współbieżności Problem producentów i konsumentów: jedna grupa procesów
2. Zarządzanie procesami
J. Ułasiewicz Komputery i systemy równoległe 1 2. Zarządzanie procesami 2.1 Funkcje zarządzania procesami Administrowanie procesami obejmuje następujące czynności: Tworzenie procesu. Testowanie atrybutów
Pracownia Komputerowa wykład II
Pracownia Komputerowa wykład II dr Magdalena Posiadała-Zezula http://www.fuw.edu.pl/~mposiada 1 Systemy operacyjne! Windows np. Windows 8.! Systemy unixowe:! Linux i Mac OS X 2 Logowanie na konta studenckie!
Systemy operacyjne. System operacyjny Linux - wstęp. Anna Wojak
Systemy operacyjne System operacyjny Linux - wstęp Anna Wojak 1 1 Wstęp Linux jest systemem z rodziny Unix. Pierwsza wersja systemu została opracowana w 1969 roku przez K.Thompsona i D.Ritchie Jest to
1. Procesy i współbieżność
1. Procesy i współbieżność Opracował: Sławomir Samolej Politechnika Rzeszowska, Katedra Informatyki i Automatyki, Rzeszów, 2013. 1.1. Wprowadzenie Proces to przestrzeń adresowa i pojedynczy wątek sterujący,
Wstęp do systemów wielozadaniowych laboratorium 03 Praca z plikami, c.d.
Wstęp do systemów wielozadaniowych laboratorium 03 Praca z plikami, c.d. Jarosław Piersa Wydział Matematyki i Informatyki, Uniwersytet Mikołaja Kopernika 2012-10-09 Kolokwium I. 2012-10-30 (wtorek), godz.
Prezentacja systemu RTLinux
Prezentacja systemu RTLinux Podstawowe założenia RTLinux jest system o twardych ograniczeniach czasowych (hard real-time). Inspiracją dla twórców RTLinux a była architektura systemu MERT. W zamierzeniach
1. Znajdź za pomocą programu locate wszystkie pliki które zawierają w nazwie słowo netscape locate netscape
FIND http://www.cs.put.poznan.pl/akobusinska/downloads/find.pdf 1. Znajdź za pomocą programu locate wszystkie pliki które zawierają w nazwie słowo netscape locate netscape 2. Ogranicz wynik polecenia 1
2. System uprawnień w linuxie
2. System uprawnień w linuxie Uprawnienia do plików: -rw-r--r-x 1 pawelza students 0 Lis 17 08:21 plik Mamy tutaj trzy grupy uprawnień: -rw - dla właściciela (owner, oznaczany też "user" reprezentowany
Uruchamianie programów w systemie Linux, potoki, strumienie, procesy, alias
7 październik 2008 Uruchomienie, monitorowanie procesu, potoki, aliasy S laj d 1 Uruchamianie programów w systemie Linux, potoki, strumienie, procesy, alias 7 październik 2008 Uruchomienie, monitorowanie
Struktura i funkcjonowanie komputera pamięć komputerowa, hierarchia pamięci pamięć podręczna. System operacyjny. Zarządzanie procesami
Rok akademicki 2015/2016, Wykład nr 6 2/21 Plan wykładu nr 6 Informatyka 1 Politechnika Białostocka - Wydział Elektryczny Elektrotechnika, semestr II, studia niestacjonarne I stopnia Rok akademicki 2015/2016
1.1 Definicja procesu
1 Procesy pojęcia podstawowe 1 1.1 Definicja procesu Proces jest czymś innym niż program. Program jest zapisem algorytmu wraz ze strukturami danych na których algorytm ten operuje. Algorytm zapisany bywa
Procesy, wątki i zasoby
Procesy, wątki i zasoby Koncepcja procesu i zasobu, Obsługa procesów i zasobów, Cykl zmian stanów procesu i kolejkowanie, Klasyfikacja zasobów, Wątki, Procesy i wątki we współczesnych systemach operacyjnych.
Warstwy systemu Windows 2000
Warstwy systemu Windows 2000 Tryb użytkownika (User Mode) Tryb jądra (Kernel Mode) Tryb użytkownika (User Mode) Zarządzanie pamięcią wirtualną Cechy charakterystyczne systemu Windows XP: system bardzo
Podstawy programowania skrót z wykładów:
Podstawy programowania skrót z wykładów: // komentarz jednowierszowy. /* */ komentarz wielowierszowy. # include dyrektywa preprocesora, załączająca biblioteki (pliki nagłówkowe). using namespace
Lekcja 10. Uprawnienia. Dołączanie plików przy pomocy funkcji include() Sprawdzanie, czy plik istnieje przy pmocy funkcji file_exists()
Paweł Gmys PHP strona 1 Lekcja 10 Uprawnienia Aby skrypt PHP mógł odwołać się do pliku, musi mieć odpowiednie uprawnienia. Szczegóły są zależne od serwera. Najczęściej chyba skrypt ma uprawnienia takie,
SYSTEMY OPERACYJNE: STRUKTURY I FUNKCJE (opracowano na podstawie skryptu PP: Królikowski Z., Sajkowski M. 1992: Użytkowanie systemu operacyjnego UNIX)
(opracowano na podstawie skryptu PP: Królikowski Z., Sajkowski M. 1992: Użytkowanie systemu operacyjnego UNIX) W informatyce występują ściśle obok siebie dwa pojęcia: sprzęt (ang. hardware) i oprogramowanie
Typy plików. Oznaczenie f -
Typy plików Oznaczenie f - d b c l p s Typ Zwykły plik Katalog Urządzenie blokowe Urządzenie znakowe Dowiązanie symboliczne Potok (pipe) do komunikacji międzyprocesowej Gniazdo (socket) do komunikacji
Programowanie proceduralne INP001210WL rok akademicki 2018/19 semestr letni. Wykład 6. Karol Tarnowski A-1 p.
Programowanie proceduralne INP001210WL rok akademicki 2018/19 semestr letni Wykład 6 Karol Tarnowski karol.tarnowski@pwr.edu.pl A-1 p. 411B Plan prezentacji Wskaźnik do pliku Dostęp do pliku: zapis, odczyt,
Temat: Dynamiczne przydzielanie i zwalnianie pamięci. Struktura listy operacje wstawiania, wyszukiwania oraz usuwania danych.
Temat: Dynamiczne przydzielanie i zwalnianie pamięci. Struktura listy operacje wstawiania, wyszukiwania oraz usuwania danych. 1. Rodzaje pamięci używanej w programach Pamięć komputera, dostępna dla programu,
Mechanizmy z grupy IPC
Mechanizmy z grupy IPC Podobnie jak łącza, IPC (Inter Process Communication) jest grupą mechanizmów komunikacji i synchronizacji procesów działających w ramach tego samego systemu operacyjnego. W skład
Ćwiczenie 4. Obsługa plików. Laboratorium Podstaw Informatyki. Kierunek Elektrotechnika. Laboratorium Podstaw Informatyki Strona 1.
Laboratorium Podstaw Informatyki Strona 1 Laboratorium Podstaw Informatyki Kierunek Elektrotechnika Ćwiczenie 4 Obsługa plików Kraków 2010 Laboratorium Podstaw Informatyki Strona 2 Obsługa plików Zanim
1 Przygotował: mgr inż. Maciej Lasota
Laboratorium nr 1 1/7 Język C Instrukcja laboratoryjna Temat: Programowanie w powłoce bash (shell scripting) 1 Przygotował: mgr inż. Maciej Lasota 1) Wprowadzenie do programowania w powłoce Skrypt powłoki
Moduł 4: Strumienie, potoki, sterowanie procesami
Moduł 4: Strumienie, potoki, sterowanie procesami Strumienie i potoki Standardowe strumienie są podstawowymi kanałami komunikacji pomiędzy komputerem a otoczeniem. Do podstawowych strumieni należą Standard
Instytut Teleinformatyki
Instytut Teleinformatyki Wydział Inżynierii Elektrycznej i Komputerowej Politechnika Krakowska programowanie usług sieciowych Dziedzina Unix laboratorium: 06 Kraków, 2014 06. Programowanie Usług Sieciowych
Procesy pojęcia podstawowe. 1.1 Jak kod źródłowy przekształca się w proces
Procesy pojęcia podstawowe 1 1.1 Jak kod źródłowy przekształca się w proces W języku wysokiego poziomu tworzy się tak zwany kod źródłowy który po zapisaniu będzie plikiem z programem źródłowym. Plik źródłowy
Procesy i wątki. Blok kontrolny procesu. Proces. Proces - elementy. Stan procesu. Blok kontrolny procesu
Proces Procesy i wątki Proces jest wykonywanym programem. Wykonanie procesu musi przebiegać w sposób sekwencyjny ( w dowolnej chwili na zamówienie naszego procesu może być wykonany co najwyżej jeden rozkaz
SYLABUS DOTYCZY CYKLU KSZTAŁCENIA realizacja w roku akademickim 2016/2017
Załącznik nr 4 do Uchwały Senatu nr 430/01/2015 SYLABUS DOTYCZY CYKLU KSZTAŁCENIA 2014-2018 realizacja w roku akademickim 2016/2017 1.1. PODSTAWOWE INFORMACJE O PRZEDMIOCIE/MODULE Nazwa przedmiotu/ modułu
Procesy. S. Samolej: Procesy
Procesy dr inż. Sławomir Samolej Katedra Informatyki i Automatyki Politechnika Rzeszowska Program przedmiotu oparto w części na materiałach opublikowanych na: http://wazniak.mimuw.edu.pl/ oraz Na materiałach
Powłoka interpreter poleceń systemu UNIX
SOE - Systemy Operacyjne Wykład 4 Powłoka interpreter poleceń systemu UNIX dr inż. Andrzej Wielgus Instytut Mikroelektroniki i Optoelektroniki WEiTI PW Powłoka Interpreter poleceń, powłoka (ang. shell)
Procesy w systemach UNIX i Linux
SOE Systemy Operacyjne Wykład 5 Procesy w systemach UNIX i Linux dr inż. Andrzej Wielgus Instytut Mikroelektroniki i Optoelektroniki WEiTI PW Procesy Proces wykonujący się program identyfikator PID Procesy
Architektura systemów informatycznych WPROWADZENIE DO SYSTEMU LINUX
Architektura systemów informatycznych WPROWADZENIE DO SYSTEMU LINUX Materiały: www.staff.amu.edu.pl/~evert/asi.php W razie nieobecności proszę o zapoznanie się z materiałem z ćwiczeń w domu Zaliczenie
Systemy Operacyjne 1 Laboratorium 3 Potoki i łącza nazwane w Linuksie (jeden tydzień) dr inż. Arkadiusz Chrobot
Systemy Operacyjne 1 Laboratorium 3 Potoki i łącza nazwane w Linuksie (jeden tydzień) dr inż. Arkadiusz Chrobot 15 października 2016 Wstęp W tej instrukcji zawarte są informacje na temat jednych z podstawowych
Bash - wprowadzenie. Bash - wprowadzenie 1/39
Bash - wprowadzenie Bash - wprowadzenie 1/39 Bash - wprowadzenie 2/39 Czym jest bash? Rysunek : Zadanie powłoki to ukrycie wywołań systemowych Bash - wprowadzenie 3/39 Czym jest bash? Przykład polecenia:
Pliki. Informacje ogólne. Obsługa plików w języku C
Pliki Informacje ogólne Plik jest pewnym zbiorem danych, zapisanym w systemie plików na nośniku danych (np. dysku twardym, pendrive, płycie DVD itp.). Może posiadać określone atrybuty, a odwołanie do niego
J. Ułasiewicz Programowanie aplikacji współbieżnych 1
J. Ułasiewicz Programowanie aplikacji współbieżnych 1 9. Komunikacja przez pamięć dzieloną Metoda komunikacji przez wspólną pamięć może być użyta gdy procesy wykonywane są na maszynie jednoprocesorowej
Stan procesu. gotowy - czeka na przydział procesora, zakończony - zakończył działanie.
Procesy i wątki Proces Proces jest wykonywanym programem. Wykonanie procesu musi przebiegać w sposób sekwencyjny ( w dowolnej chwili na zamówienie naszego procesu może być wykonany co najwyżej jeden rozkaz
Systemy Operacyjne I: Procesy
Politechnika Poznańska 4 kwietnia 2013 Materiały Prezentacja oraz inne materiały zostały przygotowane na podstawie: Użytkowanie systemu operacyjnego UNIX - dr D.Wawrzyniak Systemy operacyjne - skrypt -
Egzamin pisemny z przedmiotu: Systemy operacyjne Semestr I
Egzamin pisemny z przedmiotu: Systemy operacyjne Semestr I Uwaga: Test odnosi się do systemu operacyjnego Linux! 1) Linux jest systemem wielodostępnym, co oznacza, że: a) pozwala na logowanie się do systemu