2014. június 6., péntek

Op rendszerek vizsgára


Memóriakezelés:
A memória, címezhető rekeszekből (cellákból) áll. A processz szemszögéből a memória egy erőforrás, amire szüksége van.
A memória egy véges mennyiségű több példányos erőforrás, ahol egy cellát (egy példányt) egyszerre egy időben csak egy processz használhat (kivéve osztott memóriánál), de el is vehető a processztől (hiszen lementhető az állapota) és gond nélkül visszaadható.

A memóriakezelést egy külön operációs rendszer komponens a Memória Management végzi:
- nyilván tartja a szabad memóriaterületeket, és hogy melyik processz melyik területet foglalja le.
- Biztosítja az extrém használatot (pl, ha több memória kell egy processznek, mint amennyi a fizikai memória…
- Védelmet ad, hogy egyik processz ne férhessen hozzá a másik processz memóriaterületéhez.
- Osztott memóriaterület biztosítása (adatok megosztása) igény esetén

Swapping:
Egy blokkolt processz memória területét teljes egészében kiírja a háttértárra, hogy a felszabaduló helyre el lehessen helyezni egy másik processzt, majd visszatölti mikor a processz sorra kerül (esetleg egy másikat kiírva). Jelentős időigény, de több processz futhat.

Virtuális memóriakezelés:
A leképzéshez nyilvántartás kell. A nyilvántartás méretének csökkentése érdekében a virtuális címtartományt blokkokra kell osztani és a blokkokat egyben elhelyezni, így elég csak a blokk kezdetét megjegyezni.
A blokkokra osztás fajtája szerint a virtuális memóriakezelés lehet:
- lapozásos (fix méretű memóriablokk)
- szegmentálásos (változó méretű memóriablokk)
- vegyes

A virtuális memória lényege:
A virtuális memória a processzek számára azt a képzetet kelti, hogy igen nagy címtartományt és memóriát kezelhet, ami egy vagy több résztartományból állhat.
A virtuális címek virtuális memória cellákat címeznek.
A virtuális cellákat a memóriamenedzselés biztosítja: a cellákat vagy a fizikai memória cellái, vagy másodlagos memória (többnyire diszkek) cellái adják.

Virtuális címzés előnye:
- A processz memória területeinek elhelyezkedése sok darabban is lehet a memóriában vagy akár más tárolón
- A programok tetszőleges méretű virtuális címtartományt használhatnak, akár a fizikai memória címtartománytól nagyobbat is.

Virtuális címzés hátránya:
- Bonyolultabb a címképzés. (Lassul egy utasítás végrehajtásának a sebessége)
- A címképzésnél meg kell oldani, hogy a más tárolóra elhelyezett memóriaterületek betöltődhessenek. Így lesz olyan címleképzés, amely több nagyságrenddel lassabb , mint más címleképzés.

A taszképítés (linkelés) során virtuális címeket generálnak, a processzek kontextusában (a kódrészekben) virtuális címeket találunk. A processzek futása során dinamikus címleképzés van: a virtuális címeket a buszra kiadható fizikai címekké kell leképezni. A leképzés a processz szemszögéből transzparens, azaz a processznek „nem kell törődni” azzal, vajon a hivatkozott virtuális címhez tartozó cellát pillanatnyilag a fizikai memória cellája adja, vagy az a másodlagos tároló cellája-e. Utóbbi esetben ugyanis a memóriamenedzselés ki- bemozgatást is végeztet, gondoskodik arról, hogy a virtuális memória másodlagos táron található része bekerüljön a fizikai memóriába.

A processz tényleges virtuális címtartománya nem feltétlenül folytonos. Másrészt a processzek életük során növelhetik, vagy csökkenthetik virtuális címtartományukat is.

A lapozó rendszerek (Paging Systems)
A lapozós rendszerekben fix méretű blokkokban történik a címleképzés, szükség esetén a ki-bemozgatás.

A virtuális memória egyforma méretű lapokra (page), a valós memória pedig a lapokkal egyező méretű lapkeretekre (page frame) van felosztva.

Az OS minden processz számára létre hoz egy laptáblát. A laptábla kezdő címét a processz dinamikus kontextusában egy regiszter tartalmazza.

A laptáblának annyi bejegyzése van, mint ahány lapra felosztható a processz memória területe. Egy bejegyzés tartalmazza, hogy
- a lap a memóriában van-e vagy sem (valid/invalid)
- a helyét a memóriában és a háttértáron

Laphiba:
Ha a laptábla bejegyzés azt mutatja, hogy nincs a memóriába betöltve a lap. à exception
1. laphiba esemény generálódik és blokkolódik a processz.
2. a pager betölti a lapot (ha van üres hely akkor oda, ha nincs akkor csinál helyet)
3. a processz blokkolása megszűnik, folytatódik az utolsó utasítással.
A laphiba a lapozásos virtuális memóriakezelés természetes velejárója, de csökkenteni kell a laphibák számát, és a laphibák lekezelési idejét a futási idő növelése érdekében.

A címképzés gyorsaságának növelése érdekében hardveres (CPU) támogatást igényel!

Védelem:
Különleges védelemre nincs szükség, mivel a leképezésből adódóan a processz csak saját területeihez tud hozzáférni.

Osztott memóriakezelés közös lapokkal valósítható meg.
Létrehozásakor, a processz laptáblájában egy közönséges bejegyzés jön létre a laphoz, de az OS külön nyilvántartja.
Egy másik processz csatlakozásakor az ő laptáblájába is kerül egy bejegyzés ugyanarra a lapra.
A processz befejeződésekor az ilyen lapok nem jegyződnek be szabadnak, csak a megfelelő rendszerhívás hatására.

Lapozásos virtuális memóriakezelés előnyei:
- Nincs külső elaprózódás (töredezettség)
- Nagyon kicsi belső elaprózódás. (csak a processz utolsó lapja lehet kisebb méretű, mint a lapkeret)
- Könnyű elhelyezés. Bármelyik lap, bármelyik lapkeretbe.
- Nagyon nagy memória igényű processzek is kezelhetők. (a fizikai memóriánál nagyobb is)
- Nincs szükség sem overlay-re sem swapping-re. (a MM megoldja helyettünk)

Hátrányok:
- A címképzés ideje jelentősen megnőtt.
- A nyilvántartás mérete, kezelési ideje megnőtt.
- A laphibák számának és kezelési idejének csökkentése érdekében újabb OS funkciókra van szükség.

Laptábla és címképzés variációk
1. Nagyobb lap és lapkeret méret: kisebb laptábla, kevesebb laphiba, de hosszabb betöltés.
2. Többszintű laptáblák: címképzés kicsit bonyolultabb, de nagy processzhez is kis laptábla, kisebb egy bejegyzés
3. Invertált laptábla: Egy van belőle, nem processzenként egy. Annyi bejegyzése, ahány lapkeret. A benne való kereséshez gyorsításként hash tárolás vagy asszociatív tárak szükségesek.

Lapkezelés:
- munkakészlet koncepció: a processzek munkakészletéből bármely időintervallumot is vizsgálunk a lehető legtöbb lap legyen a memóriában
- mennyiségi stratégia: Hány lapkerettel rendelkezzen egy processz?
- belapozási stratégiák
                - igény szerinti: csak akkor lapozzon be, ha hivatkoznak rá (egyszerű)
                - előérző belapozás: a hivatkozottakon kívül még néhányat betölt
                - mohó: betölt amennyit csak tud
- kilapozási (helycsinálási) stratégiák:
                a pager, ha a processznek nem jut szabad lapkeret, helyet kell csináljon.
                - lokális stratégia: a processz saját lapkeret készletéből lapozhat ki
                - globális stratégia: más processzek lapkeret készletéből is kilapozhat.

                cél: azt a lapot kilapozni, amire a legkésőbb lesz szükség.
1. FIFO: a legrégebben belapozott (probléma, hogy a rég bent levő de gyakran használtak is kilapozódnak)
2. SC FIFO (második esélyes FIFO): kap egy hivatkozásbitet, és ha hivatkozás történik rá 1 lesz az értéke. Kilapozáskor, ha az érték 0: kilapozódik. Ha 1: értéke 0-ra vált és a sor végére kerül.
3. LRU (least recently used): használat ideje alapján, ha használják a sor végére kerül. (viszonylag költséges)
4. LFU (least frequently used): legritkábban használt. Nyilván kell tartani a hivatkozások számát (költséges). A korábban gyakran, de már nem használt is bent marad sokáig.
5. NRU (not recently used): nem gyakran használt. A kis költség a cél.
                A) utolsó 8 időintervallum históriája.
                B) módosító bites.
