47
OPERÁCIÓS RENDSZEREK Felületek a kernelhez: a burok és az API

OPERÁCIÓS RENDSZEREK

  • Upload
    tobias

  • View
    38

  • Download
    0

Embed Size (px)

DESCRIPTION

OPERÁCIÓS RENDSZEREK. Felületek a kernelhez: a burok és az API. Az OS kernel felületei. A programozók felülete: Alkalmazásokból és rendszer processzekből rendszerhívások (system call) és eseménykezelők : alkalmazás-programozási felület (Application Programming Interface, API) - PowerPoint PPT Presentation

Citation preview

Page 1: OPERÁCIÓS RENDSZEREK

OPERÁCIÓS RENDSZEREK

Felületek a kernelhez: a burok és az API

Page 2: OPERÁCIÓS RENDSZEREK

Vadász 2

Az OS kernel felületei

• A programozók felülete:– Alkalmazásokból és rendszer processzekből

rendszerhívások (system call) és eseménykezelők: alkalmazás-programozási felület (Application Programming Interface, API)

– Hardverből: megszakítás, hiba

• A felhasználók felülete:– Parancsnyelvi vagy grafikus kezelő felület (burok, GUI)

– Segédprogramok készlete

– (Ezen processzek programjaiban API hívások vannak. Valójában azok az igazi felületek a kernelhez.)

Page 3: OPERÁCIÓS RENDSZEREK

Vadász 3

A rendszerhívások

• System call: a programozónak ez futásideji könyvtár (Run Time Library, RTL) rutin hívás tűnik– Rövid (a tényleges szolgáltató instrukció folyam nem itt

van). Csonk (stub).

– Benne egy kis swapper (kicsomagoló) rész (az argumentumok kezeléséhez), továbbá

– ellenőrzött módváltó instrukciófolyam, továbbá

– „call jellegű belépés” a kernel diszpécserébe.

– Visszatérési része is van.

• A különböző nyelvi fejlesztőkhöz kellenek a különböző RTL-ek.

Page 4: OPERÁCIÓS RENDSZEREK

Vadász 4

Szabványos API felületek

• A forrás szinten való átvihetőséget (portabilitás) biztosítják

• Az SVID és/vagy BSD klasszikus API • A (korábbi Spec-1170) Unix-98 specifikációnak

megfelelő API (SVID, BSD és POSIX szabványú rendszerhívások)– Ugyanabban a programban ne „keverjük”

Page 5: OPERÁCIÓS RENDSZEREK

Vadász 5

A rendszerhívások szintaxisa

• RTL rutinoknak látszanak• Információ átadás a paraméterekkel és a visszatérési

értékkel is (veremtár, regiszter)• Pl.:

count=read(file_d, buffer, nbytes);• Módváltással járnak (trap)

• Vannak rendszerhívás osztályok (ez is strukturálhat)

Page 6: OPERÁCIÓS RENDSZEREK

Vadász 6

Rendszerhívás osztályok

Processz menedzsment• create, terminate process• load, execute• end, abort• get, set process attributes• wait for time, sleep• wait for event, signal event• send & receive messages• allocate free memories

Informálódó, beállító• get, set time, date etc.

Fájlok, jegyzékek• create, delete files• open, close files• read, write, reposition• get, set file attributes

Eszköz manipulációk• request, release devices• read, write, reposition• get, set device attributes• logically attach, detach

devices

Page 7: OPERÁCIÓS RENDSZEREK

Vadász 7

A rendszerhívás osztályokhoz

• Az előbbi nevek nem valódi hívás nevek, csak jelzések: ilyen hívások kellenek …

• A későbbiekben az egyes OS részrendszerekhez konkrét hívásokat veszünk majd– Pl. egyes a processz kontroll hívásokat, IPC hívásokat …

Page 8: OPERÁCIÓS RENDSZEREK

Vadász 8

A kezelő felületek

• Ismételjük át és bővítsük az sh/bash burokról a tudnivalókat!

• Veszünk néhány segédprogramot (szűrőket)

Page 9: OPERÁCIÓS RENDSZEREK

