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.