További gyorsítás kilapozáskor:
A pager szabad CPU időben kiírja a módosult lapokat a háttértárra, így azokat már nem kell menteni, ha kilapozásra kerülnek. Ez bármelyik kilapozási stratégia esetén használható csak egy módosítási bit kell hozzá.



Szegmentálásos memória kezelés:
Ha a virtuális címtartomány nem egydimenziós. Pl. ha a kód, osztott kód, adat, verem, kernel régió, stb. külön szegmenst alkot.
Fordító támogatást igényel.

A virtuális memória szegmensekre van osztva. A szegmenseket egyben lehet elhelyezni a memóriában vagy a háttértáron kialakított tárolón. Tehát nem egyforma méretűek a blokkok.

A szegmensek elhelyezése lyukakba történik:
- First Fit
- Next Fit
- Best Fit
- Worst Fit
Nyilván kell tartani a szükséges szabad területeket à Szegmenstábla

Egy bejegyzés: a szegmens…
- memóriában van-e
- elhelyezkedése a háttértáron/ memóriában
- hossza
- egyéb adatok…
Szegmenshiba: ugyanaz, mint a laphiba.

Előnyök:
- Kevesebb a szegmenshiba, hiszen a szegmensekre osztás igazodik a programok logikai szerkezetéhez (lokalitás elv)!
- Kényelmesebb osztott memória használat.
Hátrányok:
- Sokkal több munkája van az operációs rendszernek, mint a lapozásosnál: elhelyezési stratégia, bonyolultabb nyilvántartás
- Van külső elaprózódás. A helykihasználás rosszabb, mint a lapozásosnál.

