Operációs rendszerek MINB240
Ismétlés
1. előadás Processzusok 1
2
Alapvető hardware komponensek
Alapvető hardware komponensek
Diszk CPU
Diszk
• CPU
Nyomtató
– Végrehajtja az utasításokat – Betölt adatot a memóriából a rendszer buszon keresztül
Nyomtató kezelő
Diszk kezelő
• Eszköz kezelő (Device controller) Rendszer busz
Memória kezelő (Controller)
– – – –
Az eszköz működését ellenőrzi CPU-val párhuzamosan működik Szintén tud betölteni, tárolni a memóriában Regiszterei vagy memóriaként vagy port-ként elérhetők a CPU számára – Megszakításokat adhat a CPU-nak
Memória 3
4
Egyszerű CPU modell
Egyszerű CPU modell • Stack mutató (Stack pointer): SP • Utasítás mutató (Instruction pointer): IP • Státusz regiszter
Fetch-execute ciklus
– Zérus érték – Túlcsordulás, stb Kezdés
Következő utasítás betöltése
Utasítás végrehajtása
• Általános regiszterek
Vége
– Utasítás paraméterei – Minimalizálja a memória elérést 5
Egyszerű CPU modell •
Egyszerű CPU modell PC: Program counter (ahonnan az utasítást be kell tölteni)
Fetch-execute ciklus 1. 2. 3. 4.
6
IP által mutatott helyről az utasítás betöltése Az utasítás végrehajtása IP értékének növelése Ismétlés az 1. lépéstől
IR: Instruction register (a végrehajtandó utasítás)
7
8
Privilegizált mód
Biztonságos regiszterek és utasítások
• Az operációs rendszer védelmének érdekében kettő vagy több CPU működési mód létezik
• Biztonságos akkor, ha:
– Privilegizált (rendszer vagy kernel) mód • Minden utasítás és regiszter elérhető
– Felhasználói mód • Csak „biztonságos” utasítások és regiszterek használhatók
– Csak az alkalmazás állapotát befolyásolja – Nem tud más alkalmazást befolyásolni vagy nem tudja az operációs rendszert befolyásolni – Az operációs rendszer által megadott működési módot (policy) nem tudja áthágni
9
Privilegizált mód
I/O és megszakítások
• Memória hozzáférés is korlátozott 0xFFFFFFFF Kernel mód 0x80000000
0x00000000
10
• I/O események meghatározhatatlan időben történnek (billentyűzet, egér, hálózati kapcsolat, stb) • Honnan tudja a CPU, hogy egy I/O kérést kell kiszolgálni?
Kernel és felhasználói mód
11
12
Megszakítás
Megszakítási modell
• Interrupt • A normál végrehajtási folyamat megszakítása • Egy folyamat felfüggesztése, a folyamathoz képesti külső esemény hatására, olyan módon hogy a folyamathoz vissza lehet térni
Megszakítás letiltva
Kezdés
Következő utasítás betöltése
Utasítás végrehajtása
Megszakítás engedélyezve
Megszakítás ellenőrzése; Feldolgozása
Vége 13
14
Megszakítás kezelő
Megszakítás kezelő
• Egy szoftver mely meghatározza a megszakítás típusát és végrehajtja a szükséges lépéseket • A hardver adja át a vezérlést!! • A megszakítás kezelő az operációs rendszer része
Felhasználói mód
alkalmazás
megszakítás kezelő Kernel mód
15
16
Szekvenciális megszakítások
Egymásba ágyazott megszakítások Felhasználói mód
Felhasználói mód
Kernel mód
Kernel mód
17
18
Megszakítások • A rendszer letiltja a megszakításokat, ha már belépett egy megszakításba • Így a folyamatot a CPU be tudja fejezni • Közbenső megszakítások tárolódnak
Bevezetés
19
20
Operációs rendszer
Operációs rendszer célja • Kényelem
• Egy program mely ellenőrzi az alkalmazások futását
– A számítógép használata kényelmesebb legyen
• Absztrakció
– Erőforrás manager
• Egy interface a hardver és az alkalmazások között – A kiterjesztett gép/virtuális gép
– Hardver független programozás
• Hatékonyság – Lehetővé teszi hogy a számítógépet hatékonyan használjuk
• Fejlődő képes – Lehetővé teszi a fejlesztést
• Védelem 21
„Számítógép szerkezete”
22
„Számítógép szerkezete”
Felhasználói mód
Felhasználói mód
Alkalmazás
Alkalmazás
Alkalmazás
Alkalmazás
Alkalmazás
Alkalmazás
Rendszer könyvtár
Rendszer könyvtár
Rendszer könyvtár
Rendszer könyvtár
Rendszer könyvtár
Rendszer könyvtár
Operációs rendszer
Operációs rendszer CPU és eszköz Hardware
Hardware Kernel mód
Kernel mód 23
regiszterek, portok betöltésével és kiolvasásával, megszakításokkal kommunikálnak
24
„Számítógép szerkezete”
„Számítógép szerkezete”
Felhasználói mód
Felhasználói mód Alkalmazás
Alkalmazás
Könyvtár (library) függvények hívásával kommunikálnak
Rendszer könyvtár
Rendszer könyvtár
Operációs rendszer
Rendszer hívások (system call)
Operációs rendszer
Hardware
Hardware
Kernel mód
Kernel mód 25
Operációs rendszer szoftver
26
Kernel
• Alapvetően egy hagyományos számítógépes szoftver – Egy program amit végre kell hajtani – Több jogosultsága van
• Az operációs rendszer feladja a CPU ellenőrzését, hogy más program futhasson
• Az operációs rendszer azon része, mely privilegizált módban fut • A memóriában helyezkedik el • Alapvető és leggyakrabban használt funkcionalitást implementál
– Visszakapja a kontrolt • Rendszer hívásokkal (system call) • Megszakításokkal (interrupt) 27
28
Operációs rendszer koncepciók • • • • •
Processzusok, egyszerűen
Processzusok Ütemezés, holtpont Memória kezelés Fájlrendszerek Bevitel-Kivitel
• A végrehajtás alatt álló program • Három részből áll
Verem
– Kód szegmens Hézag
• A végrehajtható utasítások
– Adat szegmens • Globális változók
Adat
– Verem (stack) • Lokális változók • Hívási lista
Kód
29
30
Függvényhívás
Függvényhívás
void f3(int a3) { printf(”%d”,a3); }
void f3(int a3) { printf(”%d”,a3); }
void f2(int a2) { f3(a2); a2 = (a2+1); }
void f2(int a2) { f3(a2); a2 = (a2+1); }
SP
void f1() { int a1 = 1; int b1; b1 = f2(a1); }
a1 b1
1 akármi
SP
void f1() { int a1 = 1; int b1; b1 = f2(a1); } 31
32
Függvényhívás a1
void f3(int a3) { printf(”%d”,a3); } void f2(int a2) { f3(a2); a2 = (a2+1); }
b1
Függvényhívás
1 akármi visszatérési cím 1 (argumentum)
a1
void f3(int a3) { printf(”%d”,a3); } void f2(int a2) { f3(a2); a2 = (a2+1); }
SP
void f1() { int a1 = 1; int b1; f2(a1); }
b1 a2
1 akármi visszatérési cím 1
SP
void f1() { int a1 = 1; int b1; f2(a1); } 33
34
Függvényhívás a1 b1
void f3(int a3) { printf(”%d”,a3); } void f2(int a2) { f3(a2); a2 = (a2+1); }
a2 SP
Függvényhívás
1 akármi visszatérési cím 1 visszatérési cím 1 (argumentum)
a1 b1
void f3(int a3) { printf(”%d”,a3); } void f2(int a2) { f3(a2); a2 = (a2+1); }
void f1() { int a1 = 1; int b1; f2(a1); }
a2 a3
1 akármi visszatérési cím 1 visszatérési cím 1
SP
void f1() { int a1 = 1; int b1; f2(a1); } 35
36
Függvényhívás a1
void f3(int a3) { printf(”%d”,a3); } void f2(int a2) { f3(a2); a2 = (a2+1); }
b1 a2 a3
Függvényhívás
1 akármi visszatérési cím 1 visszatérési cím
void f2(int a2) { f3(a2); a2 = (a2+1); }
1
SP
void f1() { int a1 = 1; int b1; f2(a1); }
b1 a2 a3
1 akármi visszatérési cím 1 visszatérési cím 1
SP
void f1() { int a1 = 1; int b1; f2(a1); }
Ekkor is függvényhívás történik, de most ignoráljuk.
37
38
Függvényhívás a1 b1
void f3(int a3) { printf(”%d”,a3); } void f2(int a2) { f3(a2); a2 = (a2+1); }
a1
void f3(int a3) { printf(”%d”,a3); }
a2
Függvényhívás
1 akármi visszatérési cím 1 visszatérési cím
a1 b1
void f3(int a3) { printf(”%d”,a3); } void f2(int a2) { f3(a2); a2 = (a2+1); }
SP
void f1() { int a1 = 1; int b1; f2(a1); }
a2
1 akármi visszatérési cím 2
SP
void f1() { int a1 = 1; int b1; f2(a1); } 39
40
Függvényhívás a1
void f3(int a3) { printf(”%d”,a3); } void f2(int a2) { f3(a2); a2 = (a2+1); }
b1 a2
Függvényhívás
1 akármi visszatérési cím 2
a1
void f3(int a3) { printf(”%d”,a3); } void f2(int a2) { f3(a2); a2 = (a2+1); }
SP
void f1() { int a1 = 1; int b1; f2(a1); }
b1
1 akármi visszatérési cím
SP
void f1() { int a1 = 1; int b1; f2(a1); } 41
Függvényhívás a1 b1
void f3(int a3) { printf(”%d”,a3); } void f2(int a2) { f3(a2); a2 = (a2+1); }
42
Rendszer hívások
1 akármi
• Egy processzoros gép egy időben egy utasítást hajt végre • Rendszer hívás esetén „csapdát” állít vagy „rendszerhívó utasítást” hajt végre • Paraméterek segítségével dönthető el, hogy mit kell csinálni
SP
void f1() { int a1 = 1; int b1; f2(a1); } 43
44
Rendszer hívások
Rendszer hívás típusok
• Úgy is tekinthetjük, mint speciális függvényhívás – Ellenőrzött belépés a kernelbe – Míg a kernelben futnak, privilegizált utasításokat is végrehajthatnak – Visszatérnek az eredeti híváshoz
A rendszer hívások adják lényegében az operációs rendszer által definiált absztrakt gépet
• • • • • •
Processzus kezelés Szignálok Fájlkezelés Könyvtár és fájlkezelés Védelem Időkezelés
45
46
Processzus kezelés
Fájlkezelés
• Gyermekprocesszus létrehozása
• • • • • • •
pid = fork()
• Gyermek megszűnésére várakozás pid = waitpid(pid, status, opts)
• A gyermek memóriatérképének felülírása s = execve(name, argv, envp)
• A processzus végrehajtásának befejezése
Új fájl létrehozása Fájl megnyitása olvasásra, írásra Adat olvasása fájlból Adat írása fájlba Fájl mutató mozgatása Fájl állapotinformációk lekérése ...
exit(status) 47
48
Könyvtár és fájlkezelés • • • • • • •
Unix és Win32
Új könyvtár létrehozása Üres könyvtár megszüntetése Fájlrendszer csatolása Fájlrendszer lecsatolása Egy új bejegyzés (link) létrehozása Egy bejegyzés megszüntetése ...
49
Rendszer hívás mechanizmusa 1. • Processzor mód
50
Rendszer hívás mechanizmusa 2. • Regiszterek
– Felhasználói módból Kernel módba lép
– Bizonyos regiszterek megmaradnak a Kernel szintű bélépésnél – Rendszerhívás típusát tárolja – Rendszerhívás paramétereit tárolja
• SP – Felhasználói SP-t elmenti, Kernel szintű SP-t inicializálja (helyreállítja)
• IP – Felhasználói IP-t elmenti, Kernel szintű IP-t helyreállítja
51
52
Miért kellenek a rendszerhívások?
Rendszerhívás lépései Felhasználói alkalmazás
• Miért nem egyszerűen egy függvényhívással ugrunk a kernelbe?
1
Paraméterek verembe
2
Függvény hívás 9
Verem helyreállítása
– Az egyszerű függvény hívás: 3
• Nem vált kernel módba • Nem tudja korlátozni a belépési pontokat
libC API
Rendszerhívás
8
Kód regiszterbe Csapda kernelnek Visszatérés a hívóhoz
4. Rögzített címen kezdve a végrehajtást Kernel terület Operációs rendszer
5 továbbküldés
Táblázatból választás
6
7
RendszehívásKezelő Munkavégzés
53
54
Uniprogramozás
Processzusok
várakozás
várakozás Program A
futás
futás
Idő
A programnak várakoznia kell az I/O utasítások végrehajtására mielőtt továbbfuthatna 55
56
Multiprogramozás vár
Program A
futás
Program B
vár
Kombinált
futás futás
futás
futás
vár futás
vár
futás futás
vár
vár vár
Multiprogramozás Program A
futás
Program B
vár
Program C
vár vár
futás vár
futás
vár
futás
futás vár
vár futás vár
Idő Kombinált Amíg egy programnak várakoznia kell az I/O végrehajtására egy másik program futhat
futás futás futás vár futás futás futás vár Idő
57
58
Időosztás
Processzus
• Multiprogramozás használata, hogy egyszerre több akár interaktív programot is kezelni lehessen • Processzor ideje megosztott több felhasználó között
• Végrehajtás alatt álló program – Utasításszámláló – Regiszterek – Változók aktuális értéke (környezet)
• Egy olyan „entitás”, amit hozzá lehet rendelni és végre lehet hajtani egy processzoron • Nyomonkövethető • (task, job) 59
60
Processzusok
Processzusok
Egy utasításszámláló
Processzusok Négy utasításszámláló
D
A
C
B A C D
B
B C
D
A
• Elvileg minden processzusnak saját virtuális CPU-ja van. • Valóságban egy CPU kapcsolgat a processzusok között. (Multiprogramozás)
Idő
Minden processzus végrehajtódik, de egyszerre csak egy processzus aktív, fut !!!
61
Processzusok, nyomonkövetés
62
Nyomonkövetés
63
64
Nyomonkövetés
Két-állapotú processzus
Szürke részek micsodák?
Processzus két állapotban lehet:
Processzus kezelő, indító
• Futó • Nem futó
(Dispatcher)
elindít (dispatch) belépés
kilépés nem fut
65
Nem futó processzusok
fut
leállít, várakoztat (pause)
66
Processzusok • Ütemező (dispatcher, scheduler)
belépés
Sor (queue)
elindít
– Operációs rendszer legalsó szintje – Processzus indítás, megállítás, megszakításkezelés Processzor
kilépés Processzusok
leállít (pause)
Ütemező 67
68
Processzus létrehozása
Processzus létrehozása, gyakorlatban
• Egyszerű rendszer: kezdetben minden processzust létrehozunk • Általános célú rendszer:
• Felhasználó bejelentkezik • Szolgáltatás használata, pl. nyomtatás • Program elindít egy másikat
– Működés közben kell létrehozni
• Négy esemény hatására jöhet létre processzus: – – – –
A rendszer inicializálása A processzust létrehozó rendszerhívás létrehozása A felhasználó egy processzus létrehozását kéri Kötegelt feladat (batch job) kezdeményezése 69
Processzus létrehozása
70
Processzus létrehozása, MINIX
• Rendszer induláskor több processzus keletkezik • Előtérben fut – Felhasználókkal tartják a kapcsolatot
• Processzus létrehozása fork rendszerhívással • Elkészíti a processzus tökéletes másolatát – Ugyanaz a memóriakép, környezeti változók
• A gyermek processzus végrehajt egy execve rendszerhívást. Ezzel megváltoztatja a memóriaképet • A szülő és gyermek külön címtartománnyal rendelkezik, de osztozhatnak bizonyos erőforrásokon
• Hátterben fut – „Nincs felhasználóhoz kötve” – Sajátos feladatuk van – démonok (daemon)
71
72
Processzus hierarchia
Processzus befejezése
• Szülő létrehoz egy gyerek processzust • A gyerek processzus is létrehozhat további processzusokat • Hierarchia jön létre
• • • •
Szabályos kilépés (önkéntes) Kilépés hiba miatt (önkéntes) Kilépés végzetes hiba miatt (önkéntelen) Egy másik processzus megsemmisíti (önkéntelen)
– Unix: processzus csoportok
• Windows alatt nincs hierarchia – Minden processzus egyenlő
73
74
Processzus befejezése, gyakorlatban • Időkorlát lejárt • Nincs több memória • Matematikai hiba
Processzus állapotok • Futó – Végrehajtás alatt áll, CPU-t használja
• Blokkolt – Logikailag nem lehet folytatni,
– Zérussal osztás
• Érvénytelen utasítás • Operációs rendszer leállítja (holtpont elkerülés) • Szülő leállítja
75
• mert rendszerint bemenetre vár
• Futásra kész – Elvileg készen áll, futásra képes
76
Processzus állapotok futó
1
Processzus állapotok
2 belépés
3 blokkolt
futásra kész sor
elindít
futásra kész 4
Processzor
kilépés
timeout (idő lejárt)
1. A processzus eseményre várva blokkolt blokkolt sor
2. Az ütemező másik processzust szemelt ki
eseményre vár
esemény bekövetkezett
3. Az ütemező ezt a processzust szemelte ki 4. Az esemény bekövetkezett 77
78
Unix processzus állapotok
Unix processzus állapotok • • • • • • • • •
79
User running: Felhasználói módban fut Kernel running: Kernel módban fut Ready to run in memory: Futásra kész, az ütemező bármikor kiválasztahtja Asleep in memory: Nem lehet futtatni amíg egy esemény be nem következik (blokkolt állapot) Ready to run, swapped: Futásra kész, de még a memóriába kell helyezni Sleeping, swapped: Nem lehet futtatni amíg egy esemény be nem következik (blokkolt állapot). Lemezre kimásolta a rendszer Preempted: Processzus kernel módból felhasználói módba tér vissza, de a kernel egy másik processzust választ ki Created: A processzus létrejött, de még nem képes futni Zombie: A processzus többé nem létezik, de még hátrahagy információt a szülő processzusnak.
80
Processzus állapotok
Táblázatok
• Minden processzus aktuális állapotáról információt kell tárolni – – – – – –
Processzus kép
Memória táblázat
Memória Eszközök
I/O táblázat
Fájlok
Utasításszámláló Veremmutató Lefoglalt memória Megnyitott fájlok állapota Elszámolási és ütemezési információ Egyéb
Processzus 1.
Processzusok Fájl táblázat
Elsődleges processzus tábla
Processzus 1. Processzus 2. Processzus 3.
• Az operációs rendszer táblázatban tárolja az információt
... 81
Processzus táblázat
Processzus n.
Processzus n.
82
Processzus azonosító
• Egy bejegyzés: processzus vezérlő blokk (Process Control Block, PCB) • Processzus azonosító • Processzus állapot információ • Processzus kontrol információ
83
• Process identifier, proc ID • Numerikus érték (szám) • Tartalmazza – Ennek a processzusnak az azonosítója – A létrehozó processzus azonosítója (parent id) – Felhasználó azonosító
84
Processzus állapot információ
Processzus kontrol információ
• Regiszterek – – – –
• Ütemezési információ • Processzus állapota
Utasításszámláló Állapot regiszter Verem mutató Általános regiszterek
– futó, blokkolt, futásra vár
• Prioritás – Aktuális – Maximális
• Hátralévő ütemezett idő • Felhasznált CPU idő 85
Megszakítás • • • •
86
Multitasking
„Egyszerre futó processzusok illúziója” Multitasking Egy CPU Több I/O eszköz
• Egy processzus fut • Hardware
– Egy I/O eszközosztályhoz Æ megszakításleíró tábla – Tábla bejegyzései Æ megszakításvektor – Megszakításvektor: megszakítást kiszolgáló eljárás címe – Időzítő, óra is egy eszköz! 87
– Egy megszakítás következik be, hardware eszköz jelez – Megszakításokat letíltja – A megszakítás hardware az aktuális veremben tárolja: • Utasításszámláló • Programállapot szó • Egy vagy több regiszter
– A megszakításvektorban megadott címre ugrik 88
Multitasking
Multitasking
• Megszakítás kiszolgáló
• Ütemező eldönti melyik processzus fusson legközelebb
– Processzus száma és a mutató globális marad (gyorsabban elérhető) – Csak assembly tudja megtenni • Összes regisztert elmenti az aktuális processzus PCB-be • A megszakítás által tárolt változók kikerülnek a veremből és egy ideiglenes vermet állít be (processzus kezelő használja)
– C program
– A megaszkításra váró processzus pl. futásra várakozóvá válik, kiválasztható – Prioritást is figyelembe kell venni – Ütemezési sorok frissítése
• A C program visszatér
• Végrehajtja a megszakítást kiváltó műveletet, pl. beolvas az eszközről 89
Multitasking
90
Mikor vált processzust?
• Az assembly kód elindítja az új (vagy ugyanazt a) processzust – Regiszterek helyreállítása – Verem beállítása
• Óra megszakítás – Maximálisan felhasználható idő lejárt
• I/O megszakítás • Csapda (trap) – Matematikai hiba
91
92
Processzus, vezérlési szál (thread) • Rendelkezik utasításszámlálóval, amelyik nyilvántartja, hogy melyik utasítás végrehajtása következik • Regiszterei tárolják a munkaváltozókat • Verem a végrehajtás eseményeit tárolja
93