Operační systém UNIX (zejména Linux) Jan Cvejn Technická univerzita v Liberci, Fakulta mechatrniky Pužitá literatura: Linux Dkumentační prjekt 1998 Cmputer Press Luděk Skčvský Principy a prblémy OS UNIX Science, 1993 Ken Thmsn, Dennis Ritchie, splečnst Bell pčátek sedmdesátých let návrh OS UNIX c nejmenší, aby se vešel na pčítače PDP Ritchie vytvřil jazyk C jak jazyk speciálně určený pr tvrbu per. systémů UNIX přepsán d C (aby byl prtabilní) Linux licenční pdmínky GPL (GNU General Public Licence) GNU Free Sftware Fundatin za distribuci prgramů GNU si lze účtvat ckliv, ale nelze nařizvat za klik je má distribuvat dál s distribucí je nutn dát i zdrjvé texty Standardy UNIX: BSD Unix V POSIX sada standardizačních dkumentů úřadu pr standardizaci IEEE LINUX pdpruje zejména BSD, něc z UNIX V a většinu POSIX
Rysy Linuxu Správa paměti Linux pracuje s virtuální pamětí zalženu na stránkvání! stránkvání na žádst pužívá i pr nahrávání brazů spustitelných subrů =mapvání subru d paměti sdílená paměť mechanismus IPC Unixu V vyrvnávací paměti pr urychlení buffery pr blkvá zařízení vyrvnávací paměť stránek při načtení stránek z disku zůstávají v tét paměti výpadky stránek jdu nejprve přes tut paměť, načítá se ze subru jen když tam není dkládací paměť dkládají se puze mdifikvané stránky hardwarvé vyrvnávací paměti TLB v prcesru předpkládají se 3 úrvně tabulky stránek každá platfrma musí zajistit překladvá makra pr průchd tabulky stránek (jádr nemusí znát frmát plžek tabulky stránek ani jejich uspřádání) Alkace stránek tzv. Buddyh algritmus: seznam free_area bsahuje blky stránek veliksti násbku 2 (vlastní ple seznamů pr různé pčty stránek v blku) stránky se alkují v blcích veliksti násbku 2 hledá se blk veliksti stejně velké jak pžadvaný, pkud není, vezme se první větší větší blk se rzdělí a zbytek se vrátí d free_area (- lze pět rzlžit na sučet mcnin 2) dealkace rekmbinuje blky d větších Virtuální paměť prcesu realizvána jak pslupnst blků vm_area_struct (celek =mm_struct), kde každý bsahuje začátek a knec dané blasti při výpadku stránky nutn vyhledat dpvídající záznam vm_area_struct vyhledání musí být velmi rychlé prt záznamy vm_area_struct ve vyváženém (AVL) strmu Taktika nahrazení =LRU (least recently used)! dkládání stránek démn (systémvý prces) kswapd! zajišťuje, aby v systému byl dstatek vlných stránek
! když je mál stránek, démn pstupně: redukuje vyrvnávací paměť stránek nejjedndušší dkládá sdílené stránky dkládá a ruší nrmální stránky přednstně stránky, které lze zrušit (nemdifikvané) démn měří věk stránek (při přístupu se čísl zvyšuje 3, při spuštění démna se všechny dekrementují) dstraňují se ty s nejnižší hdntu Prcesy základní stavy prcesu: running waiting (čeká) stpped zastaven (bvykle vydáním signálu) zmbie - mrtvý Každý prces identifikátry uživatele a skupiny uid, gid jehž jménem prces běží 2 skupiny prcesů: reálnéh času pkud nějaký takvý je připraven, je vždy spuštěn mají rt_pririty pririta prc. reál. času nrmální pririta =zárveň mnžství času, které může prces běžet každý prces má čítač, který se při přepnutí nastavuje na hdntu pririty, a pak se dekrementje s hdinami Plánvač spuští se : p převedení aktuálníh prcesu d frnty čekajících prcesů (čekání na nějaku událst) když čítač prcesu dšel d 0 z jiných míst v jádře Výběr prcesu dle hdnty čítače (u real-time cunter+1000)! tj. jestliže už nějaký prces vyptřebval nějaku část svéh kvanta, je v nevýhdě před statními prcesy se stejnu priritu! aktuální prces zařazen na knec frnty! bere se vždy první z frnty Vytvření prcesu! Nvé prcesy vznikají klnváním starých ( frk() neb clne()) bsah struktury task_struct se zkpíruje d nvé, může si pnechat i identifikátr rdič. prcesu sdílí se prstředky (subry, bsluha signálů a virtuál. paměti) kpírvání paměti až při zápisu
P spuštění existuje jediný prces init id prcesu init=1 spustí inicializační prgram (/etc/init, /bin/init neb /sbin/init ) skriptvý subr pr vytváření bnvých prcesů - /etc/inittab všechny prcesy jsu přím neb nepřím ptmky init Meziprcesní kmunikace Signály pr signalizaci asynchrnních událstí prces rzhduje, které bude přijímat a které ignruje (až na SIGSTOP a SIGKILL, které vždy) u přijímaných signálů lze definvat způsb bsluhy, neb nechat na jádru pčet mžných signálů dán velikstí slva (32 - Intel n. 64 bitů Alpha, AXP)! všem prcesům může psílat signály jen jádr a superuživatel! jinak prces může pslat signál jen prcesům se stejným uid a gid (uživatel. id, skupin. id) neb prcesům ve stejné skupině prcesů! signály - nepsílají se kamžitě, ale čekají d příštíh přidělení prcesru neb vlání jádra IPC mechanismy UNIX V přístupvá právnění k synchrnizačním bjektům pdbně jak u subrů! 3 typy: Frnty zpráv umžnují psílat zprávy, které jeden neb více prcesů může číst při čtení se kntrlují právnění a čtenář si může vzít první na řadě neb si vybrat dle typu! jestliže žádná nevyhvuje kritériiím, prces se uspí a vzbudí se při zápisu nvé správy Semafry perace testvání a nastavení vrací sučet aktuální hdnty semafru a nastavvané hdnty (kladná neb záprná) pdle výsledku perace může být prces uspán, dkud hdnta semafru není změněna jiným prcesem typicky:! před kriticku sekcí inicializace semafru (např. na 3)! za začátkem krit. sekce perace test s parametrem 1! na knci test s parametrem +1 Jestliže by byl prces uknčen neb zhavarval, dkud je v kritické sekci, prblém! vznikl by zablkvání
! prt se udžuje seznam změn semafru daným prcesem, aby se jeh stav dal bnvit Sdílená paměť přístup řízen pmcí klíčů a přístup. práv (stejně jak pr všechny IPC bjekty) pr synchrnizaci nutn pužít např. semafry blky sdílené paměti mají pčítadl přístupů uvlní se, pkud klesne na 0 lze uzamknut v paměti, aby nešl vystránkvat Časvače reálné v reálném čase, když dběhnu, prces dstane signál SIGALARM virtuální v času existence prcesu signál SIGVTALARM prfilvé když běží prces neb systém dělá něc ve jménu prcesu Spuštění prgramů pmcí tzv. příkazvých interpreterů (=shell) např. sh, bash, tcsh mají sadu vestavěných příkazů + prvádí vyknání externích prgramů hledá se v cestě dané prm. PATH spuštění příkaz. interpret vytvří svůj kln (frk()) a binární braz zamění s spuštěným prgramem zastavení Ctrl+Z pšle signál SIGSTOP, pět aktivuje shell příkaz bg pšle SIGCONT, který pět bnví běh prcesu Frmát spustitelných subrů : a.ut ELF pružný frmát jak pr exe, tak i dynamické knihvny Skriptvé subry spustitelné subry, které ptřebují interpret (např. perl, wish, tcsh) standardní knvence: první řádek bsahuje jmén interpretru ( např. #!/usr/bin/wish) spustí se tak, že skript je jak parametr 0 Rury =prpjení dvu prcesů na uživatelské úrvni např. $ ls pr lpr (pr dělí na stránky, lpr -tiskne) prpjují std. výstup prcesu se std. vstupem jinéh dčasné rury zajišťuje příkazvý interpter 2 datvé struktury file, které ukazují na stejný dčasný inde, který ukazuje na sdílenu stránku ve fyzické paměti
nutn synchrnizvat přístup - pr zajištění krdinace se pužívají signály+ zamykání LINUX umžňuje rvněž tzv. pjmenuvané rury existují v subrvém systému, vytváří se příkazem mkfif na principu FIFO na rzdíl d dčasných existují trvale Jádr Mechanismy jádra tzv. bttm-half bsluha jak DPC u WinNT frnty dlžených úlh časvače čekací frnty čekání na systém. prstředek zámky pr kritické sekce v jádře jen jeden prces, statní čekají v cyklu semafry urč. pčet prcesů, statní ve stavu Wait (na rzdíl d zámku) Ovladače zařízení chápu se jak sučást jádra mhu být nahrány a dstraněny dynamicky některé vladače lze vestavět d kódu jádra zařízení znakvá bez bufferů (např. sérivé prty) blkvá čtení puze p celých blcích (disky), náhdný přístup síťvá přístup přes rzhraní BSD každé zařízení reprezentván jak subr (např. /dev/hda = první disk) tj. stejné perace jak nrmální subry (tevření, zápis, atd.) vytvářejí se příkazem mknd síťvá zařízení vytváří Linux sám každé zařízení má hlavní čísl zařízení se steným hlavním číslem řídí jeden vladač vedlejší čísl dlišení různých zařízení řízených jedním vladačem (např. partitiny disku) signalizace dknčení perace buď genervání přerušení neb dtazvání (pling)! jádr pužívá časvač
Subrvý systém LINUX pdpruje mnh subrvých systémů nejčastěji ext2 Subrvý systém vždy v jediné hierarchické strmvé struktuře p připjení subr. systému přidá se pdstrm na určené míst (=připjvací adresář) Každý subr reprezentván jedním inde: mód c inde ppisuje (subr, FIFO, ) a přístupvá práva infrmace vlastníkvi velikst časvé značky datvé blky ukazatel na data prvních 12 přím ukazuje na blky dat 13. ukazatel na blk ukazatelů na data (2. úrveň) 14. ukaz.- na blk ukaz. na blk ukaz. na data (3.úrveň) 15. 4. úrveň smysl na kratší subry se lze dstat rychleji než na delší Buffery (vyrvnávací paměti) pr urychlený přístup k datům jestliže pčet mdifikvaných bufferů v systému přesáhne určitu hdntu, vlá se démn bdflush, který ulží na disk lze nastavit příkazem update Každý prces vlastní seznam tevřených subrů deskriptr subru dkazuje na strukturu file ppisuje tevřený subr: - režim přístupu - pzici v subru - ukazatel na inde subru (každý subr má svůj inde) - ukazatel na vektr adres rutin pr práci se subrem je jiný pr každý typ systému subrů, rury apd. Subrvý systém /prc virtuální s.s, bsahuje míst subrů infrmace aktuálních dat. strukturách jádra Struktura adresářů: dělí se na svazky (větš. dpvídají diskům subrvým systémům) rt křenvý adresář - většinu malý, bsahuje kritické subry - /bin subry pr zavedení systému - /etc knfigurační subry pr pčítač - /rt dmvský adresář superuživatele - /lib - /dev speciální subry zařízení - /tmp - /bt subry pr zavaděč (LILO)
/usr - většinu velký- sem jsu nainstalvané všechny prgramy - /usr/x11r6 - XWindws - /usr/bin téměř všechny spustitelné příkazy - /usr/man, /usr/inf, /usr/dc dkumentace - /usr/include - /usr/lib /var - pr subry, které se mění - např. /var/lg lg subry různch prgramů /var/spl pr tiskvé frnty /var/tmp /prc aktuál. infrmace jádře viz výše Subry: atributy zbrazí ls l subr např. rw-r----- - první znak : - byč. subr d adresář l nepřímý dkaz c znakvý speciální subr b blkvý speciální subr - dále tři skupiny znaků znaků (pr vlastníka subru; skupinu, d které vlastník patří; statní uživatele), kde: r.. čtení pvlen w..zápis pvlen x.. lze spustit - přistup zakázán jména subry začínající znakem. =speciální, nejsu nrmálně zbrazvány zbrazí ls a l subr Adresáře: chápu se jak speciální subry, které bsahují dkazy k jedntlivým subrům aktuální adresář - změna cd, zbrazí pwd znak. dmvský adresář implicitně nastaven jak aktuální pr každéh uživatele znak ~ nadřazený adresář úrveň výš v strmu znak.. křenvý adresář
znak / Cesta k subrům abslutní začíná znakem / relativní relativně k aktuálnímu adresáři