Vegyes memória kezelés:
A két módszer ötvözése.
A processz memória területe szegmensekre van osztva. A szegmenseket kell elhelyezni vagy a memóriában vagy a háttértáron. Az elhelyezés nyilvántartása a processzhez tartozó szegmenstáblában.
(szegmentálás előnyei: kevesebb szegmenshiba, osztott szegmensek)
A szegmensek memóriában elhelyezésekor lapokra bontás.
(lapozás előnyei: nincs elhelyezési stratégia, bonyolult lyuk nyilvántartás, külső elaprózódás)

IO kezelés
Feladatok:
- elrejteni az eszközök specialitásait
- kényelmessé tenni az eszközök használatát
- menedzselni az eszközöket, fájlokat.

Fajtái:
- karakteres eszközök (egér, soros port, képernyő, stb…)
- struktúrált blokk eszközök (diszkek)

I/O rendszer (felhasználó szemszögéből):
- szimbolikus neveket (fájlokat, eszközöket, mappákat…) lát.
- GUI-val kezeli
- tulajdonos és hozzáférési kategóriákat kezel.

I/O rendszer (programozó szemszögéből):
- csatornákat lát (pointerek, discriptorok…), melyeket nyithat/ zárhat, amelyeken adatokat mozgathat.

I/O rendszer (az OS szemszögéből):
Az OS rendelkezik külön I/O alrendszerrel.
Feladata:
- vezérlés
- interfész
- védelem és management biztosítása.

Alapelvek:
- réteges struktúra
- eszközfüggetlenség
- célszerűen elosztott hibakezelés
- szinkronitás – aszinkronitás biztosítása
- osztható és dedikált eszközök, fájlok kezelése.

I/O rétegek:


User szint:
- eszközök azonosítása szimbolikus neveken
- rendszerhívások az eszközök kezeléséhez

Eszköz független réteg feladata és szerepe:
- Elrejti az eszközök közötti különbségeket, cserélhetőséget biztosít
- magasabb szintű kezelhetőséget biztosít az eszközökhöz,
- blokkos eszközökhöz filerendszert biztosít
- feloldja a szimbolikus neveket, meghívja a megfelelő eszközkezelőt
- leírókat hoz létre és kezel
- filerendszert kezel