Vadász 9

A burok (sh) kifejezés kettős értelme

• A burok egyrészt parancsértelmező processz, • másrészt egy programnyelv.• Mint processz: a /bin/sh betölthető, futtatható

program egy futási példánya• Mint programnyelv: egy szövegfájl, ami parancsokat

(esetleg beleértett input sorokat) tartalmaz, és odaadható a burok processznek, hogy futtassa …

Page 10: OPERÁCIÓS RENDSZEREK

Vadász 10

A burok processz

• Önálló entitás, azonosítója a pid (process identification number)

• A /bin/sh (vagy /bin/bash) program fut benne• Van 3 nyitott adatfolyama

– A 0 leírójú stdin (szabványos bemenet), ahonnan a parancsokat, csöveket, parancslistákat olvassa.

– Az 1 leírójú stdout (szabványos kimenet), ahová az eredményeit írja.

– A 2 leírójú stderr (szabványos hibakimenet), ahová a hibaüzeneteit írja.

• A nyitott adatfolyamok „szokásos módon” eszközökhöz vannak kapcsolva

Page 11: OPERÁCIÓS RENDSZEREK

Vadász 11

A burok processz működése

• Az stdout csatornájára kiírja a készenlét jelet (prompt), jelezve, hogy parancsot, csövet, parancslistát vár

• Az stdin csatornáján parancsot, csövet, parancslistát olvas be, – Azt elemzi, értelmezi,

– átalakítja, majd végrehajtja, vagy végrehajtatja.

• A végrehajtás eredményét az stdout, ill. stderr csatornára írja, végül visszatérési értéket produkál.

Page 12: OPERÁCIÓS RENDSZEREK

Vadász 12

A visszatérési érték

• Lehet normális (0),• lehet nem normális (nem 0), ennek oka többféle

– valami hiba van,

– nincs hiba, de szemantikailag van gond.

(Pl. grep szűrő nem talál minta-egyezést, vagy

test parancs tesztelése nem igaz.)

• A visszatérési értéket a programvezérlésben használhatjuk majd.

Parancs, cső, lista …

Page 13: OPERÁCIÓS RENDSZEREK

Vadász 13

A parancs fogalma

• Fehér karakterekkel határolt szavak sora, ahol– az első szó a parancs neve,

– többi szó az argumentumok.

• Az sh beolvassa, értelmezi, átalakítja, végrehajtja– saját maga (belső p.),

– végrehajtatja gyermek processzben (külső p.)

• A belső parancsokhoz tartozó szolgáltatások kódját beprogramozták a /bin/sh programba.

Parancs, cső, lista …

Page 14: OPERÁCIÓS RENDSZEREK

Vadász 14

A csővezeték fogalma

• A csővezeték (pipe) parancsok sora | operátorral összekötve:

• parancsbal | parancsjobb• Szemantikája: végrehajtódik a parancsbal, szabványos

kimenete egy csatornába íródik, majd végrehajtódik a parancsjobb, aminek szabványos bemenete erre a csatornára képződik.

• A cső visszatérési értéke: a parancsjobb visszatérési értéke.

• A parancs degenerált cső. Példa:

> ypcat passwd | grep kovacs

Parancs, cső, lista …

Page 15: OPERÁCIÓS RENDSZEREK

Vadász 15

A parancslista

• Csővezetékek sora listaoperátorral összekötve:

csőbal op csőjobb Listaoperátorok:

&& || # magasabb precedencia, de alacsonyabb mint a |

& ; \n # alacsonyabb precedencia

A szemantika:

; \n soros végrehajtása a csöveknek

& aszinkron végrehajtás (csőbal háttérben)

&& folytatja a listát, ha csőbal normális visszatérésű

|| folytatja a listát, ha a csőbal nem normál visszatérésű

Parancs, cső, lista …

Page 16: OPERÁCIÓS RENDSZEREK

Vadász 16

Parancslisták

• A lista visszatérési értéke az utolsó cső visszatérési értéke.

• Háttérben futó cső visszatérési értéke különlegesen kezelhető.

