Operációs Rendszerek II. Második előadás Első verzió: 2004/2005. I. szemeszter Ez a verzió: 2009/2010. II. szemeszter
Visszatekintés
Visszatekintés Operációs rendszer a számítógép hardver elemei és az alkalmazások közötti program, amely: biztosítja az erőforrások optimális kihasználását elfedi a hardver sajátosságokat (~virtualizáció)
Visszatekintés Operációs rendszer a számítógép hardver elemei és az alkalmazások közötti program, amely: biztosítja az erőforrások optimális kihasználását elfedi a hardver sajátosságokat (~virtualizáció) Ma szinte kizárólag multiprogramozott rendszerek kötegelt (erőforrás kihasználásra optimalizál) és időosztásos rendszerek (válaszidőkre optimalizál)
Visszatekintés Operációs rendszer a számítógép hardver elemei és az alkalmazások közötti program, amely: biztosítja az erőforrások optimális kihasználását elfedi a hardver sajátosságokat (~virtualizáció) Ma szinte kizárólag multiprogramozott rendszerek kötegelt (erőforrás kihasználásra optimalizál) és időosztásos rendszerek (válaszidőkre optimalizál) Terminológia ma kicsit más Szerverek: több, párhuzamos kérés egy időben Desktop (PC)-k: egy felhasználó, több program
Visszatekintés (folyt) Változások okai: Új hardver technológiák (SMP, RAID) Hardverek teljesítmény jellemzőinek abszolút és relatív változása Egyéb hardver sajátosságok (pl. SSD, NUMA) Felhasználási mód, funkciók Versenytársak...
Visszatekintés (folyt) Változások okai: SMP Új hardver Uniprocesszoros technológiák rendszerekben (SMP, RAID) több program Hardverek egyidejű teljesítmény futtatása látszólagos, jellemzőinek egy abszolút időpillanatban és relatív egy változása aktív program van (ez lehet oprendszer kód is). Multiprocesszoros esetben valós párhuzamosság Egyéb jelenik hardver meg, ami sajátosságok jelentősen (pl. bonyolítja SSD, a NUMA) működést. Felhasználási mód, funkciók Versenytársak...
Visszatekintés (folyt) Változások okai: Új hardver technológiák (SMP, RAID) Hardverek teljesítmény jellemzőinek abszolút és relatív változása Egyéb hardver sajátosságok (pl. SSD, NUMA) Felhasználási mód, funkciók Versenytársak...
Visszatekintés (folyt) Változások okai: Teljesítmény jellemzők Új hardver Abszolút technológiák változás (példák): (SMP, RAID) Hardverek - Hálózat teljesítmény 10Mbit/s-ről jellemzőinek 1Gbit/s-re (és abszolút tovább), és relatív - Szalagok változása (1999 DLT: 3MB/s, 2007 LTO-4: 120MB/s) Egyéb hardver sajátosságok (pl. SSD, NUMA) Felhasználási mód, funkciók Versenytársak...
Visszatekintés (folyt) Változások okai: Teljesítmény jellemzők Új hardver Abszolút technológiák változás (példák): (SMP, RAID) Hardverek - Hálózat teljesítmény 10Mbit/s-ről jellemzőinek 1Gbit/s-re (és abszolút tovább), és relatív - Szalagok változása (1999 DLT: 3MB/s, 2007 LTO-4: 120MB/s) Relatív változás (példa): Egyéb - Diszk hardver és memória sajátosságok teljesítmény, (pl. SSD, méret NUMA) és árviszonya Felhasználási miatt korábban mód, a kis funkciók memória és intenzív diszk Versenytársak... használat volt a jellemző. Ma azonban a telepített memória mennyiség nagy, a sebesség különbség jelentősen megnőtt - így a régi algoritmusok nem megfelőek...
Visszatekintés (folyt) Változások okai: Új hardver technológiák (SMP, RAID) Hardverek teljesítmény jellemzőinek abszolút és relatív változása Egyéb hardver sajátosságok (pl. SSD, NUMA) Felhasználási mód, funkciók Versenytársak...
Visszatekintés (folyt) Változások okai: Egyéb Új hardver NUMA: a technológiák hagyományos (SMP, memóriák RAID) elérési ideje Hardverek címfüggetlen, teljesítmény amit ki is jellemzőinek használunk a abszolút memória és kezelő relatív megoldásokban. változása A NUMA rendszerekben nem... Egyéb hardver sajátosságok (pl. SSD, NUMA) Felhasználási mód, funkciók Versenytársak...
Visszatekintés (folyt) Változások okai: Egyéb Új hardver NUMA: a technológiák hagyományos (SMP, memóriák RAID) elérési ideje Hardverek címfüggetlen, teljesítmény amit ki is jellemzőinek használunk a abszolút memória és kezelő relatív megoldásokban. változása A NUMA rendszerekben nem... SSD: a hagyományos diszkek esetén az átvitel Egyéb helyfüggő hardver (fejmozgások), sajátosságok amelyekkel (pl. SSD, a NUMA) különféle Felhasználási algoritmusok mód, számolnak. funkciók Az SSD-k esetében nincs Versenytársak... mozgó alkatrész...
Visszatekintés (folyt) Változások okai: Új hardver technológiák (SMP, RAID) Hardverek teljesítmény jellemzőinek abszolút és relatív változása Egyéb hardver sajátosságok (pl. SSD, NUMA) Felhasználási mód, funkciók Versenytársak...
A továbbiakban Programok és erőforrások dinamikus összerendelése folyamatok Tárgyalás időbeli fejlődést követ: Egy processzor, nincsenek szálak Több (szimmetrikus) processzor Több szál (több processzoron) Továbbiakban: Operációs rendszeri megvalósítási modellek Folyamatok és erőforrások összerendelése CPU, memória, I/O ütemezések Együttműködés, verseny, problémák
Folyamatok Mi a folyamat? Multiprogramozott operációs rendszerek egyik alapfogalma Először a Multics rendszer fejlesztői használták (60-as évek) Jelentése (egyik): a program végrehajtás alatt álló példánya
Program végrehajtása alatt álló A program futásához legalább az aktuálisan végrehajtandó utasításoknak és az általuk kezelt adatoknak a memóriában kell lennie A program futása során több-kevesebb I/O eszközt szeretne használni (írni, olvasni), ezeket az operációs rendszer szolgáltatja a programoknak Ahhoz, hogy a program valóban fusson, a fenti feltételeken (memória, I/O) túl a processzorhoz is hozzáférést kell kapjon
Folyamatok
Folyamatok
Folyamatok
Folyamatok
Folyamatok
Program végrehajtás alatt álló A folyamat leírható: Terület a központi memóriában (kód, adat, stack) Adatok és státuszinformációk a processzor regisztereiben Egyéb státuszinformációk (pl. erőforrásokkal kapcsolatos) Egy végrehajtási szál (most éppen melyik utasítást kell végrehajtani) Kiindulás (most): az operációs rendszerek folyamatok szintjén ütemeznek (de már nem ) Folyamat váltáskor a teljes folyamat környezetet meg kell őrizni ez biztosítja a folytathatóságot!
Program végrehajtás alatt álló A folyamat leírható: Terület a központi memóriában (kód, adat, stack) Adatok és státuszinformációk a processzor regisztereiben Egyéb státuszinformációk (pl. erőforrásokkal kapcsolatos) Egy végrehajtási szál (most éppen melyik utasítást kell végrehajtani) Kiindulás (most): az operációs rendszerek folyamatok szintjén ütemeznek (de már nem ) Folyamat váltáskor a teljes folyamat környezetet meg kell őrizni ez biztosítja a folytathatóságot!
Program végrehajtás alatt álló A folyamat leírható: Terület a központi memóriában (kód, adat, stack) Adatok és státuszinformációk a processzor regisztereiben Egyéb státuszinformációk (pl. erőforrásokkal kapcsolatos) Egy végrehajtási szál (most éppen melyik utasítást kell végrehajtani) Kiindulás (most): az operációs rendszerek folyamatok szintjén ütemeznek (de már nem ) Folyamat váltáskor a teljes folyamat környezetet meg kell őrizni ez biztosítja a folytathatóságot!
Folyamatok állapotai A folyamatok és a processzorok közötti (dinamikus) összerendelésről az ütemező gondoskodik, a kiválasztást különféle ütemezési algoritmusok végzik A hatékony ütemezés megvalósítása értekében bevezetjük a folyamatok állapotának fogalmát A legegyszerűbb modell szerint egy folyamatnak két állapota lehet: Fut, azaz éppen birtokolja a processzort Nem fut
Kétállapotú modell
Kétállapotú modell
Kétállapotú modell Kritika: Nem tudjuk, hogy az éppen nem futó folyamat tudna-e futni egyáltalán
Három állapotú modell
Három állapotú modell
Három állapotú modell Kritika: Nem tudjuk, a blokkolt folyamat milyen (melyik) erőforrásra vár!
Három állapotú modell bővítés
Három állapotú modell bővítés Kritika: a folyamat létrehozása és megszüntetése nem végtelenül rövid tevékenység!
Öt állapotú modell
Hét állapotú modell
Valós állapot modellek (Unix)
Folyamatok közötti váltás Okai Időszelet letelte (Aktív Futásra kész) Blokkolódás I/O miatt (Aktív Blokkolt) Egyéb (pl. prioritások miatt) Megvalósítás (process switch) Az éppen futó folyamat összes fontos adatának (környezetének) elmentése A futásra kiválasztott folyamat környezetének visszaállítása Vezérlés átadása az újonnan kiválasztott folyamatnak
Folyamatok közötti váltás Okai Időszelet letelte (Aktív Futásra kész) Blokkolódás I/O miatt (Aktív Blokkolt) Egyéb (pl. prioritások miatt) Megvalósítás (process switch) Az éppen futó folyamat összes fontos adatának (környezetének) elmentése A futásra kiválasztott folyamat környezetének visszaállítása Vezérlés átadása az újonnan kiválasztott folyamatnak
Folyamatok közötti váltás Okai Időszelet letelte (Aktív Futásra kész) Blokkolódás I/O miatt (Aktív Blokkolt) Egyéb (pl. prioritások miatt) Megvalósítás (process switch) Az éppen futó folyamat összes fontos adatának (környezetének) elmentése A futásra kiválasztott folyamat környezetének visszaállítása Vezérlés átadása az újonnan kiválasztott folyamatnak
Folyamatváltás háttere A környezet mentés és visszaállítás minden esetben kernel kódot igényel A váltás során általában a memória táblákat (virtuális memória kezelés) is módosítani kell A folyamat váltás meglehetősen sok utasítás végrehajtását (CPU ciklus) igényli, drága tevékenység!
Mód váltás Folyamat váltás során az érintett folyamat állapota megváltozik, másik folyamat lesz aktív (futó) Bizonyos esetekben nem más folyamat, hanem a kernel kell, hogy fusson (pl. IRQ) A folyamat folytatásához szükséges adatok ilyenkor is mentendők, de ez kevesebb, mint a teljes környezet (kevésbé drága tevékenység)! Célszerű folyamat váltásról és mód váltásról külön beszélni!
Kernel kód futtatása (mód váltás)
Kernel kód futtatása (mód váltás) Mód váltás - kernel módba vált - kernel által használt adatokat menti - címtér nem változik, de kernel címtér elérhető - folyamat tovább futhat, státusza nem változik Folyamat váltás - folyamat minden adatát menteni kell - címtér változik - a folyamat státusza változik, más folyamat fog futni
Folyamatok létrehozása (Win)
Végrehajtható fájl Végrehajtható fájl típus Windows.exe Win16.exe MS-DOS.exe,.com,.pif MS-DOS.bat,.cmd POSIX kód OS/2 1.x kód Végrehajtás módja Közvetlenül Ntvdm.exe program Ntvdm.exe program Cmd.Exe Posix.exe Os2.exe
Folyamatok létrehozása (Unix) Teljesen eltérő megoldás (eléggé fura) A program indítása két részből áll Aktuális folyamat duplikálása (szülő-gyerek) Az indítandó program betöltése a gyerek folyamat helyére Sokat kritizált, de a mai napig élő megoldás
Folyamat duplikálás fork() mypid = fork() If(mypid == 0) { // Child printf( %ld I m the parent\n, getpid()) } else { // parent printf( %ld I m the parent\n, getpid()) }
Folyamat duplikálás fork() mypid = fork() If(mypid == 0) { // Child printf( %ld I m the parent\n, getpid()) } else { // parent printf( %ld I m the parent\n, getpid()) } mypid = fork() if(mypid == 0){ // child } else { // parent }
Folyamat duplikálás fork() mypid = fork() If(mypid == 0) { // Child printf( %ld I m the parent\n, getpid()) } else { // parent printf( %ld I m the parent\n, getpid()) } mypid = fork() if(mypid == 0){ // child } else { // parent }
Folyamat duplikálás fork() mypid = fork() If(mypid == 0) { // Child printf( %ld I m the parent\n, getpid()) } else { // parent printf( %ld I m the parent\n, getpid()) } mypid = fork() if(mypid == 0){ // child } else { // parent }
Folyamat duplikálás fork() mypid = fork() If(mypid == 0) { // Child mypid = fork() printf( %ld I m the parent\n, getpid()) } else { // parent printf( %ld I m the parent\n, } else getpid()) { } if(mypid == 0){ // child } else { // parent } mypid = fork() if(mypid == 0){ // child // parent }
Folyamat duplikálás fork() mypid = fork() If(mypid == 0) { // Child mypid = fork() printf( %ld I m the parent\n, getpid()) } else { // parent printf( %ld I m the parent\n, } else getpid()) { } if(mypid == 0){ // child } else { // parent } mypid = fork() if(mypid == 0){ // child // parent }
Folyamat duplikálás fork() mypid = fork() If(mypid == 0) { // Child mypid = fork() printf( %ld I m the parent\n, getpid()) } else { // parent printf( %ld I m the parent\n, } else getpid()) { } if(mypid == 0){ // child } else { // parent } mypid = fork() if(mypid == 0){ // child // parent }
fork() tovább int a = 1; int b = 2; If(fork() == 0) { printf( Gy:\t%d, %d\n,a,b); a += 2; printf( Gy:\t%d, %d\n,a,b); } else { printf( Sz:\t%d, %d\n,a,b); sleep(1); printf( Sz:\t%d, %d\n,a,b); }
fork() tovább int a = 1; int b = 2; If(fork() == 0) { printf( Gy:\t%d, %d\n,a,b); a += 2; printf( Gy:\t%d, %d\n,a,b); } else { printf( Sz:\t%d, %d\n,a,b); sleep(1); printf( Sz:\t%d, %d\n,a,b); } Gy: 1,2 Sz: 1,2 Gy: 3,2 Sz: 1,2
fork() A fork() hatására a teljes folyamat címterét és az erőforrás adatokat is duplikáljuk A duplikálás után a címterek függetlenek, a változók külön élnek (a kezdőérték ua.) A fájlokat mindkét folyamatból el lehet érni (ha mindkettőből írunk, akkor a kimenet összekeveredve jelenik meg)
exec() A fork() érdekes, de hogyan indítunk új programot? Az exec() hívás az éppen futó folyamat helyére tölt be (és indít el) egy programot A pid nem változik és az erőforrás leírók is öröklődnek (pl. így működik a pipe a shellben)
Folyamat-leírók Erőforrás menedzsment megvalósításához az operációs rendszernek elegendő információval kell rendelkeznie a folyamatok és az erőforrások mindenkori állapotáról Ezt OS különböző táblázatok fenntartásával valósítja meg. Tipikus táblázatok: Memória tábla (fizikai és VM is) I/O tábla Fájl tábla Folyamat tábla
Folyamat-leírók Memória tábla (fizikai és VM is) memória folyamat összerendelés, védelmi információk, VM információk I/O tábla Processz információ Státusz Memória info (pl. puffer terület) Fájl tábla Adattartalma attól függ, hogy a fájlkezelés feladatai milyen módon oszlanak meg az OS és az alkalmazás között Folyamat tábla
Folyamat-leírók A táblázatok függenek egymástól, hivatkoznak egymásra (pl. fájl és I/O, folyamat és mindegyik). A táblázatokat inicializálni kell, meg kell határozni határértékeket. Ez történhet: konfiguráció alapján (statikus) dinamikusan
Operációs rendszer végrehajtása Az operációs rendszer is egy program, amelyet a CPU hajt végre A teljes rendszer működtetéséért az OS felel, önmagát teljesen nem menedzselheti (tyúk vagy tojás) Operációs rendszer végrehajtási modellek Nonprocess kernel Folyamat címterében futó kód Folyamat alapú kernel
Modellek Nonprocess kernel Folyamatok fogalma kernel szinten nincs Kernel teljesen szeparált, saját törvényei szerint fut Folyamat címterében végrehajtott kernel kód Mernel nem folyamat alapú, (user) folyamatok címterében fut Minden folyamat címterében elérhető (folyamatok nem látják) Folyamat alapú kernel Kernelt is folyamatokként valósítjuk meg Kliens-szerver modell többprocesszoros rendszeren is hatékony Kell egy folyamat váltási funkció, ami a folyamatok alatt fut
Kernel kód futtatása folyamat címterében
Folyamat alapú kernel
Mikrokernelek miért? Operációs rendszerek fejlődése Teljesen monolitikus kód (több millió sor) Struktúrált felépítésű, rétegelt kód Mikrokernelek Miért nem eléggé jó a struktúrált kód? Kernel módban a súlyos hibák végzetesek Kernel kódot nehéz írni A növekvő funkcionalitás miatt egyre több és több kód kell(ene)!
Hogyan is működnek az OS funkciók? Különféle kernel funkciók (pl. lapcsere memóriakezelés esetén) Döntés (politika): lap helyének kiválasztása Végrehajtás: a tényleges lapbetöltés A végrehajtás tipikusan hardver közeli, de a döntés nem igazán ha megfelelő adatok rendelkezésre állnak, a döntési rész akár kernelen kívül is futhat(na)
Mikrokernel: A kernel csak az alapfunkciókat tartalmazza, a kód többi részét felhasználói módban futó szolgáltatások valósítják meg. Erősségei: Egységes interfész Bővíthető Flexibilis Hordozható Megbízható Elosztott rendszerek támogatása OO támogatása
Tipikus mikrokernel (alap)funkciók Alacsonyszintű memória menedzsment IPC IRQ kiszolgálás I/O kezelés (alacsony szinten)
Mikrokernel
Mikrokernel: A kernel csak az alapfunkciókat tartalmazza, a kód többi részét felhasználói módban futó szolgáltatások valósítják meg. Gyenge pontok: Kernel és felhasználói mód közötti váltás erőforrás igényes (lassúság) kernelbe épített funkciók aránya Teljesen új koncepció, gyakorlatilag nulláról újra kell írni a rendszereket Az igazán elterjedt rendszerekben tisztán nem igazán lehet találkozni vele