Eszközfüggő réteg:
Eszköz drivereket (meghajtókat) tartalmaz.
- egy-egy eszközfajta kezelése
- megszólítható (user: rendszerhívás; hardver: megszakítás)
- dinamikus betöltődés
- eszközgyártó készíti.

Diszkek, blokk orientált eszközök
- Blokknyi egységben történik az adatáramlás.
- Oldal-sáv-(cilinder)-szektor (blokk) fogalmak
                - adattárolási egység a szektor (blokk),
                - oldal-sáv-szektor címek léteznek,
- Az oldal-sáv-szektor címek leképezhetők folyamatos logikai blokkcímekre
(ezt a kontroller végezheti): felülről 0-n-ig számozott blokkok sorának láthatjuk.
- Logikai diszk képezhető a fizikai diszkre.

Oka: egységesítés, egyszerűbb driverek.



Logikai diszk, partíció:
- Egy fizikai diszken 0-n -ig számozott blokkok sora.
- Mindegyiknek saját szimbolikus neve van.
- Mindegyiknek saját driver-e van.
- Egy fizikai diszken több partíció lehetséges
- A partíciók (egyes OS-eknél) átlapolódhatnak.

Particionálás:
Az OS-től részben független dolog. Alacsonyabb szintű szoftverek kellenek a partíciók létrehozásához, törléséhez, módosításához, stb.)

A partíciókat az OS-ek nem egyformán kezelik. Vannak OS-ek, melyek pl. kötött számú partíciót engednek, és nem mindig látják egymás fájlrendszereit stb.

Particionálással egy nagy lemez több részre bontható, vagy több lemez összevonható különféle módokon…

Fájl:
Adattároló eszközön lévő információs egység. Tartalma adat vagy végrehajtható kód.

Fájlok szervezettsége:
- nincs (byte-ok sora, a processek strukturálnak)
- szekvenciális (rekordok sora)
- index szekvenciális (egyes mezők a rekordokban kulcsmezők, melyek rendezettek és a rekordok gyors keresését teszik lehetővé.)

Fájlrendszer:
A fájlok tárolásának és rendszerezésének módszere.

A fájlok elérése:
- soros (egy adatelem eléréséhez az előzőeken át kell jutni)
- direkt (random access)

Fájl típusok:
- közönséges fájlok
- mappák
- speciális fájlok (eszköz azonosítók, pipe-ok, stb.)

fájl attribútumok…

Fájlrendszer megvalósítások:
feladat:
- fájlok kezelése (blokkok hozzárendelése, stb.)
- nyers, foglalt blokkok menedzselése
- fájlok attributumainak tárolása, jegyzékstruktúra kialakítása.

Blokk allokációs módszerek
- folytonos allokáció
- láncolt listás allokáció
- láncolt listás allokáció index táblával (FAT)
- i-node módszer

folytonos allokáció:
ma már nem használják, a fájl blokkjai folyamatosan egymás után következnek. Csak a kezdő blokk és a hossz tárolására van szükség.
Előnye: egyszerű nyilvántartás, blokkok visszakeresése.
Hátránya: problémás a hozzáfűzés a fájlokhoz, rossz helykihasználás, töredezettség…

láncolt listás allokáció:
A fájl elhelyezhető több darabban, nem folytonosan. A jegyzékben az első blokk címe, az adott blokkban egy mutató a következő blokkra, az utolsóban pedig a vége jel.
előnye: nincs fregmentáció, könnyű a hozzáfűzés
hátrány:
- hosszú fájloknál végig kell menni a láncolt listán
- a mutató területet vesz el a fájlból
- keverednek a fájl adatok és a nyilvántartási adatok.

Láncolt listás allokáció index táblával (FAT):
A partíció egy fix helyén indextábla található. Benne a partíció minden blokkjához tartozik egy bejegyzés egy-az-egy megfeleltetésben. A bejegyzés tartalmazza a neki megfelelő blokk folytatásának helyét.
előny: nincs fregmentáció, indextábla segít megtalálni a fájlt.
hátránya:
- nagy partíción nagy indextábla à clusterek à sok kihasználatlan hely
- sérülékenység: elveszhet az index tábla à dupla tábla à dupla terület és munka.