• A cső degenerált lista (ahol ezentúl listát írunk, írhatunk csövet, sőt parancsot is!)

• A && és || operátoros listáknál először láthatjuk a visszatérési érték értelmét! Valóban a vezérlés menetét befolyásoljuk!

Parancs, cső, lista …

Page 17: OPERÁCIÓS RENDSZEREK

Vadász 17

A cső, parancslista zárójelezés

• A zárójelezés (csoportosítás) oka kettős:– operátorok precedenciáját akarjuk átértékelni,

– processz szeparálást akarunk elérni.

• Szintaxis( lista ) { lista }

• Szemantika( ) zárójelezéssel a lista mindenképp szeparált processzben

fut. Precedencia átértékelés is lehet.

{ } zárójelezéssel nem fut feltétlenül szeparált processzben.

FIGYELEM! A zárójelek itt szavak! Nem metakarakterek!

Parancs, cső, lista …

Page 18: OPERÁCIÓS RENDSZEREK

Vadász 18

Parancsvégrehajtás

• Általában az sh készít új processzt a parancs számára, ebbe betölti a parancsot, átadja az argumentumokat neki (szkriptek, exe-ék; PATH szerinti kereséssel).

• Ha nincs ( ) zárójelezés, sem átirányítás, nem készül új processz a– belső parancsoknak (melyek ezek?),

– vezérlő parancsoknak,

– sh makróknak (definiált függvények).

• Ha belső parancs bármilyen okból szeparált processzben fut, abba az sh töltődik!

Parancs, cső, lista …

Page 19: OPERÁCIÓS RENDSZEREK

Vadász 19

Az adatfolyamok átirányítása

• Mielőtt a lista/parancs végrehajtódik, az sh nézi, van-e átirányító operátor > >> < a szavakban (szavak előtt). (A << különleges!)

• Ha ilyeneket talál, szeparált processz(eke)t készít, azokban az adatfolyamokat fájlokba(ból) képzik le, majd abban hajtják végre a listát/parancsot. (Csőnél is szeparált processz!)

• A szeparált processz(ek)nek átadja a “maradék“ argumentumokat.

Page 20: OPERÁCIÓS RENDSZEREK

Vadász 20

Az átirányító operátorok

< file # file legyen az stdin

> file # file legyen az stdout, rewrite

>> file # file legyen az stdout, append

<<[-]eddig # here document, beágyazott input• Példa:

> mypr < innen > ide elso masodik

0 1 2

> exec >outfile 2>errorfile # szkriptben …

Page 21: OPERÁCIÓS RENDSZEREK

Vadász 21

Fájlnév kifejtés (behelyettesítés)

• Argumentumokban használt metakaraktereket (közöttük a dzsókereket: * ? [ ]) a burok a lista/parancs végrehajtása előtt különlegesen kezeli.

• Ha a szavakban dzsókereket talál, azt a szót mintának (pattern) veszi.

• A minta behelyettesítődik alfabetikus sorrendű fájlnevek listájává, olyan nevekre, melyek a fájlnév-térben illeszkednek a mintára.

• Csak ezután hajtódik végre a parancs/lista.

Page 22: OPERÁCIÓS RENDSZEREK

Vadász 22

Az illeszkedés

• „Szokásos” karakter önmagára illeszkedik …• A ? egyetlen, bármely karakterre illeszkedik.• A * tetszőleges számú, tetszőleges karakterre

illeszkedik.• A [...] illeszkedik egyetlen, valamelyik bezárt

karakterre.• A [!...] illeszkedik egyetlen, bármely, kivéve a ! utáni

karakterre.• stb., nézz utána!

Page 23: OPERÁCIÓS RENDSZEREK

Vadász 23

A metakarakterek semlegesítése

• Ezeket az sh kifejti, ezek miatt a parancsot átalakítja.• Ha mégis szükségünk van ezekre a parancshoz, (pl.

szűrőnek kellenek) semlegesítsük (quotázzuk) őket!• Egyetlen karakter semlegesítése: \kar• Több karakter semlegesítése:

– ‘karaktersor‘ # minden bezárt semlegesített.

