Operációs rendszerek

VIMIAB00  |  Mérnökinformatikus BSc  |  Félév: 4  |  Kredit: 5

A tantárgy célkitűzése

A tárgy célja az operációs rendszerek funkcióinak, működési elveinek, fő típusainak, valamint a konkurens és elosztott rendszerek programozási modelljeinek megismertetése, az elvek szemléltetése példákon, az operációs rendszer választás szempontjainak bemutatása. A tárgy és a hozzá tartozó laboratóriumi foglalkozások során komoly hangsúlyt kapnak gyakorlati ismeretek is, így a kurzus elvégzése elvezet az operációs rendszerek használatának mérnöki, készségszintű elsajátításához is.
Mészáros Tamás
Mészáros Tamás

docens

tárgyfelelős

A tárgy oktatói

A tantárgy részletes tematikája

Bevezetés: az operációs rendszer fogalma, célja, osztályozása, vázlatos felépítése, fejlődésének mérföldkövei, gyártók és termékek piaci részesedése, Windows és UNIX változatok, beágyazott operációs rendszerek, a kernel feladatai, főbb részei, nyílt rendszerek és szabványosítás, trendek, fejlesztési irányok.

Felépítés és működés: a kernel felépítésének alapelvei, modelljei; monolitikus és mikrokernel; réteges és moduláris szerkezet; a mai (monolitikus) kernelek problémái, az armored OS koncepció; mikrokernelek felépítése és a második generációs mikrokernelek (L4); az exokernel, a multiszerver és a hibrid kernelek; az OS elindulása, a Linux/Windows kernel inicializáció főbb lépései, a felhasználói működés beindulása, szolgáltatások és kritikus rendszerfolyamatok; UNIX futási szintek, sysinit és systemd; a rendszerhívások működési mechanizmusa, virtuális rendszerhívások.

Feladatkezelés: a felhasználói feladatok jellege (CPU-intenzív, I/O-intenzív, memória-intenzív); feladatok végrehajtásával kapcsolatos elvárások, mérőszámok (várakozási idő, körülfordulási idő, válaszidő, CPU-kihasználtság, átbocsájtó képesség, rezsiköltség, jósolhatóság, determinisztikusság); az optimális feladat-végrehajtó rendszer és megvalósítási nehézségeinek okai; a feladatkezelés alapfogalmai: taszk, folyamat és szál; a feladat-taszk összerendelés; az absztrakt virtuális gép fogalma; folyamatok és szálak összehasonlítása: tulajdonságok, előnyök, hátrányok, teljesítmény; taszkok adatai; taszkok állapotai és állapotátmenetei; taszkok létrehozása; taszk- és kontextusváltás.

Felhasználói felület: a felhasználói felület feladatai, típusai; külső és belső parancsok; a karakteres és grafikus felületek részei: parancsértelmező (shell), ablakozó rendszer, ablakkezelő, kijelzőszerver; a parancsértelmező programozása; tipikus kijelzőszerverek és ablakkezelők; munkamenet-kezelés, természetes nyelvű interfészek

Ütemezés: az ütemezés feladata, időskálái; egyszerű ütemezési algoritmusok (FCFS, RR, SJF, SRTF, PRIO) adatstruktúrái, működése, komplexitásuk, értékelésük; konvoj hatás és kezelése; kiéheztetés és öregítés; a prioritás inverzió és kezelése; statikus és dinamikus többszintű ütemezés, többszintű visszacsatolt sorok ütemező, a tradicionális UNIX ütemező részletes működése és értékelése; a többprocesszoros ütemezés alapjai (CPU-affinitás, erőforrás-allokáció és terheléselosztás), heterogén többprocesszoros rendszerek alapproblémái; ütemezők a gyakorlatban: számítási példák, Windows, UNIX, Linux CFS, Solaris.

Virtuális memóriakezelés: a memóriakezelés feladatai, virtuális tárkezelés; címleképezés, lapszervezés, cserehely (swap) és tárcsere (swapping); laphiba és szoftveres címleképezés; kerettábla, laptábla, diszk blokk leíró és swap térkép; az adatszerkezetek kapcsolatai és működése; fill-on-demand; copy-on-write; lapozási stratégiák: igény szerinti és előretekintő; vergődés; lapcsere algoritmusok: FIFO, második esély, legrégebben nem használt, legkevésbé használt; mostanában nem használt; lapok tárba fagyasztása; a laplopó taszk.