I-node os allokáció:
- a fájlok a partíció tetszőleges blokkjaiban vannak elhelyezve.
- minden fájlhoz van egy többszintű táblázat, mely blokkja hol található
- a fájl adatai, blokkcímek főtáblázata, egyéb adatok egy i-node-ban találhatóak a partíció egy elkülönített területén.
- az indirekt blokkok táblázata szintén elkülönített területen van.
- a jegyzékben csak a fájl neve és i-node száma található.
Előnye:
- nincs fregmentáció
- egy blokk megtalálásához kevesebbet kell olvasni
- a file információk egy helyről elérhetőek
- kevésbé sérülékeny
Hátránya:
- A szabad blokkok külön nyilvántartást igényelnek.

Szabad blokkok kezelése:
- bittérkép
- láncolt lista

Bit térképes
- kötött helyen a bittérkép
- egy-az-egyes megfeleltetés
- blokk/cluster-foglaltság jelzése
- könnyen módosítható

Láncolt listás
- kötött helyről indulva egy blokk mutatókat tartalmaz a szabad blokkokra
- nehezebben módosítható
- egyszerű

Jegyzék struktúra:
A jegyzék egy fájl.
Bejegyzések neveit, i-node számot, egyéb adatokat tartalmazhat, attributum, hossz, stb.
A gyökér és munka jegyzék neve mindig be van töltve a memóriába.

Szemafor
A nem bináris szemafor inkább szinkronizáció megvalósítására alkalmas.
A bináris szemafor kölcsönös kizáráshoz elegendő.

A szemafor pozitív egészt tartalmazó közös változó és egy várakozási sor együttese.
A szemaforon két atomi (azaz nem megszakítható) operáció végezhető: DOWN és UP művelet.
DOWN (semaphore s)
s > 0 às=s-1
s = 0 àprocess blokkolódik

UP (semaphore s)
à s = s+1
ha s=0 à egy process felébredhet.

Bináris szemafor:
kétértékű változót használ 0/1
DOWN:
- ha a változó hamis (0) à értékét igazra (1) állítja
- ha a változó igaz (1) à várakozás
UP:
- a változót hamisra állítja, és ha van várakozó akkor felébreszti.

Kölcsönös kizárás:
A közös erőforrásért küzdő processzek közül csak egy kaphat jogot annak használatára.

Több ilyen erőforrás használata esetén felmerülhet a Holtpont problémája, ha nem, vagy rosszul használjuk a kölcsönös kizárást.

Léteznek olyan szoftvererőforrások, melyekről az OS nem ismer. Az ilyen erőforrások használatát a programozónak kell védeni. Az OS biztosít rá lehetőséget, de a programozónak kell használnia és felismerni szükségességét.

Holtpont elkerülése:
- ha egy processz a kritikus szakaszban fut, más processz ne léphessen be.
- nem kritikus szakaszban futó processz ne befolyásolja mások belépését.
- ha egy processz bejelentette igényét a belépésre, ésszerűen korlátozzuk, hogy más processz hányszor előzheti meg, hogy ne várakozzon örökké.
- ne legyen előfeltétel hardverre, OS ütemezésre
- várakozás közben a processz ne foglalja a CPU-t.

Processz/CPU ütemezés
Az ütemező feladatai:
- algoritmus alapján dönt a beavatkozásról
- algoritmus alapján dönt a kiosztásról
- kontextus váltást hajt végre

A processzek élete lehet:
- CPU lázas
- I/O lázas
Vannak:
- számolásigényes processzek
- I/O igényes processzek

Kiéhezés:
Egy processz hosszú ideig nem jut hozzá az igényelt erőforráshoz
à
Processz ütemezés, beavatkozás:
Az óra eszköz periodikusan generál megszakításokat, ez ad lehetőséget arra, hogy lefusson egy döntési algoritmus.


Beavatkozás lehetséges döntési algoritmusai:
- időosztásos
- prioritáson alapuló
- vegyes