– “karaktersor“ # a paraméter és parancsbehelyettesítésen kívül (lásd később) minden semlegesített.

Page 24: OPERÁCIÓS RENDSZEREK

Vadász 24

Parancsbehelyettesítés

• A processzek szokásosan a szabványos kimenetükre írnak. A burok processz is …

• A ` ` (grave accent) közé zárt parancs lefut és kimenete kifejtődik!

• Példa:

$ valt=`wc -l < myfile.txt` # a valt felveszi

# a sorok számát

$ test `wc -l < myfile.txt` -gt 3 && cat myfile.txt

# ha több mint 3 sorból áll, írja ki

Page 25: OPERÁCIÓS RENDSZEREK

Vadász 25

Egy kis összefoglalás az átalakításokról …

• A burok processz a parancslistát beolvassa, elemzi és átalakítja majd végrehajtja, végrehajtatja …

• Milyen átalakításokat vettünk?– Szabványos adatfolyamok leképzésének megváltoztatását

(cső, fájlba, fájlból átirányítások, parancs behelyettesítés)

– Szükség esetén processz szeparálásokat (processzt kreál, abba célszerű programot tölt be, akár a szabványos adatfolyamok leképzésének változtatása miatt, akár zárójelezés miatt).

– Fájlnév behelyettesítéseket.

• Lesz még változóbehelyettesítés átalakítás is …

Page 26: OPERÁCIÓS RENDSZEREK

Vadász 26

A burok, mint programnyelv

• A burokprogram (shell script)– szövegszerkesztővel készült ASCII fájl,

– parancsokat (csöveket, parancslistákat) tartalmaz soraiban,

– esetleg beágyazott input sorokat.

• A burokprogram odaadható a burok-értelmezőnek, hogy dolgozza fel (hogy futassa.)

Page 27: OPERÁCIÓS RENDSZEREK

Vadász 27

Burok program futtatás

• Fájlokhoz való hozzáférési kategóriák: r w x– A burok programokhoz az r (olvasni) hozzáférés

elengedhetetlen

– Az x (futtatni) hozzáférés ajánlott • chmod +x burokprogram # futtathatóvá tétel parancsa

• Csak olvasható burokprogramnak nem lehet argumentumot adni, de az alábbiak szerint futtahatjuk:$ sh < burokprogram

$ sh burokprogram

$ . Burokprogram # ún. sourcing: ua. processzben

Page 28: OPERÁCIÓS RENDSZEREK

Vadász 28

Burok program futtatás

burokprogram arg1 arg2 … • Azaz, a burok programot tartalmazó fájl neve a

parancs neve ( PATH változó szerinti keresés van itt is).

• Mi is történik? (ismétlés)– A promptot adó processz beolvassa a sort, elemzi. – Megállapítja, ez „külső parancs”, burokprogram.– Kreál processz, amibe a /bin/sh-t tölt, és aminek stdin

csatornája a burokprogram szövegfájl. A gyermek processznek a maradék argumentumokat átadja.

– A promptot adó processz megvárja, míg gyermeke lefut. – A gyermek processz a fájlt olvassa és végrehajtja.

Page 29: OPERÁCIÓS RENDSZEREK

Vadász 29

A burok program

• Mint programnak vannak – adatszerkezetei, és vannak

– vezérlési szerkezetei.

– Természetesen kommentározható.

A kommentározás• # után a sor maradéka kommentár

• A burokprogram első sora mint kommentár különleges! Lásd később!

• Tanszékünk kódolási szabályzata előírja a kommentározást!

Page 30: OPERÁCIÓS RENDSZEREK

Vadász 30

A burok adatszerkezetei

• Az adatok típusa: füzér (szöveglánc, string)• Csak numerikus karakterekből álló füzér (néha)

numerikus adatként viselkedhet: numerikus operációk hajthatók végre rajtuk

• Az adatok lehetnek:– Változók: ekkor van nevük, van pillanatnyi (ún. definiált)

értékük;

– Állandók (konstansok). A konstansok ún. lexikális konstansok: a szövegkörnyezetből kiderül az értékük.

