Kernel működés, hogyan?
2010-08-27T12:00:39+02:00
2010-09-17T00:50:26+02:00
2022-07-24T23:37:23+02:00
  • Azt szerintem hozzá kell tenni, hogy portokon keresztül - példaként a winchestert véve - egy (micro)controllerrel tudsz kommunikálni, ami aztán vezérli a megfelelő eszközt.

    Egyébként pl. Winben megnézheted eszközkezelőben az egyes eszközök részletes tulajdonságait, azon belül az Erőforrásokat. Ott látod pl. milyen I/O-portokon("tartományon") kommunikál velük a rendszer(ugyebár utasításkészlethez hozzátartozik a port I/0), milyen IRQ vonalon generál megszakítást. Amiket néztem csak így röviden, azok a teljesen szabványos portkiosztást használták(szabványos : neten is fellelhető doksik alapján :) ) Például látható, hogy a valós idejű óra a 70hexa, 71hexa portokon érhető el, és kicsit utánanézve kiderül, ez a CMOS-memória, ahonnan kiolvasható a pontos idő, dátum, fizikai memória mérete(ami a BIOS data area-ban is benne van) meg egy rakat dolog(2 port I/0 utasítással). Vagy fontosabb példát tekintve a rendszer időzítőt is megfelelő portokon tudod elérni, beállíani milyen a jelzések frekvenciáját, ami ugye a multitaszking miatt fontos : bizonyos számú jelzés elérkezte esetén már egy másik folyamatot futtatja a rendszer. Klassz, nem?

    Amúgy DMA memória-memória átvitelt is tud.
    Mutasd a teljes hozzászólást!
  • PCIe es DMA fogalmak nem utik egymast.
    Sot, itt kell nagyon.
    Regen nem volt nagy kaland par khz-et kiszolgalni procival.
    De most sok megas atviteleket csak DMA-val lehet gazdasagossan kezelni.
    Mutasd a teljes hozzászólást!
  • Az már a köv. gen. hangkartyak voltak, amikre a driver felkuldott 30 mega hangmintat es a kartyan levo dsp chip azokbol zenelt.
    De pl. wav lejatszasnal volt ez a DMA-zas. Meg talan a winyok is DMA-val mennek még ma is.
    A DMA az egy kis hardver izé az alaplapon, van belole tobb is, portokon lehet vezerelni es memoria-hardver kozotti adatatvitelt csinal a hatterben. Dos-os megszakitas segitseg nem volt hozza egyaltalan :D

    Most egy ilyen osregi hangkarim van, ami még pci buszon hardverbol kezeli a 220-as SB portokat, de windows driverrel mar nem DMA-zik (pcie, minek), van egy rakas hangminta memoriaja es egy spec. driverrel még dsp-asmban is lehet programozni.
    Jó, ma már egy cpu kenterbe veri azt a dsp chip-et, meg hangkartya=DA konverter :D

    nosztalgia áááááááá Vekkerlaszlo meg szerezzen egy sb2-t es probalja megszolaltatni! Az is van annyira korulmenyes, mint a directsound, csak in a different way lol
    Mutasd a teljes hozzászólást!
  • Félig jól értettél.
    32 bites rendszeren látványos a dolog, de a megcímezhető max memóriából 64 bites rendszer esetén is "levonja" a videokártya memóriáját, de mivel a fizikai memória sokkal kissebb, így nem vesztesz memóriát, nem "látványos".

    Lényeg az, hogy a videokártyát is memóriaként kezeli, éri el. Szóval a programok egy bizonyos memóriaterületre írnak, az oprendszer/hardver meg ezt irányítja a videokártyára -nagyjából úgy mint régen, mikor a 0xA000 szegmensre írtál.

    Szóval nincs külön Assembly utasítás video memóriába írásra, a program számára egyforma a kettő. Gondolom én.

    real_het: volt a hangkártyán is memória nem? Legalább 64K, és ha ezt feldolgozta akkor kellett ezt "újratölteni". Vagy nem jól gondolom? Nem nagyon programoztam hangkártyát. A DMA rémlik, de a pontos működés már nem (de ezt hardveresen támogatta a kártya ha jól rémlik, vagy csak egy DOS megszakítás kellett hozzá?).
    Mutasd a teljes hozzászólást!
  • Majd' minden hardver 0xFxxxxxxx cimre mappolja magát, de a fizikai memoriaban csak nincs minden egyes ilyen foglalasra egy ellenorzes (hulye pelda: ha b0000-rol olvaslnal, akkor a0000-rol olvas a fizikai rambol, mert a0000-on van egy 64k video ram es mindezt ugy, hogy van még egy rakas ilyen mapping). Boven eleg ha arra van ideje a gepnek figyelni, hogy ezeknel a hardverbol mappolt memoriateruleteknel tiltsa a cache-t. Az, hogy feltunik a memoria hiany, az meg amiatt lehet, hogy elterjedt a 4giga ram, de ha tul sokat lenyulnak a hardverek, akkor vegyel még 4 gigát :D
    Mutasd a teljes hozzászólást!
  • Van még egy hardver kommunikacios lehetoseg: ezer éve még DMA-val lehetett kuldeni a hangot a hangkartyara, ami cpu-tol fuggetlenul kuldozgette ki a byteokat mittomen 22KHz-en. Amint kesz volt a buffer jott egy interrupt.
    Ma meg a pcie van, ami egy marék nagyon gyors 'soros port' csomagkuldo protokollal es szinten a cpu igenybevetele nelkul. De hogy ezt port szinten hogy lehet vezerelni o.O
    Burst mode
    Mutasd a teljes hozzászólást!
  • "...mivel az operációs rendszer a videokártya memóriáját egyben tudja címezni és ezt a megcímezhető max memóriából levonja..."


    Levonja??? Csúnya volna... Ilyet maximum csak akkor tesz, ha a megcímezhető összes memória mérete kisebb a rendszermemória és a VRAM mennyiségének összegénél. De ezt is azért teszi, hogy a VRAM címtere ne essen a maximális címtartományon kívülre. Ilyen jelenség van akkor, ha 4GB memóriád mellé beraksz mondjuk egy fél GB-os VRAM-mal bíró videokártyát, és 32 bites op.rendszert futtatsz. Ekkor ugye a 32 bit miatt a maximális címtér legnagyobb értéke 0xFFFFFFFF, ami még mindig a 4GB memória utolsó bájtja lenne, és efölött már nem volna megcímezhető a VRAM. Na ezért használok én is inkább 64bites op.rendszert (bár nem Windows-t, de ez most mellékes).

    A lényeg, hogy nem von le semmit sem, csak akkor, ha nagyon muszáj, alapból ilyet nem tesz.



    De az is lehet, hogy valamit nagyon félreértettem a mondandódból. Mostanában gyakran megesik ez velem....
    Mutasd a teljes hozzászólást!
  • Banderasz:
    Bár őszintén szólva már nem tudom, hogy a mai modern VGA-k is ezt a memória-mappelt technikát alkalmazzák-e


    Mivel kompatibilisek visszafelé, így alkalmazzák a régi módszert is biztosan.

    Illetve mivel az operációs rendszer a videokártya memóriáját egyben tudja címezni és ezt a megcímezhető max memóriából levonja, tehát nem üzemel párhuzamosan a RAM és VIDEO RAM, így "gyanús", hogy most is eléred "memóriába írással" a videokártyát, feltehetően a 64K-s korlát nélkül.
    Persze hogy a Windows ezt hogyan oldja meg, az az ő dolga, és nem biztos, hogy megegyezik azzal, amit kifelé mutat.

    vekkerlaszlo:
    A portok kiosztását részben a BIOS határozza meg, de a Windows (vagy más program) is módosíthatja. De talán vannak olyan portok amik funkciója nem módosítható. Ez kemény hardver ismeret.
    Hogy egy-egy hardver programozásához mit kell a portokra kiírni az megintcsak hardver ismeret. Régen ezzel töltötte a programozó az ideje nagy részét, ma már nem nagyon adnak információt a hardverekhez, emiatt egyre nehezebb a közvetlen programozás.

    A portokon keresztül a hardver egység regisztereit lehet írni-olvasni, ezek a regiszterek meg meghatározzák a hardver működését (már 8bites gépeken is így ment ez.). Amelyik hardverben van memória, ahhoz szerintem mind rendelnek egy memóriaterületet, amin keresztül ez írható. Ehhez információt ad például a Windows eszközkezelő-je, ami megmondja, hogy egy hardverhez mely portok és mely memóriaterületek, megszakítások tartoznak. De persze amit a Windows használ, az nem biztos, hogy DOS vagy más operációs rendszer (vagy BOOT után oprendszer nélkül) is működik. De a működési elv ott van.
    Mutasd a teljes hozzászólást!
  • A portokról röviden:

    Gyors áttekintés a portok listájáról: I/O Address Summary Map
    Persze ennél sokkal több van, de ahhoz bőven elég a lista, hogy lásd, hogy a használt portok sorszámait mindig a hardverelemek döntik el, nem te a programoddal. Ez alól az a kivétel, ha olyan hardverelemeket használsz, melyek ugyanazon működésüket több különböző portokkal (afféle "tükrökkel") is el tudják végezni, és ilyenkor általában az op.rendszer választ közülük egy olyan csoportot, amely nem ütközik más hardverekkel, azaz ezzel elérve azt, hogy egy adott port-csoport mindig csak egyetlen hardverhez tartozzon.

    És hogy mire jó a port? Egyszerű: ezen keresztül érti meg egymást a kernel (és/vagy a driver) illetve maga a hardvereszköz. Gyakorlatilag ez az ő kommunikációs csatornájuk.

    De ez alól is van kivétel. Ugyanis a hardverek nemcsak portokkal tudnak beszélgetni a géppel, hanem lehetnek memória-mappelt-ek is. A videokártyák ilyenek (voltak?). Azok VRAM-jába ugyan úgy lehetett memóriacímzéssel írni/olvasni adatokat, mint a közönséges rendszermemória esetén. De ilyen memória-mappelt technikát csak olyan eszközöknél alkalmaznak, amelyek működésük közben gyors adatátvitelt igényelnek, és rendszerint igen sok adattal dolgoznak. Na a videokártyák tipikusan ilyenek. (Bár őszintén szólva már nem tudom, hogy a mai modern VGA-k is ezt a memória-mappelt technikát alkalmazzák-e).
    Mutasd a teljes hozzászólást!
  • Ez a portosdi nagyon egyszerű dolog.
    Kicsit leegyszerűsítve:
    Tudod hogy ír a processzor a memóriába? Kiadja a címet a címbuszra, az adatot az adatbuszra, a memória meg tudja, hogy mit kezdjen vele.
    A portra írás is így történik: kiadja a port sorszámát a címbuszra, kiadja az adatot az adatbuszra, és 'valaki' 'valamelyik kártyán' tudni fogja, hogy mit kezdjen vele.

    A port csak egy logikai fogalom. A processzor számára olyan, mint egy memóriacím, csak éppen nem memória fogadja az adatot, hanem tetszőleges hardvereszköz.

    A processzorok a memórián és a portokon keresztül kommunikálnak a külvilággal.

    Ennyi, ez tök egyszerű dolog.
    Mutasd a teljes hozzászólást!
  • Igen. Később eszembe jutottak a megszakítások. Tanenbaum könyv nekem is szembe tűnt, csak eddig nem volt még rá való, majd ezután. Ha már itt tartunk. A portokról eshet szó egy kicsit bővebben? Nem igazán vagyok tisztába a portokkal. Amit gondolok (tudok) róla, hogy van belőlük kb. 65 e db. Az első darab meghatározott. De a portok akkor most szovtveresen vannak megfogalmazva, vagy abból amit az előbb írtak, abból az derül ki, hogy hardveresen vannak meghatározva. Portokat a különböző hardverek, szovtverekhez vezető utat az op rendszer határoz meg?
    Mutasd a teljes hozzászólást!
  • A kérdésed jogos. Valaki majd biztosan ír egy pár soros összefoglalót.

    Azért Assembly utasításokkal írhatod-olvashatod a portokat, és ilyen formán programozhatod közvetlenül a hardver egységeket, akár BIOS rutinok nélkül is, meg ott vannak a megszakítások is. Csak egy "kis" hardver ismeret kell.
    Mutasd a teljes hozzászólást!
  • A Tanenbaum-Woodhull opre könyv jobban témába vág szerintem, de a másik sem rossz.
    Mutasd a teljes hozzászólást!
  • hahó

    sztem neked egy alapozó könyvre lenne szükséged:
    Operációs rendszerek mérnöki megközelítésben
    google segít
    Mutasd a teljes hozzászólást!
  • Amikor megírták a Dos-t, a számítógép részeit el kellett érni. Gondolok itt a winchesterre, hangkártyára, esetleg video vagy hálózati kártyára. Hogyan kellett, ahoz megírni a kernelt, hogy ezek az eszközök működjenek. Assembly utasítások színtjén nincs olyan utasítás, amelyik a vinyóra irna vagy onnan olvasna, az egyetlen, amit lehet programozni a cpu-n kívül az a memória. Pl. hogyan működött egy copy parancs? Arra tudok gondolni, hogy a biosban voltak beépített rutinok, amikkel lehetett kezelni a perifériákat. De hogyan történt ez? Tudna valaki forrást vagy választ? Előre is kösz.
    Mutasd a teljes hozzászólást!
abcd