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

Podobne dokumenty