• Terminológiai „rendetlenség”: változó – paraméter elnevezés is szokásos

Page 31: OPERÁCIÓS RENDSZEREK

Vadász 31

Az adatszerkezetekhez megjegyzések

• Egyes burkok tömbváltozókat is képesek kezelni (csh, tcsh, bash)– Ezen belül asszociatív tömböket (bash). Vö. awk.

• Egyes burkok numerikus típusú változókat is kezelnek (csh, tcsh)

Page 32: OPERÁCIÓS RENDSZEREK

Vadász 32

A változók csoportosítása

• A burok által definiált változók: nevüket nem mi választjuk meg. Lehetnek:– pozicionális változók (paraméterek),

– egyéb a shell által definiált (speciális) változók.

• A felhasználók által definiált változók (nevüket kiválaszthatjuk):– a rendszergazda által definiáltak: konvencionális nevek!

– Az egyes felhasználók által definiáltak: legyenek itt is konvencióink!

Page 33: OPERÁCIÓS RENDSZEREK

Vadász 33

A pozicionális paraméterek

• Nevük: 0 1 2 3 4 5 6 7 8 9• Pillanatnyi értékük: az aktuális argumentumok (a

szavak)• Emlékezz:

– a 0. szó a parancs neve: a 0 nevű változó pill. értéke,

– az 1. szó az 1. argumentum: az 1 változóban van.

• Annyi változó definiált, ahány szó van!• Ha 9-nél több argumentum van: a shift paranccsal

“eltolhatók“, így kezelhetők!

Page 34: OPERÁCIÓS RENDSZEREK

Vadász 34

Néhány, a shell által definiált változó

Neve Értéke Kifejtése

# A pozícionális paraméterek száma $#

? Az utolsó parancs visszatérési értéke $?

$ A burok processz pid-je $$

! Az utolsó háttérben futó proc. pid-je $!

- A burok opciók $-

* A pozícionális paraméterek szólistája $*

0 A parancs neve $0

Page 35: OPERÁCIÓS RENDSZEREK

Vadász 35

Néhány, a rendszer által szokásosan definiált, exportált változó

Neve Értéke Kifejtése

HOME A bejelentkezési jegyzék $HOME

MAIL A levelezési fájlunk $MAIL

PATHParancsok keresési

ösvénylistája$PATH

USER A felhasználó neve $USER

IFS A burok opciók $IFS

TERM A terminál típusa $TERM

PS1 Az elsődleges prompt $PS1

Page 36: OPERÁCIÓS RENDSZEREK

Vadász 36

Változódefiniálás

• Szintaxis$ valtozo=fuzerkifejezes [valtozo=fuzerkifejezes]

• Példa:$ tmpfile=/tmp/valami

$ ures= # az ures definiált, de üres füzér

• Vigyázz! A következő nem jó! Miért?$ valtozo = fuzerkonstans

(Mert ez már 3 szó! Tilos a fehér karakter az = előtt és után!)

Page 37: OPERÁCIÓS RENDSZEREK

Vadász 37

Hivatkozás változókra: kifejtésük

• Itt: valtváltozónév, szo szövegkifejezés, parancs.

• Ha a : (colon) hiányzik, a 0 string-hosszúság nem ellenőrződik!

${valt:-szo} Ha a valt definiált és nem 0 sztring, akkor kifejtődik. Különben a szo fejtődik ki.

${valt:=szo} Ha a valt nem definiált vagy 0 sztring, akkor felveszi a szo-t. Ezután a valt kifejtődik.

${valt:?szo} Ha a valt definiált és nem 0 sztring, akkor kifejtődik. Különben kiíródik a szo|default sztr.

${valt:+szo} Ha a valt definiált és nem 0 sztring, akkor kifejtődik a szo. Különben semmi sem fejtődik ki.

Page 38: OPERÁCIÓS RENDSZEREK

Vadász 38

A változók érvényességéhez:a processzek környezete

• Minden processznek - így a buroknak is - van környezete (environment)

