Doc. Ing. Aršt Veselý, CSc. KIT, 336 Út 13-113 vesely@pef.czu.cz - skripta Operační systémy II Operating Systems - dobrovolné - u zkouš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 činst - 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 činst 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řejmevá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
- když napíšu man man dozvím se něco o manuálu / /bin /usr/bin /home /vak /programy /prog1 /prog2 /data /bily /prog1 - úplná cesta - začínají lomítkem /home/bily - částečná cesta - začíná obecně v jiném adresáři než v kořevém bily/prog1 - aktuální adresář - proměnná - příkaz cd mění aktuální adresář - jsem v vak - napíšu cat bily/prog1 - nenajde - musím udělat cd /home/bily a pak cat 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é 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
SOURCE PROGRAM /usr/include preprocesor (cc) READY FOR COMPILATION kompilátor (cc) RELATIVNÍ MODUL libm.a libc.a /usr/lib leader (ld) SPUSTITELNÝ MODUL - username - uživatelské jmé /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 vak 123... 11Studenthome/vak/bin/bash usernamezakódované heslouidgidpoznámkadomácí adresářlogin shell (shell, který se spustí po spuštění systému) - heslo -> zašifrová -> šifra (zobrazuje se na místě zakódované heslo ) - porovnávají se šifry - když není na místě hesla uvede 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 skupivé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/vak/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 skupivý vlastník ostatní r-w-x r-w-x r-w-x r---x ----- r---- soub - ind. - vak - 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
111 11 7 3 chmod 73 soub - přímá změna oprávnění ls -l soub - prohlídnu si nastavená oprávnění superuživatel - obvykle root - UID= - má všechny práva k souborům a adresářům USER RUNNING 1. interupt return 2. KERNEL RUNNING sleep preemption reschedule ASLEEP 4. wakeup 3. 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á 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
- 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 skupivý - 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řesu 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 process table MAIN MEMORY u-area in memory process A DISK u-area of 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 number - vnější interupty se vykonávají v kontextu běžícího procesu A B C zablokoval open() 1 bajtů read() DMA vnější přerušení přepnutí kontextu se neprovede - 5 - Christy
fork() - systémová služba - vznikne vý proces -> PID = (swapper) fork() -> PID = 1 (init) -> PID = 2... Operační systémy II Př. OS vytvoří kopii procesu, vě vzniklý proces bude mít stejný kontext, jako ten předchozí, bude mít ale jiné PID, návratová hodta rodiče je dětské PID, návratová hodta v dětském procese je main() { } int r; if((r=fork()) == ) printf( I am child ); else printf( I am parent ); SYSTEM CALLS fork() PARENT PROCESS PID = 1 CHILD PROCESS PID = 11 NEW PROCESS IS CREATED REQUALS 11 PRINT I am parent END OF PROCESS REQUALS PRINT I am child END OF PROCESS Př. main () { if (fork() == ) pause(); fork(); pause(); } - fork spustí vý 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 () == ) execl( /bin/date, date, NULL); wait(null); printf( child process finished\n ); /*child*/ /*parent*/ - 6 - Christy
} 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... - hranaté závorky znamenají, že to co v nich je tam být může, ale nemusí - kill -9 PID - 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šiu 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í & Popředí Pozadí wait() fork() EXECVE ("abcd",...) > fork() wait() EXECVE() > > 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, datum fdh144 typ souboru hlavní, vedlejší číslo b nebo c hlavní - ovladač blokové nebo znakové vedlejší - identifikace zařízení swapper (dlouhodobý plávač) 1 init 2 page daemon (stránkování - uvolňování stránek)... /etc/inittab - pozměňujeme funkce burn shellu vc2345write/etc/rc.d/rc.2 net345wait/etc/rc.d/rc.net zastavení systému 1 jeduživatelský režim 2-5 multiuser 6 restart - 7 - Christy
c12345respon/sbin/getty 96 tty1 Operační systémy II soubor open() = d d... descriptor (malé celé číslo, 1, 2,...) read (d, kam, počet bytů) = n ukazovátko lseek() - čtení ze souboru n=write(d, odkud, počet) close (d) Unix filesystem - soubory jsou organizovány pomocí adresářů do stromové struktury - soubory a adresáře jsou organizovány do systému souborů / etc vmunix bin lib dev re.d group passwd Typy souborů rmální soubory - adresáře d řídící soubory b řídíc soubory c linkové soubory l Struktura systému souborů Directory 2 2 vmunix 7 bin 15 dev 85 lib 12 Boothblock Superblock i-de area Data Suberblock - obsahuje informace o fylesystemu - velikost filesystemu - velikost i-uzlů - počet volných bloků - počet volných i-uzlů - 8 - Christy
- 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 1 9 8 7 6 5 4 3 2 1-9 - Christy
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řejmevává a přesouvá linky - není možné dělat hard linky - z jedho 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 jedho 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ý skupivý vlastník EUID... efektivní individuální vlastník EGID... efektivní skupivý vlastník na začátku EUID = UID EGID = GID EUID == superuser EUID == UIDO Bit set? EUID == GIDO Bit set? Bit set? 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 - 1 - Christy
/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 s s t r w x r w x r w x 1 1 1 1 1 1 1 1 4 7 5 5 s - user s-bit s - group s-bit t - t-bit systémové volání chmod ("/home/vak/prog",4755) Chybí přednáška 22.11., 29.11. a 6.12. - 11 - Christy