Operační systémy II přednášky Doc. Ing. Arnošt Veselý, CSc. KIT, 336 Út 10:30 - 11:30
[email protected] - skripta: Operační systémy II Operating Systems - dobrovolné - u zkoušky: přednášky, praktické věci ze cvičení písemná - obecné otázky, příklady - podmínkou zápočtu docházka a rozumná aktivita - 3 absence
Operační systém Unix Skládá se z: 1. jádro (kernel) - základ 2. systémové programy - programy uložené na disku v knihovnách a umožňují uživatelům základní práce v systému (kopírování v systému, psaní programů ...) Úkoly kernelu: - vytváří další procesy a řídí jejich činnost - umožňuje komunikaci mezi procesy - poskytuje prostředky pro práci s vnějšími zařízeními - vytváří souborovou strukturu na discích - sleduje svou činnost a vytváří logy a statistiky - proces – program spuštěný nad operačním systémem – spouští se startovacími skripty - multitaskingový OS – běží současně více procesů
Systémové programy - shell (interpret příkazů) - rozhraní mezi uživatelem a počítačem - (sh, bash, ksh, csh, tcsh) - bash - řádkově orientovaný (prompt $..........) - napíšeme příkaz a bash zařídí ve spolupráci s OS vykonání - vnitřní příkaz - pro bash samotný (cd) - vnější příkaz - knihovna (cp) - skript - program v jazyce shellu - ovládají se jím shelly - programy pro manipulaci se soubory a adresáři (ls, cp, rm, tar, atd.) - nacházejí se v adresářích /bin a /usr/bin - ls - list - výpis obsahu adresáře, nebo informací o souboru - cp - copy - kopírování - rm - remove - vymazání - mkdir - make directory - vytvoření adresáře - cat - cataminate? - zobrazení obsahu textového souboru - mv - move - přejmenování/přesunutí - cd - change directory - mění aktuální adresář - ps - program status - název - ls... - modifikátory - začínají pomlčkou -l - long ls -l - dlouhý výpis - parametry - ls -l /bin - dlouhý výpis adresáře /bin - manuál - příkazy jsou v 1. oddílu - napíšu „man ls“ a dozvím se něco o ls
-1-
Christy
Operační systémy II přednášky - když napíšu „man man“ dozvím se něco o manuálu
/
/bin /usr/bin /home
/novak
/programy
/bily
/data /prog1
/prog1 /prog2
- úplná cesta - začínají lomítkem /home/bily - částečná cesta - začíná obecně v jiném adresáři než v kořenovém - aktuální adresář - proměnná - příkaz cd mění aktuální adresář - jsem v novak - napíšu cat bily/prog1 - nenajde - musím udělat cd /home/bily a pak cat prog1
bily/prog1
- interface - řádkově orientovaný - shell - celoobrazovkový - podobný NC - jmenuje se Midnight Commander (MC) - grafické - X-Windows - Open Windows - ve Windows si spustím Terminal - je to emulátor shellu bash - objeví se $
Programuje se v: - řádkový editor - ed - čte příkazy z klávesnice - upravená verze pro vytváření ze skriptu - sed - čte příkazy ze skriptu - celoobrazovkový - vi - příkazový režim - vkládací režim - režim základní řádky - spustí se vi jméno souboru -> jsem v příkazovém režimu - příkaz a nebo i -> přepne do vkládacího režimu - klávesa Esc -> vrací zpět do příkazového režimu - znak : -> dostanu se do režimu základní řádky - příkaz w -> obsah souboru se zapíše do souboru na disku - příkaz q -> ukončí se - příkaz q! -> ukončí se i bez zapsání (w) - zpět opět Esc - okenní - editor Windows program - soubor na disku - magic number - header - text of program - inicializovaná data proces - spuštěný program - zásobník - mění se velikost, ostatní jsou neměnné - neinicializovaná data - inicializovaná data - text - v neinicial. a inicial. jsou globální proměnné
- kompilátor - cc - příkaz cc mycat.c - výsledek bude v souboru a.out - cc -o mycat mycat.c -> výstup bude v mycat - cc -lm -o mycat mycat.c -> bude také prohledávána knihovna libm.a - vi mycat.c -> editace - !c -> odkaz v historii na poslední příkaz který začínal na „c“ (tzn. spustí řádek cc -lm -o mycat...) - při překladu se děje toto:
-2-
Christy
Operační systémy II přednášky
SOURCE PROGRAM
/usr/include
preprocesor (cc) READY FOR COMPILATION
libm.a
kompilátor (cc) RELATIVNÍ MODUL
libc.a /usr/lib
leader (ld) SPUSTITELNÝ MODUL - username - uživatelské jméno /etc/passwd - UID - identifikační číslo uživatele - groups - skupiny uživatelů /etc/groups - Berkley - každý uživatel mohl být současně ve více skupinách, max. v 16-ti - SYSTEM V - jen v jedné skupině, ale může jí změnit - obsah /etc/passwd novak: 123.... : 100:10:Student:home/novak:/bin/bash username:zakódované heslo:UID:GID:poznámka:domácí adresář:login shell (shell, který se spustí po spuštění systému) - heslo -> zašifrováno -> šifra (zobrazuje se na místě „zakódované heslo“) - porovnávají se šifry - když není na místě hesla uvedeno nic, je možné vstoupit bez hesla - program passwd mění hesla - /etc/shadow - v modernějších unixech - místo šifry se zobrazuje pouze x Ochrana adresářů a souborů - přístupovými právy - každý soubor a adresář má svého individuálního a skupinového vlastníka - r - read - w - write - x - execute files directories r číst číst obsah w psát vytvářet a rušit soubory x spustit vstoupit do adresáře - vstoupit do adresáře: cat /home/novak/adr1/soub1 x r -> protože ard1 nemá právo x, uživatel nemůže projít na soub1 práva se přidělují: - přidělují se nezávisle individuální vlastník r-w-x r---x
skupinový vlastník r-w-x -----
ostatní r-w-x r----
soub
- ind. - novak - skup. - student -> připojí se dvorak - student a chce si přečíst soub soub má práva r-w-x --w-x -----> první práva se neberou v potaz -> druhá práva jsou rozhodující, protože jsou ve stejné skupině -> chybí právo čtení a proto ho nemůže otevřít -> když se připojí bily - delnici a poslední práva by byla r-w-x, tak on by to mohl číst, ale dvorak ne r-w-x --w-x -----3-
Christy
Operační systémy II přednášky 111 7
011 3
000 0
chmod 730 soub - přímá změna oprávnění ls -l soub - prohlídnu si nastavená oprávnění superuživatel - obvykle root - UID=0 - má všechny práva k souborům a adresářům
USER RUNNING 1. interupt
return
2. sleep
ASLEEP
4.
KERNEL RUNNING
preemption
reschedule
3.
wakeup
READY TO RUN
1. spustíme program -> user running - běh v uživatelském módu 2. kernel runnig - běh v módu jádra 4. zablokován 3. připraven k běhu 1. -> 2. - vnitřní nebo vnější přerušení - generované instrukcí, nebo dojde k chybě 2. -> 4. - když procesu chybí zdroj pro jeho úspěšné pokračování (např. data z disku), nebo proces požádá o zablokování 2. -> 3. - preempce - proces přerušen interaktem od hodin 4. -> 3. wakeup - probuzení 3. -> scheduler rozhoduje o tom který proces bude spuštěn a kdy Př.: RETURN FROM INTERRUPT
PROCESS A
INTERRUPT
run in user mode INTERRUPT HANDLER
run in kernel mode
běží proces A - můj program - je v něm napsáno „open“ (funkce open je v knihovně) - je v ní napsána instrukce vnitřního interruptu -> generuje se vnitřní interrupt -> skočí se do OS - začne běžet interrupt handler (ošetření vnitřního interruptu) - pokud proces běží v módu jádra nemůže být po preempci přerušen informace o běžících procesech je uložena v - tabulce procesů - každý proces má vyhrazenu jednu řádku - jsou zde jen běžící procesy
-4-
Christy
Operační systémy II přednášky - pointer na disk, kde leží user area - když se proces rozběhne je nahrán do paměti - sloupce: - identifikace procesu (číslo) - PID - vlastník individiální - UID - vlastník skupinový - GID - stav procesu - 32bitové pole - zaznamenávají se tam signály, které byly procesu zaslány - čítače pro výpočet priority - spotřeba procesorového času, obsazení paměti - kde je v paměti umístěn - odkaz na tabulku stránek - user area - jsou zde i neběžící procesy - parametry přenosu z periférií 32 signálů - procesy si je mezi sebou mohou posílat prostřednictvím OS Kontext procesu - přepínání kontextu - operační systém přepne proces - uživatelský - text, data, zásobník, obsah uživatelských registrů - systémový - informace o procesu uloženém v tabulce stránek, informace o uživatelské oblasti, obsah systémových registrů, systémový zásobník, obsah tabulky stránek
MAIN MEMORY DISK u-area in memory process table
u-area of process A process A
kernel processes text data stack
process A
Vi editor a (append) příkazový mód
zadávání dat
příkazová řádka Zápis :w :d :wy :w a c :2! : set number : gt nonumber - vnější interupty se vykonávají v kontextu běžícího procesu
C A
B
open() 1000 bajtů read() DMA vnější přerušení přepnutí kontextu se neprovede
zablokoval
-5-
Christy
Operační systémy II přednášky fork() - systémová služba - vznikne nový proces -> PID = 0 (swapper) fork() -> PID = 1 (init) -> PID = 2 ..... Př.: OS vytvoří kopii procesu, nově vzniklý proces bude mít stejný kontext, jako ten předchozí, bude mít ale jiné PID, návratová hodnota rodiče je dětské PID, návratová hodnota v dětském procese je 0 main() { int r; if((r=fork()) == 0) printf(„I am child“); else printf(„I am parent“); }
PARENT PROCESS PID = 100
CHILD PROCESS PID = 101
SYSTEM CALLS fork()
NEW PROCESS IS CREATED
REQUALS 101 PRINT I am parent END OF PROCESS REQUALS PRINT I am child END OF PROCESS
Př.: main () { if (fork() == 0) pause(); fork(); pause(); }
- fork spustí nový proces - je zablokován - hlavní proces běží dál a spustí další proces - oba jsou zablokovány - výsledek jsou tři zablokované procesy v paměti execve() - mění text procesu execl() - mění text procesu Př.: #include <stdio.h> main() { if (fork () == 0) execl(„/bin/date“, „date“, NULL); wait(NULL); printf(„child process finished\n“);
/*child*/ /*parent*/
-6-
Christy
Operační systémy II přednášky }
Signály - je jich 32 - procesy si je můžou posílat prostřednictvím OS - kill() - posílá signál - signal() - ošetřit (zachytit) signál - kill[-signal]PID... - kill -9 PID
- hranaté závorky znamenají, že to co v nich je tam být může, ale nemusí
- zapíše se do tabulky procesů, že byl signál zaslán - proces, pokud byl zablokován, tak je OS odblokován - pošle se signál, proces je probuzen a když začne být zpracováván tak záleží na tom zda je ošetřen když jo tak se vykonává co se má udělat, pokud není ošetřený tak většinou skončí
>abcd 1. interpretuje speciální znaky 2. přezdívka, funkce 3. vnitřní příkaz shellu >cd 4. podle nastavení cest začne hledat soubor abcd 1. spuštění na popředí spuštění na pozadí
& Pozadí
Popředí fork()
fork()
wait() EXECVE ("abcd",...)
>
>
EXECVE() wait()
>
find / -name ls - print & - find běží na pozadí a my můžeme pracovat 2>chyba >vysledky & - výsledky do souboru 2>/dev/null & /dev ls -al /dev počet hardlinků - vlastníci název souboru brw-rw-rw- 1 root floppy 2,0 datum fd0H1440 typ souboru hlavní, vedlejší číslo b nebo c hlavní - ovladač blokové nebo znakové vedlejší - identifikace zařízení swapper (dlouhodobý plánovač) 0 1 init 2 page daemon (stránkování - uvolňování stránek) ... /etc/inittab - pozměňujeme funkce burn shellu vc:2345:write:/etc/rc.d/rc.2 net:345:wait:/etc/rc.d/rc.net 0 1 2-5 6
zastavení systému jednouživatelský režim multiuser restart
-7-
Christy
Operační systémy II přednášky c1:2345:respon:/sbin/getty
9600
soubor open() = d read (d, kam, počet bytů) = n ukazovátko lseek() - čtení ze souboru n=write(d, odkud, počet) close (d)
tty1 d ... descriptor (malé celé číslo 0, 1, 2,...)
Unix filesystem - soubory jsou organizovány pomocí adresářů do stromové struktury - soubory a adresáře jsou organizovány do systému souborů
/
etc
re.d
vmunix
group
bin
lib
dev
passwd
Typy souborů: normální soubory adresáře řídící soubory řídíc soubory linkové soubory
d b c l
Struktura systému souborů: Boothblock Directory
Superblock
i-node area 2 2 vmunix
70
bin
105
dev
85
lib
120
Data
Suberblock - obsahuje informace o fylesystemu: - velikost filesystemu - velikost i-uzlů - počet volných bloků - počet volných i-uzlů -8-
Christy
Operační systémy II přednášky - seznam volných bloků - seznam volných i-uzlů block (cluster) - umístění dat na disku - 512 B PROCESS file, byte FILE MANAGER file, byte -> fylesystem, block number filesystem, block number DISC HANDLER filesystem, block number -> disc, cylindr, surgace, sector disc, cylindr, surgace, sector DISC MODULE
12
11
10
9
8
7
6
5
4
3
2
1
0 ┴
0 : : : 127 0 : : : 127 0 : : : 127 0 : : : 127
0 : : : 127 0 : : : 127 0 : : : 127 0 : : : 127 0 : : : 127 0 : : : 127 0 : : : 127
-9-
Christy
Operační systémy II přednášky 5kB + 128 x 512B + 128 x 128 x 512B + 128 x 128 x 128 x 512B = 1 GB - předpokládá se že se používají převážně malé soubory - přístup k těmto malým souborům je rychlý - čím větší soubor, tím pomalejší, protože musím víckrát číst z disku (každých 128B je čtení navíc) Hard link - odkaz z adresáře na i-uzel - příkaz ln - vytvoří link rm - smaže link mv - přejmenovává a přesouvá linky - není možné dělat hard linky - z jednoho systému souborů do druhého - na adresáře - došlo by k cyklení Soft link - soubory typu l - zvláštní soubor (s vlastním i-uzlem) - obsahem je cesta k nějakému souboru na který odkazuje - takto lze dělat odkazy z jednoho systému souborů na druhý - příkaz ln -s /etc/passwd hesla - vytvoří soft link Přístupová práva r čtení w zapisování x spuštění UID ... reálný individuální vlastník GID ... reálný skupinový vlastník EUID ... efektivní individuální vlastník EGID ... efektivní skupinový vlastník na začátku:
EUID = UID EGID = GID
EUID == 0
no
yes EUID == UIDO
superuser
no
yes
yes
Bit set?
EUID == GIDO no
yes yes
no
Bit set? no
yes
Bit set? no
acess allowed
acess denied
- změna EIUD (EGID), pokud se spustí soubor s nasteveným s-bitem (uživatele, skupiny) - v tom případě EUID = UID vlastníka spuštěného souboru (EGID = GID spuštěného souboru) Změna hesla /bin/passwd
- 10 -
Christy
Operační systémy II přednášky /etc/passwd /etc/shadow - pokud je spuštěn soubor s nastaveným t-bitem, tak pokud končí, tak se zachovává část informace (tabulka stránek) -> při opětném spuštění je spuštění rychlejší Nastavení přístupových práv: sstrwxrwxrwx 100111101101 4 7 5 5 s - user s-bit s - group s-bit t - t-bit systémové volání: chmod ("/home/novak/prog",04755) Chybí přednáška 22.11., 29.11. a 6.12.
- 11 -
Christy