Időosztásos: Egy processz egy huzamban adott időszeletnyit futhat, ha ez idő alatt nem blokkolódik, akkor beavatkozás történik.

Prioritásos: Ha egy „redy” státuszú processznek magasabb lesz a prioritása, mint a „running” státuszú processznek, akkor jön a beavatkozás.
                - statikus prioritás (kivételes esetekben van csak): állandó a prioritása
                - dinamikus prioritás: a prioritás folyamatosan újraszámolódik.

Ha bármilyen okból felszabadul a CPU, akkor azt egy „redy” állapotú folyamatnak meg kell kapnia.

Döntési algoritmusok:
- klasszikus algoritmusok:
1. FCFS (First Come, First Served)
2. SJF (Shortest Job First)
3. Round-Robin
- érdekes, egyszerű algoritmusok:
4. Ígéretvezérelt időkiosztás (Policy Driven Scheduling)
5. Sorsjegyes időkiosztás
- Prioritásos algoritmusok:
6. Általános prioritásos
7. Többszintes prioritás-sorokon alapuló (Multilevel Queue Scheduling és Multilevel Feedback Queue Scheduling)
- Konkrét algoritmusok:
8. VAX/VMS időkiosztó algoritmusa
9. Általános Unix időkiosztó algoritmusa

1. FCFS (first come, first served): a ready állapotú processek, beérkezésük sorrendjében kapnak CPU időt. Egyszerű, de kialakulhat a Konvoj-effektus: cpu-lázas process lefogja a cpu-t.

2. SJF (shortest job first): A ready állapotú processek közül kiválasztja, várhatóan melyik lesz a legrövidebb futási idejű. Régen a programozó megadta, mennyi lesz a várható futási ideje a processnek, de ma már az oprendszer ezt nem tudja pontosan megállapítani. Printer spooling feladatokra később is használták.

3. Round-Robin (FCFS+időszeletes beavatkozás): A ready állapotú processzek beérkezés sorrendjében kapnak CPU-időt, de minden processz meghatározott ideig futhat, utána beavatkozás. Egyszerű, kis költségvetésű és garantáltan szóhoz jut minden processz. Hátránya, hogy nem veszi figyelembe a processzek fontosságát.

4. Igéretvezérelt (Policy Driven):
n számú processz esetén a CPU idő 1/n-ed részét kapja egy processz.
- Megvalósítás: Mérni kell az életIdő-t (a process rendszerben eddig eltöltött idejét), a cpuIdő-t (eddig felhasznált CPU időt),
továbbá:
jogosultságiIdő = életIdő / n;
prioritás = jogosultságiIdő / cpuIdő.
- Hátránya: Nem vesz figyelembe fontosságot

5. Sorsjegyes:
A processzek „sorsjegyeket” kapnak, döntéskor sorshúzás van, és a nyertes kapja meg a CPU időt.
Figyelembe vehető a fontosság: több sorsjegyet kap.
- jelentéktelenebb processzek is CPU időhöz juthatnak, de csak hosszabb távon érvényesül a fontosság.

6. Általános prioritásos:
A ready processzek közül a legmagasabb prioritású kapja meg a CPU időt.
- A prioritás függhet:
- az eddigi CPU használat idejétől (legfontosabb),
- a processz memóriaigényétől,
- erőforrás használati szokásaitól,
- a várható összes CPU használati idejétől,
- a rendszerben eddig eltöltött idejétől,
- külső prioritás értéktől,
- időszerűségétől (timeliness),
- a rendszer terhelésétől

7. Többszintes prioritás-sorokon alapuló (Multilevel Queue Scheduling és Multilevel Feedback Queue Scheduling)
- A prioritás-számító képlet véges számú diszkrét értéket ad (pl. 1-15 közötti egész a prioritás). Ezeket prioritás szinteknek nevezzük.
- Több azonos prioritású processz is létezhet (azonos szinten vannak), emiatt másodlagos döntési algoritmus szükséges.
(Az elsődleges most is a prioritás, tehát magasabb prioritású process hamarabb kap CPU időt)

