9. Procesy, urządzenia i system plików w systemie Linux
Transkrypt
9. Procesy, urządzenia i system plików w systemie Linux
9. Procesy, urządzenia i system plików w systemie Linux 9.1. Procesy Z systemami unixowymi związane jest pojęcie procesu. W takim ujęciu, proces, rozumiany jest jako wykonywany w systemie program. Każdy proces charakteryzuje się pewnymi atrybutami: przestrzeń adresowa, licznik programu, stanu rejestrów, deskryptory plików (unikalny identyfikator pliku wykorzystywany przez system operacyjny), dane procesu, zależności rodzinne, liczniki statystyczne. Wynikiem obecności w systemie procesów jest to, że jądro systemu może nim sterować tak i może go ustawiać w kilku stanach: • Pracujący w trybie użytkownika - proces znajduje się na procesorze i wykonuje swój kod. • Pracujący w trybie jądra - jądro wykonuje wywołanie systemowe wykonane przez proces. • Uśpiony - proces czeka na jakieś zdarzenie, na przykład na odczyt danych z dysku lub otrzymanie danych z sieci. • Gotowy do wykonania - może być uruchomiony w każdej chwili, jednak nie ma jeszcze przydzielonego procesora. • Zombie - proces zakończył działanie i czeka na odebranie kodu powrotu przez proces macierzysty. Wszystkie procesy w Unixie powstają jako procesy potomne procesu głównego init o numerze 1, który tworzony przez jądro podczas uruchamiania systemu. Każdy proces może być zarówno procesem potomnym jak i procesem macierzystym innego procesu. System wykonuje każdy proces przez określony czas, następnie pobiera kolejny proces do wykonania. W tym czasie grupa procesów oczekuje na wykonanie. Sprawne działanie zapewnia szeregowanie z wywłaszczaniem oraz system priorytetów, pozwalający tak ustawić intensywnie używające procesor procesy tła, aby nie blokowały pracy procesom interakcyjnym. Podstawowym poleceniem do zarządzania procesami prze użytkownika jest: ps ps [pids] [-] [lujsvmaxScewhrnu] [txx] [O[+|-]k1[[+|-]k2...]] Opcje: l - długi format u - format użytkownika: podaje nazwę użytkownika i czas startu j - format prac: pgid sid s - format sygnału v - format vm Systemy operacyjne - Procesy, urządzenia i system plików w systemie Linux 1 m - wyświetla informację o pamięci (połącz z flagą p aby uzyskać ilość stron). f - format drzewiasty a - pokaż także procesy innych użytkowników x - pokaż procesy bez kontrolującego terminala S - dodaj czas cpu potomka i błędy stron c - nazwa komendy z task_struct e - pokaż środowisko za linią komend i ' + ' w - szerokie wyjście: nie skracaj linii komend aby mieściły się w jednej linii. Można podawać więcej niż jedno w. h - bez nagłówka r - tylko pracujące procesy n - wyjście numeryczne dla USER i WCHAN. Przykład 9.1.1 ps PID TTY TIME CMD 12369 pts/1 00:00:00 bash 17270 pts/1 00:00:00 ps Wyświetlany jest numer PID, terminal sterujący procesu, całkowity czas, w którym proces zajmował procesor, oraz komenda, za pomocą, której proces został uruchomiony. Wyświetlono jedynie te procesy, które pracują na tym samym terminalu, co użytkownik. Przykład 9.1.2 ps ax PID TTY 1 2 3 4 5 6 7 11 (...) STAT ? ? ? ? ? ? ? ? TIME COMMAND S 0:04 init [2] SW 0:19 [keventd] SW 0:00 [kapmd] SWN 0:14 [ksoftirqd_CPU0] SW 2:16 [kswapd] SW 0:00 [bdflush] SW 0:04 [kupdated] SW 2:58 [kjournald] Wyświetla wszystkie procesy pracujące w systemie. Systemy operacyjne - Procesy, urządzenia i system plików w systemie Linux 2 Przykład 9.1.3 ps f PID 19376 30005 20673 32152 15158 (...) TTY pts/17 pts/17 pts/13 pts/13 pts/15 STAT TIME COMMAND 0:00 bash 0:00 \_ ps f 0:00 bash 0:00 \_ mc 0:00 \_ bash -rcfile .bashrc S R S S S Wykorzystanie opcji f powoduje wyświetlenie drzewa procesów, uwzględniających zależność proces macierzysty - proces potomny Za pomocą polecenie pstree można wyświetlić drzewo procesów w systemie. Przykład 9.1.4 pstree init-+-MailScanner---5*[MailScanner] |-Server |-aacraid |-acpid |-arpwatch |-atd |-aveserver |-clamd |-crond |-dbus-daemon-1 |-dccm |-dovecot-+-dovecot-auth W wielu przypadkach zachodzi potrzeba usunięcia przez użytkownika procesu z systemu Unix. Użytkownik ma takie prawo w stosunku do swoich procesów natomiast użytkownik root do wszystkich. Polecenia do tego służące ma następującą składnię: kill [ -s sygnał | -p ] [ -a ] pid ... Po wydaniu polecenia kill z właściwym sygnałem, proces przerywa pracę i wykonuje kod obsługi sygnału. Część sygnałów służy do komunikowania procesu o kluczowych wydarzeniach przez jądro. W tabeli znajdują się najczęściej wykorzystywane sygnały: nazwa numer domyślna akcja SIGHUP 1 zakończenie SIGINT SIGQUIT 2 3 zakończenie zrzut core SIGILL 4 zrzut core opis Wyłączenie terminala sterującego bądź śmierć procesu kontrolującego Przerwanie z klawiatury (CTRL+C) Wyjście nakazane z klawiatury Próba wykonania nieprawidłowej instrukcji Systemy operacyjne - Procesy, urządzenia i system plików w systemie Linux 3 SIGABRT 6 zrzut core SIGKILL 9 zakończenie SIGSEGV 11 zrzut core SIGPIPE 13 zakończenie SIGALRM 14 zakończenie SIGTERM 15 zakończenie SIGCHLD 17 ignorowanie SIGCONT 18 start SIGSTOP 19 zatrzymanie Sygnał przerwania pracy procesu wywołany przez abort() Natychmiastowe usunięcie procesu; niemożliwy do złapania ani zignorowania. Nieprawidłowe odwołanie do pamięci wirtualnej Zerwany potok: pisanie do potoku, który nie posiada procesu po stronie czytania Sygnał alarmowy wywołany przez funkcję alarm() Sygnał zakończenia pracy procesu Zatrzymanie bądź wyłączenie procesu potomnego Kontynuacja zatrzymanego procesu Zatrzymanie procesu; niemożliwy do złapania ani ignorowania Przykład 9.1.5 cat /dev/zero > /dev/null & [1] 8606 kill -9 8606 jobs [1]+ Unicestwiony cat /dev/zero >/dev/null top jest programem działającym w czasie rzeczywistym, prezentującym najbardziej absorbujące procesor i pamięć procesy w systemie. Po uruchomieniu, ekran terminala wygląda następująco: 20:50:46 up 21 days, 5:22, 35 users, load average: 0,66, 0,54, 0,43 242 processes: 239 sleeping, 2 running, 1 zombie, 0 stopped CPU states: 9,3% user, 18,4% system, 0,1% nice, 72,2% idle Mem: 386248K total, 369808K used, 16440K free, 34032K buffers Swap: 457844K total, 170436K used, 287408K free, 112924K cached PID USER TIME COMMAND 9248 gin 0:00 top 1 root PRI NI 19 0 8 0 SIZE RSS SHARE STAT %CPU %MEM 1916 1916 808 772 Systemy operacyjne - Procesy, urządzenia i system plików w systemie Linux 1584 R 12,4 0.4 752 S 0,0 0.1 4 0:04 init 2 root 0:19 keventd 3 root 0:00 kapmd (...) 9 0 0 0 0 SW 0,0 0.0 9 0 0 0 0 SW 0,0 0.0 Standardowo, procesy sortowane są według zużycia procesora. Można jednak przełączyć sortowanie, naciskając jeden z klawiszy: • N - według numeru PID • A - według wieku • P - według użycia procesora • M - według użycia pamięci • T - według czasu pracy Pozostałe polecenia związane z procesami: nice, bg, fg, jobs, killall 9.2. Urządzenia i system plików w systemie Linux W systemie Linux wszystkie urządzenia są reprezentowane przez odpowiednie pliki znajdujące się w katalogu /dev. Urządzenia te dzielą się na blokowe i znakowe. Urządzenia blokowe służą do przechowywania danych i pozwalają na swobodny dostęp do nich. Urządzeniami tego typu są na przykład dyski twarde lub stacje dyskietek. Urządzenia te zachowują się podobnie jak pliki z tym, że długość plików określona jest przez ilość zapisanych w nich danych, a długość urządzenia blokowego przez jego pojemność. Wadą takiego rozwiązania jest to, że jeśli zapiszemy plik o rozmiarze 10MB do urządzenia blokowego o pojemności 100MB, to po odczytaniu tego urządzenia otrzymamy 10MB naszych danych i 90MB danych zapisanych wcześniej. Wadę tę można ominąć kodując informację o długości pliku w nim samym. Urządzenia znakowe służą do odczytu lub zapisu sekwencji znaków. Charakterystyczną cechą tych urządzeń jest to, że danych z nich nie można odczytywać w dowolnej kolejności tylko w kolejności takiej, w jakiej docierają one do komputera. Dobrym przykładem takiego urządzenia jest łącze szeregowe. Oznaczenia niektórych urządzeń z katalogu /dev: • hda - pierwszy dysk twardy (IDE/EIDE) • hda1 - pierwsza partycja na pierwszym dysku twardym • hdb - drugi dysk twardy lub CD-ROM • sda - pierwszy dysk twardy (SCSI) • sda1 - pierwsza partycja na pierwszym dysku twardym • sdb - drugi dysk twardy (SCSI) • fd0 - pierwsza stacja dysków elastycznych • fd1 - druga stacja dysków elastycznych • cua0 - COM1 • cua1 - COM2 • lp0 - LPT1 • lp1- LPT2 • tty1 - terminal 1 Systemy operacyjne - Procesy, urządzenia i system plików w systemie Linux 5 • tty2 - terminal 2 • null - urządzenie puste • kmem - pamięć operacyjna System plików System plików to metody i struktury danych używane przez system operacyjny w celu zapisania i zorganizowania plików na danym urządzeniu. System Linux obsługuje wiele różnych systemów plików, ale podstawowym systemem jest ext2. Montowanie i odmontowywanie systemu plików Aby móc używać systemu plików należy go wcześniej zamontować. Do montowania systemu plików służy polecenie mount o składni : mount -t typ urządzenie punkt_montowania gdzie : • typ – rodzaj systemu plików, np.: ext2, msdos • urządzenie – musi być urządzeniem blokowym • punkt_montowania – nazwa pliku, pod którym będzie zainstalowany dany system. Aby zamontować dyskietkę wydajemy polecenie: mount -t msdos /dev/fd0 /mnt/floppy Do odmontowania systemu plików służy polecenie umount: umount /mnt/floppy Konfiguracja systemu plików Informacje o systemach plików, które mają lub mogą być zamontowane i o ich konfiguracji zawiera plik /etc/fstab. Każdy system plików opisany jest w osobnej linii, a pola w każdej linii oddzielone są znakami spacji lub tabulatora. Przykładowy plik fstab może wyglądać następująco: /dev/hda1 /dev/hda2 /dev/hdb /dev/fd1 /dev/hda2 / /usr /mnt/cdrom /mnt/floppy none ext2 ext2 iso9660 msdos swap defaults defaults user,noauto,ro user,noauto sw 1 1 0 0 1 2 0 0 Pole pierwsze opisuje specjalne urządzenie blokowe lub zdalny system plików przeznaczony Systemy operacyjne - Procesy, urządzenia i system plików w systemie Linux 6 do zamontowania. Pole drugie wskazuje na miejsce, w którym ma być dany system plików zamontowany. Dla partycji wymiany pole to powinno zawierać wartość none. Pole trzecie opisuje typ systemu plików. Najczęściej używane systemy plików to: • ext2 – standardowy system plików dla Linuxa • msdos – system plików dla partycji MS-DOS • iso9660 – system plików używany przez stacje CD-ROM • nfs – system plików służący do montowania partycji z systemów zdalnych Pole czwarte zawiera opcje montowania danego systemu plików. Opcje podaje się jako listę oddzieloną przecinkami. Najważniejsze opcje to: • swap – partycja dysku używana jako przestrzeń wymiany • auto – oznacza, że polecenie mount -a powinno zamontować dany system plików • noauto – zabrania montowania systemu, gdy wydano opcję mount -a • user – opcja ta pozwala użytkownikowi na montowanie danego systemu plików • dev – pozwala na używanie plików urządzeń zapisanych w systemie plików • exec – zwykle wykorzystywany w systemach NFS. Opcja ta zezwala na uruchamianie plików zapisanych w danym systemie • noexec – przeciwieństwo opcji exec • ro – montuje system plików w trybie tylko do odczytu • rw – montuje system plików w trybie do odczytu i zapisu • sync – wszystkie operacje zapisu będą oczekiwać na potwierdzenie ich zakończenia przez sprzęt. Tryb ten jest wolniejszy, ale za to bezpieczniejszy • async – przeciwieństwo opcji sync • suid – pozwala na korzystanie z flag suid • nosuid – przeciwieństwo suid • defaults – włącza opcje rw, exec, auto, nouser, async, suid Pole piąte jest używane przez program dump do wykrycia, który system plików musi być odłączony. Wartość 0 oznacza, że dany system nie musi być odłączony. Pole szóste jest używane przez program fsck do określenia kolejności sprawdzania systemu plików podczas ładowania systemu. Główny system plików powinien mieć wartość 1, zaś inne systemy plików wartość 2. Wartość 0 oznacza, że dany system nie będzie sprawdzany. Inne polecenia związane z systemem plików df [-aht] urządzenie Opis: sprawdzenie ilości wolnego miejsca na dysku Opcje: -a – wyświetla informacje o każdym systemie plików -h – wyświetlane informacje są podawane w łatwych do odczytania jednostkach -t=typ – wyświetla informacje tylko o systemie danego typu fsck [-n|N|y|Y] urządzenie Opis: testowanie i naprawa systemu plików Opcje: -n|-N - odpowiada "nie" na wszystkie pytania zadane przez program -y|-Y - odpowiada "tak" na wszystkie pytania zadane przez program Systemy operacyjne - Procesy, urządzenia i system plików w systemie Linux 7 fdisk [-lv] [-s partycja] urządzenie Opis: obsługa partycji Opcje: -l – drukuje tablice partycji -v – drukuje numer wersji fdiska -s partycja – jest partycją wybranego dysku urządzenie – jest plikiem z katalogu /dev wskazującym na nasz dysk fdformat [-n] urządzenie Opis: niskopoziomowy format dyskietki Opcje: -n – wyłączenie weryfikacji sformatowanej dyskietki Zadania: 1. Zapoznaj się z urządzeniami znajdującymi się w katalogu /dev? 2. Ile plików hd* znajduje się w tym katalogu? 3. Ile partycji ma dysk hda? 4. Włóż do stacji dyskietkę/czytnika CD płytę CD i ją/go zamontuj. Nie zapomnij podać odpowiedniego systemu plików. Dyskietkę zamontuj w katalogu /mnt/floppy. Płytę CD zamontuj w katalogu /mnt/cdrom. Wejdź do tego katalogu i wylistuj jego zawartość. 5. Wyjmij dyskietkę/płytę CD (o ile się da :-)) i spróbuj ponownie wylistować zawartość katalogu /mnt/floppy. 6. Odmontuj stację dyskietek/płytę CD. 7. Zapoznaj się z zawartością pliku /etc/fstab. Jakie dyski zostały zamontowane w momencie startu systemu? Gdzie one zostały zamontowane? 8. Korzystając z informacji zawartych w pliku /etc/fstab znajdź i wyświetl zawartość partycji z systemem Windows. 9. W którym ze stanów jest bezpośrednio wykonywany proces? 10. Jaki jest stan końcowy procesu? 11. Który proces w Unixie jest procesem macierzystym wszystkich procesów i jaki jest jego PID? 12. Utwórz konto o nazwie gonzo. Niech Twój kolega/koleżanka zaloguje się na tym koncie. Jakie polecenie służy do wyświetlania wszystkich procesów użytkownika gonzo na terminalu tty2. 13. W jaki sposób usuniemy wszystkie procesy użytkownika gonzo? 14. Podaj nazwę sygnału kończącego definitywnie wykonywanie procesu. 15. Jakie informacje dostarcza program top, jaka jest różnica pomiędzy top i ps? 16. Jaka postać powinno mieć polecenie ps by przedstawiało podobny wynik jak polecenie pstree? Systemy operacyjne - Procesy, urządzenia i system plików w systemie Linux 8