: Mikrokernel operációs rendszer a gyakorlatban Nagy András Baráth Áron Conet Kft. 2017.
Tartalom 1 2 3 4
Tartalom Hardware Software 1 2 3 4
Programok Hardware Software Natív (lefordított) vagy interpretált Programok végrehajtásához futási környezet szükséges Környezet: Megfelelő hardware és software összesége Kapcsolat a program és a külvilág között
Hardware környezet Hardware Software Utasítások beolvasása, értelmezése és végrehajtása Be- és kimenetek kezelése Nagyon alacsony szint ( vas ) Végrehajtó egység (processzor) Memória (RAM, ROM, FLASH) Perifériák Sokféle: komplex, nem nyitott, nem hibamentes Nehéz kezelni Léteznek speciális hardware környezetek
Hardware alapok Hardware Software Végrehajtó egység (processzor) Sokféle típus Általános célú (asztali gép, szerver, tablet) Speciális célú (grafika, hang) Mikrokontroller (teljes rendszer egy chipben (SOC)) Elmosódtak a határvonalak Technológiai fejlődés hatása 1994: Intel Pentium P54C (75-120 MHz, 8-12W, $849) 2015: Intel Atom x5-z8500 (4mag 1.44 GHz, 2W, $25) 2014: ARM Cortex A7 (4mag 1.2 GHz, 1W, $2) MCU 2011: ARM Cortex M3 (180 MHz, 0.25W, $5) MCU 2017: ARM Cortex M0+ (48 MHz, 0.01W, $1)
Processzor alapok Hardware Software Kontextus Programszál futásához erőforrások (regiszterek, flag) Cserélés hosszabb ideig is eltarthat Privilegizált állapot Általában 2 szint Privilegizált, Nem privilegizált Megszakítások Software megszakítások, kivételek (rendszerhívás) Hardware megszakítások aszinkron (időzítő)
Hardware Software Processzor alapok: Processzor címtér Műveletek által elérhető memória Von Neumann: egy címtér utasításoknak és adatnak Harvard: külön címtér utasításoknak és adatnak Nem feltétlenül egyezik meg a fizikailag címezhető memória méretével, lehet nagyobb vagy kisebb 32 bit 32 bit virtuális, 36 bit fizikai (PAE) 64 bit 48 (56) bit virtuális, 36-46 bit fizikai Hardware perifériák regiszterei címtérbe leképezve
Hardware Software Processzor alapok: Virtuális memória Fix méretű (4 KiB) blokkokra osztott címtér leképezés A leképezés nem feltétlenül folytonos Fizikai memória töredezettségét elfedi Váltogatható (kontextus váltás) Lassabb elérés, laphibák kezelése Virtuális címterek átfedésben is lehetnek Nem minden processzor támogatja
Hardware Software Programok software környezete Elfedi a hardware környezetet Egységes software felületet biztosít Több szintű (pl. interpreter, web böngésző) Lehet nyers vasra (bare metal) is programot írni Beágyazott rendszerekben nem ritka Operációs rendszer!
Operációs rendszer Hardware Software Alacsony szintű software réteg Szolgáltatások egységes felülete Széles spektrum Két nagy pólus: Microkernel és Monolitikus kernel Hol húzzuk meg az operációs rendszer határvonalát Operációs rendszer részei egyben vagy külön Szétosztott vagy központosított Sebesség, komplexitás, modularitás vonzata van Hibrid kernel (részben micro, részben monolitikus)
Hardware Software Operációs rendszer: Microkernel Kicsi kernel, csak alapfunkciók Szolgáltatások külön programokban Üzenetküldés a központi mechanizmus Lassabb lehet a kontextus váltások miatt Biztonságosabb Párhuzamos működés (több processzor) Nem kell kernel állapotot menteni
Hardware Software Operációs rendszer: Monolitikus kernel Egy nagy kernel Minden funkciót a kernel lát el (modulok) Kevesebb kontextus váltás Nem szeparált, belső erőforrás függőségek Device driver magával ránthatja az egész rendszert Szükséges a kernel állapotának mentése
Hardware Software Operációs rendszer: Alapvető felhasználási terület Microkernel Kis helyigény Valós idejű feladatok Beágyazott rendszerek (GSM/GPRS modem) Monolitikus kernel Nagyobb rendszerek Határok elmosódnak
Tartalom Kernel Kernel objektumok Kernel rendszerhívás 1 2 3 4
Tervezési szempontok Kernel Kernel objektumok Kernel rendszerhívás Alacsony memória és teljesítmény igény Gyors működés, rövid válaszidő Modularitás Könnyű portolhatóság
operációs rendszer Kernel Kernel objektumok Kernel rendszerhívás Microkernel Valós idejű ütemezés Multitasking, multithreading Virtuális memória kezelése, de egy címtér ASLR adja magát Task kontextusában futó megszakítások Nagyon kevés architektúra függő rész
Kernel Kernel objektumok Kernel rendszerhívás microkernel tulajdonságok Objektum orientált szemléletmód Alapvetően C-ben + C preprocesszált ASM Gyors, egyszerű rendszerhívások (timeout) Single stack kernel (stateless) Paraméter átadás csak regisztereken keresztül Üzenet alapú kommunikáció
Kernel objektumok Kernel Kernel objektumok Kernel rendszerhívás Közös header ( ősosztály ) Csak rendszerhívásokon keresztül lehet hozzáférni Használat előtt létre kell hozni Egy objektum több láncon is szerepelhet (owner, timeout) Objektumok automatikus törlése (tulajdonos törlése) Kritikus futási időben nem lehet objektumot létrehozni Task felszabadítása sokáig is eltarthat kiszervezhető
Task Kernel Kernel objektumok Kernel rendszerhívás Alap összefogó objektum Tulajdonosa más objektumoknak Közös címtér a futási szálaknak Nincs szülő-gyerek kapcsolat Prioritással rendelkezik Privilegizálható
Thread Kernel Kernel objektumok Kernel rendszerhívás Futási egység kontextussal Task-hoz tartozik, annak a címterében fut Prioritással rendelkezik (Task-on belüli prioritás) Kell stack-et definiálni neki Gyorsan létrehozható
Memo (MEMory Object) Kernel Kernel objektumok Kernel rendszerhívás Memória lapokból álló egysége Task-hoz tartozik Nem feltétlenül folytonos, de lehet kérni (DMA) Nem feltétlenül tartozik hozzá fizikai memória (HW IO) Lehet fix fizikai címre kérni (HW IO) Speciális típus Copy Memo, copy-on-write megvalósítására Tartalma View-on keresztül címezhető
View Kernel Kernel objektumok Kernel rendszerhívás Nézet egy adott Memo adott részére Virtuális címtér egybefüggő része Task-hoz és Memo-hoz tartozik Lehet több különböző View egy Memo-ra Virtuális címek kiosztása AVL-fa használatával
View kezelés Kernel Kernel objektumok Kernel rendszerhívás Virtuális cím elérésekor van felhasználva Laphiba (kivétel) esetén: Memo lap foglalás, másolás, tisztítás Task virtuális címterébe leképezés (mappelés) Laphiba indukálhat magasabb szintű műveleteket: On demand loading On demand relocation
Memo és View leképezése Kernel Kernel objektumok Kernel rendszerhívás VA 0 VA 1 VS Ta 0 VS 1 0 V max P MA 0 MB 0 MB 1 MA 1 MS 0 MS 1 0 P max VB Tb 0 VB 1 VS 0 VS 1 0 V max
View címtér tulajdonságok Kernel Kernel objektumok Kernel rendszerhívás Egy közös virtuális címtér van, de védett (szeparált) Memória mindenképpen korlátos, nincsenek végtelen erőforrások Közös címtér esetén pointerek ugyanoda mutatnak Gyors shared memory Hasonló felépítés VM nélkül is (MCU) Lehet csak virtuális címteret foglalni (VirtualAlloc)
Kernel Kernel objektumok Kernel rendszerhívás View címtér tulajdonságok (folyt.) Program részei futási időben is megoszthatóak Nem kell L1i cache-t törölni kontextus váltáskor VIVT (virtually indexed virtually tagged) esetén Tényleges párhuzamos működés Relokálni kell a programokat
Message Port (MsgPort) Kernel Kernel objektumok Kernel rendszerhívás Üzenetek küldésére és fogadására szolgál Task-hoz tartozik Fix mennyiségű (10-20) üzenet tárolására alkalmas Kapacitás fordítási időben definiált Aszinkron küldés Ha betelt, akkor a várakozók sorába kerül a küldő Ha üres, akkor a várakozók sorába kerül a fogadó
Message (Msg) Kernel Kernel objektumok Kernel rendszerhívás Folyamatok közötti kommunikáció alapja Nem valódi objektum (csak SignalMsg esetében) Csak üzenetportokon keresztül lehet küldeni és fogadni 3 érték (32 vagy 64 bit, architektúra specifikus) Konvenció: küldő, üzenet1, üzenet2 (sender, msg1, msg2) Sender alapvetően egy Handle Üzenetek értéke bármi lehet (azonosító, mutató, kompozit érték)
Signal Message (SignalMsg) Kernel Kernel objektumok Kernel rendszerhívás Gyorsan és garantáltan akarunk üzenetet küldeni Task-hoz tartozik Akár többször is elküldhetjük Fogadás után nem törlődik, újrafelhasználható Megszakításból való üzenet küldésre Megszakításban nem lehet várakozni
Kernel Kernel objektumok Kernel rendszerhívás Interrupt Service Routine (ISR) Hardware megszakítások kezelésére Egy megszakításhoz többet is lehet rendelni Task-hoz tartozik, annak címterében, jogosultságával fut Speciális szál, nem callback Van saját stack-je (tulajdonos Task címteréből) Hívhat rendszerhívásokat, de nem várakozhat Rendszerhívással tér vissza (RetISR) Laphiba vagy várakozás esetén abortálódik
Rendszerhívás tulajdonságok Kernel Kernel objektumok Kernel rendszerhívás 60 rendszerhívás Regisztereken keresztüli paraméter és eredmény átadás A kernel nem látja a hívó címterét Laphiba speciális rendszerhívás, blokkolódhat a Thread Kivételek: Thread fogja feldolgozni FPU regiszterek betöltése, kimentése csak szükség esetén Kernel nem használ FPU-t
Rendszerhívás felépítés Kernel Kernel objektumok Kernel rendszerhívás Architektúra függő rész (Assembly és C) Rendszerhívás prológus és epilógus Pár funkció csak itt van megvalósítva (pl. RetISR) Magas szintű rendszerhívás függvény (C) Objektumok létrehozás, megszüntetés, módosítás Task-ok, Thread-ek várakoztatása, felélesztése Ütemezés Platform függő részek (csak header, C makrók) Pl. megszakítások száma, regiszterek kiosztása
Kernel Kernel objektumok Kernel rendszerhívás Rendszerhívás architektúra függő rész 1 Átlépés rendszer üzemódba (sysenter, syscall, svc,...) 2 Alapvető regiszterek mentése Thread struktúrába 3 Bejövő paraméter vizsgálat (rendszerhívás száma) 4 Futási idő elszámolása 5 Magas szintű rendszerhívás (ASM C) 6 Visszatérési érték értelmezése Kell-e Thread-et (és Task-ot) váltani? Ha váltás van, ütemező hívás (ASM C) Váltás esetében maradék regiszterek mentése 7 Ha kell, akkor virtuális címtér váltás (másik Task) 8 Thread regiszterek visszatöltése, és visszatérés
Kernel Kernel objektumok Kernel rendszerhívás Rendszerhívás magas szintű függvény törzs 1 Objektum paraméterek (Handle) vizsgálata Pseudo handle feldolgozás Létezik-e az Objektum? Végrehajtható-e a művelet? Megfelelőek a jogosultságok? 2 Művelet végrehajtása Fel kell ébreszteni alvó szálat? Várakoztatni kell a hívó szálat? Megváltoztak-e a prioritások?
Kernel használata Kernel Kernel objektumok Kernel rendszerhívás Feladathoz szabható rendszer A virtuális memória kezelés megléte meghatározó Virtuális memória kezelést nem támogató hardware Kisebb rendszer (Mikrokontrolleres környezet) Sok minden kiesik (nincs laphiba) Virtuális memória kezelést támogató hardware Általános számítógépes környezet (ARM, PPC, x86, x86 64) Teljes értékű nagy rendszer építhető Lehet mindkettőn működő programot írni
Tartalom Alapok Rendszer indulás (boot-olás) Device-ok, service-ek és daemon-ok Alkalmazások és fejlesztés 1 2 3 4
I/O request Alapok Rendszer indulás (boot-olás) Device-ok, service-ek és daemon-ok Alkalmazások és fejlesztés Megnyitott Device példány szükséges hozzá Nagy mennyiségű adat is átküldhető Üzenet küldése a Device-nak T D 0 V max IOreq Device T P 0 V max
Device class Alapok Rendszer indulás (boot-olás) Device-ok, service-ek és daemon-ok Alkalmazások és fejlesztés Azonos szerepkörű device-ok (service-ek) közös interfésze DCLS_BLOCK DCLS_FILESYSTEM DCLS_SERVICE... Egy device (service) több class-t is megvalósíthat pl. TCP/IP device: DCLS_TCPIP, DCLS_SERVICE Vannak opcionális parancsok pl. FS_CMD_MKDIR
Device Framework Alapok Rendszer indulás (boot-olás) Device-ok, service-ek és daemon-ok Alkalmazások és fejlesztés A rendszerben sok device driver található Ezek hasonló elven működnek, sok tevékenység ugyanaz Kód újra felhasználás Aszinkron működés Library (static vagy dynamic)
Alapok Rendszer indulás (boot-olás) Device-ok, service-ek és daemon-ok Alkalmazások és fejlesztés Opcionális corutin könyvtár (utask) A device framework kiegészítése Device-nak (service) egyszerre nagyon sok tevékenysége lehet Rész tevékenységek, vagy egymásra épülő tevékenységek Nagyon kevés erőforrás szükséges hozzá Corutinok, amik meg tudják őrizni állapotukat (állapotgépek) Szinkronizálhatóak
Program loader Alapok Rendszer indulás (boot-olás) Device-ok, service-ek és daemon-ok Alkalmazások és fejlesztés Program indítása: egy leíró küldése a loadersvc-nek Adatszerkezetek előálĺıtása, és erőforrások foglalása Szükséges view-ok készítése Szükség esetén page fault exception handler installálása Program betöltése page fault-ok mentén Kód relokálása (reloc info kell az ELF-be) Külső szimbólumok (weak, undef) feloldása libsvc-vel Rendszerhívások külön shared view-ban (Intel vs AMD)
Loader: crt0 Alapok Rendszer indulás (boot-olás) Device-ok, service-ek és daemon-ok Alkalmazások és fejlesztés Mindenképpen része a programnak (mindig static library) Legalapvetőbb tevékenységek elvégzése crt inicializálása main meghívása crt takarító eljárásának meghívása
Loader: crt Alapok Rendszer indulás (boot-olás) Device-ok, service-ek és daemon-ok Alkalmazások és fejlesztés Nagyobb library (lehet dinamikus is) Heap méret beálĺıtása libc kontextus és kivételkezelők inicializálása Parancssori argumentumok előfeldolgozása Task név beálĺıtása (később)
bootfs és cpio Alapok Rendszer indulás (boot-olás) Device-ok, service-ek és daemon-ok Alkalmazások és fejlesztés Az adatok bootfs-en tárolódnak bootloader.ini Rendszer image-ek: *.cpio.xz Multi-config image Tartalma teljes egészében a /run alá kerül (tmpfs) Alapvető device-ok IDE, SATA vezérlő Network driver-ek, TCP/IP service VFS, file rendszerek Config-ok, script-ek, devman ini-k
Config script Alapok Rendszer indulás (boot-olás) Device-ok, service-ek és daemon-ok Alkalmazások és fejlesztés Egyszerű szintaxis (értékadás, szekvencia és elágazás) Alapműveletek elvégzése egész számokon String konkatenáció Konverziók Programindítás Műveletek a registry-vel: kulcs létrehozás kulcsra várakozás kulcs törlés A device manager script nyelve
Device manager Alapok Rendszer indulás (boot-olás) Device-ok, service-ek és daemon-ok Alkalmazások és fejlesztés Supervisor A detektorok információi ide futnak be Programok (újra)indítása Függőségek kezelése A futtatási környezet egyszer értékelődik ki Config script-ek futtatása File rendszer interface: /dev Karakter és blokk device-ok listázása
Alapok Rendszer indulás (boot-olás) Device-ok, service-ek és daemon-ok Alkalmazások és fejlesztés /$ ls -l /dev dr-xr-xr-x 1 root root 0 2017-10-16 14:26:56 detectors dr-xr-xr-x 1 root root 0 2017-10-16 14:26:56 iniroot crw-rw-rw- 1 root root 0 2017-10-16 14:26:56 null dr-xr-xr-x 1 root root 0 2017-10-16 14:26:56 programs c--------- 1 root root 0 2017-10-16 14:26:57 ptmx drwxrwxrwx 1 root root 0 2017-10-16 14:26:56 pts crw-rw-rw- 1 root root 0 2017-10-16 14:26:56 random brw-rw-rw- 1 root root 0 2017-10-16 14:26:56 sata0n0 brw-rw-rw- 1 root root 0 2017-10-16 14:26:56 sata0n1 brw-rw-rw- 1 root root 0 2017-10-16 14:26:56 sata0n2 lrwxrwxrwx 1 root root 32 2017-10-16 14:26:56 tty -> /dev/pts/0 crwxrwxrwx 1 root root 0 2017-10-16 14:26:57 tty0 crw-rw-rw- 1 root root 0 2017-10-16 14:26:56 ttys0 crw-rw-rw- 1 root root 0 2017-10-16 14:26:56 urandom crw-rw-rw- 1 root root 0 2017-10-16 14:26:56 zero
Detektorok Alapok Rendszer indulás (boot-olás) Device-ok, service-ek és daemon-ok Alkalmazások és fejlesztés Hardware konfiguráció detektálása (ACPI, PCI) Másra is használható Statikus (PCI) és dinamikus (USB) detektálások A device manager-nek küldi el A detektált hardware meghajtója kommunikálhat a detektorával Szabványos interface
Detektorok (xen példa) Alapok Rendszer indulás (boot-olás) Device-ok, service-ek és daemon-ok Alkalmazások és fejlesztés
Registry Alapok Rendszer indulás (boot-olás) Device-ok, service-ek és daemon-ok Alkalmazások és fejlesztés Futási idejű információk szálbiztos megosztása task lista device lista Értesítési mechanizmus Típusok: dir, tmp, int, bin Szerializálhatóság Guarded key
Registry guarded key Alapok Rendszer indulás (boot-olás) Device-ok, service-ek és daemon-ok Alkalmazások és fejlesztés A registry kulcsnak lehet egy tulajdonosa A tulajdonos egy megnyitott registry példány A példány bezáródásakor a kulcs automatikusan törlődik Felhasználás: task lista, device lista
Registry Watch Alapok Rendszer indulás (boot-olás) Device-ok, service-ek és daemon-ok Alkalmazások és fejlesztés Registry bejegyzésekre A watch mélysége beálĺıtható Kulcs vagy részfa megváltozása esetén üzenetet küld Üzenet típusok: módosítás és törlés Felhasználás: IPC ( globális változó helyett)
Library Service Alapok Rendszer indulás (boot-olás) Device-ok, service-ek és daemon-ok Alkalmazások és fejlesztés Program méretét növeli a static library Érdemes a programkönyvtárat külön tenni Dinamikus hozzászerkesztés: dynamic library Input adat: Shared Executable (sx) Szimbólumok feloldása Szükség esetén library megosztása a klienssel
Shared Executable (sx) Alapok Rendszer indulás (boot-olás) Device-ok, service-ek és daemon-ok Alkalmazások és fejlesztés Stateless (shared) Nincs relokálás Nincs allokálás Korlátozott Nem lehet állapota Stateful (mapped) GOT/PLT relokálása.data,.bss allokálás Univerzális Tárolhat állapotot
Library példa (1) Alapok Rendszer indulás (boot-olás) Device-ok, service-ek és daemon-ok Alkalmazások és fejlesztés
Library példa (2) Alapok Rendszer indulás (boot-olás) Device-ok, service-ek és daemon-ok Alkalmazások és fejlesztés
Library példa (3) Alapok Rendszer indulás (boot-olás) Device-ok, service-ek és daemon-ok Alkalmazások és fejlesztés
Library példa (4) Alapok Rendszer indulás (boot-olás) Device-ok, service-ek és daemon-ok Alkalmazások és fejlesztés
VFS Alapok Rendszer indulás (boot-olás) Device-ok, service-ek és daemon-ok Alkalmazások és fejlesztés A file system inferfészek nagyon alacsony szintűek Egységes felület kell Elég a VFS gyökerét ismerni Könyvtár bejegyzések cache-elése File system-ek felé csak entry id (inode) Speciális bejegyzések: char, block, fifo, socket
File system service Alapok Rendszer indulás (boot-olás) Device-ok, service-ek és daemon-ok Alkalmazások és fejlesztés Class: DCLS_FILESYSTEM Különböző file system-ek közös interfésze tmpfs ext2 ffs bootfs FAT32 Nem feltétlenül valósít meg minden műveletet Összekötés blokk vagy flash device-szal Mindegyik a VFS-en keresztül érhető el
Network interface Alapok Rendszer indulás (boot-olás) Device-ok, service-ek és daemon-ok Alkalmazások és fejlesztés Ethernet és Wi-Fi Adatcsomagok küldése megadott MAC címre A hogyan nem érdekes Közös interfész: DCLS_NETIFACE Speciális műveletek (NIF_CMD_GETOPT, NIF_CMD_SETOPT)
TCP/IP stack Alapok Rendszer indulás (boot-olás) Device-ok, service-ek és daemon-ok Alkalmazások és fejlesztés Network interfészek felhasználása Absztrakciós réteg Robusztus, moduláris és testreszabható IPv4 üzenetek küldése ICMP UDP TCP Alkalmazás szintű protokollok DNS DHCP Adatok perzisztálása a registry segítségével
SystemService Alapok Rendszer indulás (boot-olás) Device-ok, service-ek és daemon-ok Alkalmazások és fejlesztés Minden task megszűnésére feliratkozik (üzenet küldés) Programok exit code-jának kezelése Várakozás program befejeződésére Device-ok értesítése task törlődéséről Megnyitott device példányok automatikus bezárása Kevés program kerül explicit interakcióba vele
telnetd Alapok Rendszer indulás (boot-olás) Device-ok, service-ek és daemon-ok Alkalmazások és fejlesztés Telnet daemon Fejlesztéshez kellett Egyszerű Alacsony erőforrás igény Megbízható (TCP) Tesztnek is kiváló
httpd Alapok Rendszer indulás (boot-olás) Device-ok, service-ek és daemon-ok Alkalmazások és fejlesztés Hypertext Transfer Protocol FastCGI (és CGI) támogatás Többszálú request feldolgozás FastCGI programok automatikus betöltése és cache-elése FastCGI-k újra felhasználhatók
ftpd Alapok Rendszer indulás (boot-olás) Device-ok, service-ek és daemon-ok Alkalmazások és fejlesztés File Transfer Protocol Újra fordított binárisokat gyorsan kellett másolni TFTP kényelmetlen és nem megbízható httpd-hez hasonlóan többszálú Nem titkosított
HTTP kérés kiszolgálása Alapok Rendszer indulás (boot-olás) Device-ok, service-ek és daemon-ok Alkalmazások és fejlesztés
pkman Alapok Rendszer indulás (boot-olás) Device-ok, service-ek és daemon-ok Alkalmazások és fejlesztés Package manager Teljesen C-ben íródott.pkg.cpio.xz formátum Integritás: SHA-256 Verifikálás: digitális aláírás (RSA, 2048+) Az alpm és a pacman ihlette Nem kell minden programnak saját update mechanizmus
makepk Alapok Rendszer indulás (boot-olás) Device-ok, service-ek és daemon-ok Alkalmazások és fejlesztés pkman-kompatibilis package előálĺıtása Különböző sémák A package formátum is paraméter Feladata: Külső tool-ok meghívása (build) Package leíró (integritás, aláírás) cpio összeálĺıtása Tömörítés (xz)
barsh Alapok Rendszer indulás (boot-olás) Device-ok, service-ek és daemon-ok Alkalmazások és fejlesztés A bash egy egyszerűsített verziója Nincs központi szerepe Automatikus- és környezeti változók kezelése Shell script lehetőség Figyelembe veszi a shebang-et (interpreter választás) Minimális a beépített parancskészlet
utibox Alapok Rendszer indulás (boot-olás) Device-ok, service-ek és daemon-ok Alkalmazások és fejlesztés Unix-ból ismert parancsok gyűjteménye ls cp mv Egyetlen program, közös függvények miatt Symlink-ek választják ki az eszközt Program betöltése lustán!
sysbox Alapok Rendszer indulás (boot-olás) Device-ok, service-ek és daemon-ok Alkalmazások és fejlesztés Rendszer erőforrásait és kernel objektumait kezeli task threads tview tmemo treereg Egyetlen program, közös függvények miatt Symlink-ek választják ki az eszközt Program betöltése lustán!
Dokumentáció Alapok Rendszer indulás (boot-olás) Device-ok, service-ek és daemon-ok Alkalmazások és fejlesztés Dokumentációk rendszerint package-ként: pl: threos-docs, sysbox-docs A dokumentáció frissítése is megoldott Opcionálisan telepíthetőek Rendszerint egyszerű html file-ok Olvashatóak pl. a cat tool-lal
I/O request-ekkel Alapok Rendszer indulás (boot-olás) Device-ok, service-ek és daemon-ok Alkalmazások és fejlesztés Teljesen aszinkron programok készítése Központi szereplő a MsgPort lesz Kapcsolat a külvilággal: registry (service) file system (vfs service) socket-ek (tcpip service)
POSIX Alapok Rendszer indulás (boot-olás) Device-ok, service-ek és daemon-ok Alkalmazások és fejlesztés A nyers I/O request-ek mellett nyúltott API Ismertebb, és rengeteg segédanyag elérhető Aszinkron alkalmazások továbbra is készíthetőek: poll A központi szereplő így is a MsgPort lesz! Kapcsolat a külvilággal: C99 és POSIX file API BSD-style socket API
Példák Alapok Rendszer indulás (boot-olás) Device-ok, service-ek és daemon-ok Alkalmazások és fejlesztés Több open source projekt is gond nélkül fordítható joe, tcc, ncurses, links grep, make, sed, yacc Több projekt forrásként érhető el ctris (make-elhető) 2048-c (binárisként is)
Konklúzió Alapok Rendszer indulás (boot-olás) Device-ok, service-ek és daemon-ok Alkalmazások és fejlesztés A alapvetően más alapokra épült Nem Unix/Linux, sem Windows Egységes API előny Fontos a POSIX (és a C89, C99) ismerete
Felhasználási terület Alapok Rendszer indulás (boot-olás) Device-ok, service-ek és daemon-ok Alkalmazások és fejlesztés PC-n (de csak x86 64) Beágyazott rendszerekben Kevés erőforrás ARM, PPC pl. OrangePI, de egyedi hardware is Az egész rendszer moduláris!
Tartalom Boot Rendszer állapot analizálása 1 2 3 4
Q&A Boot Rendszer állapot analizálása Az eddigiekkel kapcsolatos kérdések.
Első fázis Boot Rendszer állapot analizálása Elindul a vas BIOS kiválasztja a boot disk-et MBR betöltése és elindítása Boot partíció kiválasztása PBR betöltése és elindítása Bootloader betöltése és elindítása A bootloader kilistázza a boot-olható konfigurációkat A konfigurációk a bootfs-en találhatóak A mindenképpen a bootfs-ről indul
Második fázis Boot Rendszer állapot analizálása A konfigurációhoz tartozó XZ után a bootloader betöltése XZ kitömörítése memóriában CPIO boot.cfg alapján induló kernel image összeálĺıtása Az első modul a kernel A többi modul alapvető szolgáltatásokat valósítanak meg Pl: registry, loader, syslog, early serial, libsvc A kernel után a modulok indítása, melyek párhuzamosan futnak Pl: a devman elkezdi a saját tevékenységét, közben a PCI is végzi a detektálást A devman egyik utolsó target-je a shell
readlog Boot Rendszer állapot analizálása A devman tevékenysége (mit indított el) Detektálások Milyen detektált hardware-ek vannak Milyen driver lett hozzárendelve Mely hardware elemhez nem lett driver rendelve TCP/IP események (pl. DHCP log)
task Boot Rendszer állapot analizálása Éppen futó task-ok (process-ek) kilistázása -n: task nevének megjelenítése -s: task státusza B: blocked R: ready r: running Z: zombie
tview és tmemo Boot Rendszer állapot analizálása Task view-jainak/memo-inak listázása Root jogok szükségesek Task állapotának vizsgálata Allokált és használt memória mennyiége Memory leak detektálásra is használható
treereg Boot Rendszer állapot analizálása Registry megjelenítő segédprogram -a: bináris kulcsok ASCII-ként -F: bejegyzés típusa -x: egész számok hexadecimálisként
Boot Rendszer állapot analizálása Q&A Köszönjük a figyelmet! http://threos.io andy2@conet.hu baratharon@caesar.elte.hu