• A környezet: vált=szöveglánc sorokból álló tábla• Gyermek processz a környezetet örökli a szülőtől• Mikor az sh processz indul, végigolvassa a környezetét és definiálja a benne található változókat

• További definíciók is lehetnek az sh életében, átdefiniálások is lehetnek. Ezek nem kerülnek a környezetbe (nem örökölhetők)

Page 39: OPERÁCIÓS RENDSZEREK

Vadász 39

Exportálás: többszintes öröklődés

• Exportálással változót a környezetbe „teszünk” (ezzel lefelé öröklődővé tesszük)

> export változónév-lista

Pl. a rendszergazda valahol “leírta”:

$ export MAIL HOME PATH ...• Exportálással csak leszármazottak örökölhetnek

(fölfelé nem)• Nem exportált változó nem látható a leszármazott

processzekben, de visszatérve abba a burokba, amiben definiáltuk újra láthatóvá válik

Page 40: OPERÁCIÓS RENDSZEREK

Vadász 40

Egyszintes öröklődés

• Egyszintes környezetbe tétel$ valt=kifejezés parancs # ugyanabban a sorban

– ha a parancs külső: látni fogja – ha belső: nem látja

$ valt=kifejezés; parancs # ugyanabban a sorban– ha a parancs külső: nem látja– ha belső: látja.

• (Új, pontosabb definíció az egyszerű parancsra: opcionális számú változódefiníció, amit szavak listája és opcionális átirányítási előírás követ. )

Page 41: OPERÁCIÓS RENDSZEREK

Vadász 41

Vezérlési szerkezetek

• Szekvenciális programszerkezetek• Elágazások• Hurkok

A szekvenciális szerkezetek

• A parancslisták

Page 42: OPERÁCIÓS RENDSZEREK

Vadász 42

Az if elágazás

if plista1

then plista2

[elif plista3

then plista4]

[else plista5]

fi

• A plista1 és plista3 predikátumok: igazak, ha normális visszatérési értékül van.

• Figyelj a kulcsszavakra: if, then, elif, else, fi

• Érdekes a fi “lezáró“.

• A [ ] nem része szintaxisnak: jelzi, elmaradhat a bezárt rész.

Page 43: OPERÁCIÓS RENDSZEREK

Vadász 43

A case elágazás

case szo in

minta1 ) lista1 ;;

minta2 ) lista2 ;;

...

esac

• Kifejtődik a szo és összevetődik a mintákkal (az írt sorrendben). Ha “egyezés“ van, végrehajtódik a mintához tartozó lista és vége!

• A minták (hasonlítanak a fájlnév behelyettesítési mintákhoz):

• * ) akármi, default.

• p1|p2 alternatíva

• [p1p2] alternatíva

• Érdekes kulcsszavak: case, in, esac, figyeld a ) -t, a ;; -t

Pl. -x|-y-[xy]

ugyanaz

Page 44: OPERÁCIÓS RENDSZEREK

Vadász 44

A for ciklus

for valt [in szolista]

do

plista

done

• A valt rendre felveszi a szolista elemeit és minden értékével végrehajtódik a plista (a ciklus teste).

• Vedd észre a kulcsszavakat: for, in, do, done

• Elmaradó in szolista ugyanaz, mint in $* (az aktuális paraméterlista a szólista)

Pl.for i in egy ket haromdo echo $idone

Page 45: OPERÁCIÓS RENDSZEREK

Vadász 45

Egy kérdés

• Mi a különbség?

for valt in $*

....

for valt

....

for valt in *

....

Page 46: OPERÁCIÓS RENDSZEREK

Vadász 46

A while ciklus

while plista1

do

plista2

done

until plista1

do

plista2

done

• Végrehajtódik plista1, és ha normális visszatérésű, a plista2, majd újra a plista1, s.í.t.

• Némely shellben until ciklus is van.

• Új kulcsszavak!

• Most már érthetjük a parancs visszatérési érték értelmét!

Page 47: OPERÁCIÓS RENDSZEREK

OPERÁCIÓS RENDSZEREK

Felületek a kernelhez: a burok és az API

Vége