8. VAX/VMS ütemezési algoritmusa
- Multilevel Feedback Queue jellegű, alkalmas real time-ra is.
- Van egy bázis prioritása a processzeknek, amihez hozzáadódik egy rendszerhíváshoz rögzített növekmény prioritás.
- Az ütemezett processz prioritása egy szinttel csökken, ha elveszik tőle a CPU időt, max a bázis prioritásig.
- a sokáig várakozó processzek egy szinttel feljebb emelkednek, hogy ne éhezzenek ki.
- az ütemező a prioritási sor elejéről választ.

9. UNIX időkiosztás
- Multilevel Feedback Queue jellegű
- A processzeknek user-mode vagy kernel-mode prioritásértéke lehet.

- A user-mode prioritás szintekre sorolódnak a felhasználói processzek, ezek a szintek dinamikusak és van beavatkozás.
- A kernel-mode prioritás szintekre sorolódnak a rendszer funkciók, ezeken a szinteken statikus a prioritás. Ezek közül vannak szintek amelyekre nincs beavatkozás. (A statikus prioritás és a nem beavatkozás nem okoz problémát hiszen ezek a funkciók pontosan ismert működésűek, ismerten rövidek).

10a. Linux O(1) scheduler
konstans idő alatt végzi el a döntést a processzek számától függetlenül

10b. Linux CFS – Completely Fair Scheduler
O(log N) komplexitás

Task és fonál
A modern OS-ek támogatják a párhuzamosságot. Ebben az esetben nem processzről, hanem fonálról (szálról) és Taszkról (feladat) beszélünk.

Taszk:
Futó folyamat, mely több szálat is tartalmaz, melyek versengenek a CPU időért.
Egy taszk, egyetlen fonállal nem más, mint a klasszikus processz.
Van statikus kontextusa, de a végrehajtható kódot a fonalak tartalmazzák.

Fonál:
A CPU használat alapegysége, egy szekvenciálisan futó instrukció sorozat. Fonál nélkül egy taszk csak passzív entitás.

Fonál-kezelés:
- kernel szintű (könnyűsúlyú processz)
- A kernel ismeri a fonalakat, allokál nekik CPU-t, ütemezi, nyilvántartja őket.
- A kontrollhoz rendszerhívások biztosítottak.
- user szintű
- A kernel nem ismeri a user-szintű fonalakat.
- RTL rutinok végzik a fonál kontrollt
- Állapotukat csak a taszk tartja nyilván
- Osztoznak a taszk kontextusán (tehát csak pszeudo-párhuzamosságban futnak)
- felhasználói módban futnak.
- vegyes (a fonál támogatása funkcionálisan megoszlik)

IPC mechanizmusok, melyik rendszerhívás mit csinál?

IPC (Inter Process Communication) Processzek közti kommunikációs mechanizmusok
Célja: információcsere és szinkronizáció

Kommunikáció fajtái:
- direkt/ indirekt kommunikáció
- egy-, kétirányú kommunikáció (aszimmetrikus, szimmetrikus)
- zéró/ korlátozott kapacitású/ végtelen kapacitású pufferelt
- fix/ változó üzenethosszúságú
- szinkron, aszinkron

Direkt kommunikáció:
- a kommunikáló processzeknek ismerniük kell egymást
- többnyire két processz közti kommunikáció
- küldés és fogadás (pl. signal)

Indirekt kommunikáció:
- a kommunikáló processzeknek egy közvetítő entitást kell ismerniük (pl. üzenetsor, postaláda, stb.)
- létre kell hozniuk, vagy csatlakozni kell a közvetítőhöz, ami kötődhet valamely processzhez, vagy az OS-hez
- információ küldés/ fogadás
- közvetítő elpusztítása, vagy lecsatlakozás
pl. osztott memória, fájl.

Egy/kétirányú kommunikáció (aszimmetrikus/szimmetrikus)
- egyirányú: egyik csak vesz, másik csak ad
- kétirányú: mindkettő ad és vesz

Zéró, korlátozott kapacitású, végtelen kapacitású pufferelt
- zéró kapacitás (nincs puffer): a küldéssel egyszerre fogadni is kell, szinkronizációt igényel
- ha van puffer: a küldés elválik a fogadástól. Az elküldött info egy pufferba kerül, a fogadó majd innen veszi ki.
- Korlátozott kapacitású puffer:
                - a küldő vár, ha betelt a puffer
                - a fogadó vár, ha üres a puffer