Kommunikáció: kommunikáció közös memórián keresztül: a PRAM modell, szálak közötti adatcsere, közös memória és memóriába ágyazott fájlelérés. Üzenetváltásos kommunikáció: címzési módon, szinkron és aszinkron átvitel, az adatátvitel lehetséges szemantikái, direkt és indirekt kommunikációs megoldások, az adatátviteli sebességet és a késleltetés meghatározó tényezők. Az L4 mikrokernel üzenettovábbiítási technikái. A hálózati (socket) kommunikáció rendszerhívásai és működése. A távoli eljáráshívás (RPC) technológia részei, interfészleíró nyelv, rpcgen, portmapper, a kommunikációs rendszer felépítése. Gyakorlati példák: UNIX jelzések, csővezetékek, üzenetsorok, osztott memória és egyszerű webszerver készítése C nyelven.

Szinkronizáció: taszkok versengése és együttműködése; klasszikus szinkronizációs problémák: író-olvasó, többszörös olvasók, termelő-fogyasztó (korlátos raktárral); a szinkronizáció és alapvető formái; kölcsönös kizárás és kritikus szakasz; atomi memóriaműveletek: test-and-set-lock (TSL) és compare-and-swap (CAS); zárolási eszközök: lock bit, mutex, szemafor, spinlock, ReaderWriterLock és RecursiveLock; a szemafor műveletei és megvalósításuk TSL segítségével; a kritikus szakasz megvalósítása TSL és szemafor alkalmazásával; erőforrás-foglalási gráf; a holtpont és kialakulásának feltétele; holtpont kezelése: strucc algoritmus, detektálás, feloldás, megelőzés és elkerülés; a biztonságos állapot fogalma és ellenőrzése; a prioritás inverzió és kezelése; kiéheztetés foglalással és várakoztatással; a szinkronizáció okozta teljesítményromlás; optimista zárolás; zárolás- és várakozásmentes szinkronizáció.

Fájlrendszerek: fájl, könyvtár, kötet, meghajtó, fájlrendszer és partíció fogalma; könyvtárstruktúrák gráf felépítése példákkal (Windows 10, Linux és Android), elérési út, szimbolikus és rögzített linkek; fájlok tulajdonságai, POSIX hozzáférési-jogosultságok, ACL és setuid, setgid, sticky bit; fájlrendszerek adminisztrációja: formázás, csatlakoztatás, ellenőrzés, hangolás; elterjedt fájlrendszerek; biztonsági mentések; fájlrendszerek programozói interfésze, soros és közvetlen elérés, fájlleíró és nyitott fájl objektum; ajánlott és kötelező zárolás; fájlok memóriába ágyazott megosztott elérése; nem blokkoló és aszinkron műveletek; adatok elhelyezése a háttértáron, szuperblokk, metaadatok, allokációs táblák, üres helyek menedzselése; diszkpufferelés; naplózó fájlrendszerek; virtuális fájlrendszer interfész; fizikai tárolórendszerek; I/O ütemezés; tárolórendszer-virtualizáció: LVM, RAID, hálózati és elosztott fájlrendszerek, NFS és Ceph.

Virtualizáció: a virtualizáció fogalma, alkalmazási területei; a virtuális gépek osztályozása; hardver virtualizáció: hosted és bare metal megoldások; CPU virtualizáció: emuláció, trap and emulate, binary translation, para- és hardveres virtualizáció; memória virtualizáció: árnyék laptáblák, para- és hardveres virtualizáció; I/O virtualizáció: szoftveres, paravirtualizáció és hardvertámogatott megoldás; virtualizációs rendszerek áttekintése: gyártók és termékek; felhőalapú rendszerek: IaaS, PaaS, SaaS; Docker; Mirage OS.

Laborok: a félév során hat laboratóriumi foglalkozást tartunk Windows, Linux, virtualizáció és beágyazott operációs rendszerek témakörökben.

A félév egyes előadásaihoz fakultatív házi feladatok is tartoznak, amelyek egyszerű programozási feladatokon keresztül segítik az adott előadás anyagának jobb megértését.