- Végtelen kapacitású puffer:
                - a fogadó vár, ha üres a puffer

Szinkron/ aszinkron (blokkolásos/ nem blokkolásos):
A küldő processz megvárja-e, hogy a fogadó megkapja az üzenetet?
- ha a küldés és fogadás blokkolásos à szinkron
- ha egyik vagy egyik sem blokkolásos à aszinkron



IPC mechanizmusok felsorolása:
- Fájlokon keresztüli kommunikáció:
                több process ugyanabba a fájlba ír/olvas (nagy méret esetén lassú)
- Vágólapon (Clipboard) keresztül:
                közös memóriaterület használata (amit a GUI nyújt)
- Az “environment“-en keresztüli kommunikáció:
                az oprendszer környezeti változóiba írás/olvasás (kis információk esetén)
- Csővezeték (pipe) név nélküli, nevezett csövek:
FIFO Egy létrehozott csőbe ír, a másik pedig onnan olvas. Amit kiolvastak, az törlődik. (két csővel szimmetrikus kapcsolat hozható létre)
Nevesített csövek: fájlokon keresztül.
Név nélküli csövek: osztott memória, fájl, egyéb módon.
- A klasszikus message queue rendszer:
Az egyik processz üzenetsort készít, amihez a többi processz kapcsolódhat. Ez az üzenetsor processztől függetlenül létezik, indirekt, OS kötődésű, többirányú, végtelen pufferelt. Gyors, közepes mennyiségű információ átvitelére. Hozzáférés hozzáférési kategóriák segítségével szabályozott.
- Osztott memórián keresztüli kommunikáció:
A processzek egy közös memóriaterületen keresztül kommunikálnak.
Gyors, nagy mennyiségű információ vihető át.
Indirekt, szimmetrikus, zéró pufferelt.
- Szignálozáson keresztüli kommunikáció:
információhivatkozás küldése. Oprendszer komponensei között gyakori, exception jelzésre is használatos, gyors, nagyon kis információ átvitel.
- Szemaforok, mint kommunikációs mechanizmusok:
                a szinkronizáció alapvető eszköze. Két vagy több állapotú szemafor.

Kernel, mikorkernel, rétegek

Kernel:
Rendszermag. Az operációs rendszer funkcióit ténylegesen megvalósító része.

Felépítése:
- Processz (taszk, fonál) menedzsment komponensek
- Memória menedzselő komponensek
- I/O menedzsment komponensek
- Fájl-rendszert megvalósító komponensek
- Védelmi komponens(ek)

A programozók felülete:
- Alkalmazásokból és processzekből:
rendszerhívások (system call) és eseménykezelők: alkalmazás-programozási felület (API - Application Programming Interface)
- Hardverből: megszakítás, hiba

A felhasználók felülete:
- Parancsnyelvi vagy grafikus kezelő felület (burok, GUI)
- Segédprogramok készlete
Nem a kernel része. API hívásokat használnak, tehát ráépülnek a kernel-re.

Réteges szerkezet:
Hardver absztrakciós réteg (Hardware abstraction layer - HAL)
- elkülöníti az operációs rendszert a platformfüggő hardverkülönbségektől
Mikrokernel:
- az operációs rendszer legtöbbet használt illetve legalapvetőbb komponenseit tartalmazza
Eszközkezelők (device driver)
- a felhasználói I/O függvényhívásokat fordítja le specifikus I/O hardvereszközök felé irányuló kérelmekké

Mikro kernel
kliens-szerver modell
A mikrokernel az operációs rendszer kernel egy minimális formája, amely néhány alapvető funkciót – avagy rendszerhívást – valósít meg, a nélkülözhetetlen operációs rendszerszolgáltatásokhoz. Ilyenek például a címtartomány menedzsment, szál menedzsment, processzek közti kommunikáció. Minden más szolgáltatás, amely általában a kernel feladata – például hálózatkezelés – felhasználói szervereknek nevezett programok valósítanak meg.