Wenn das VRAM der GPU per Memory Mapping I/O in einen Adressbereich projiziert wird, was passiert dann mit dem normalen



  • RAM in diesem Adressbereich?
    Ist das dann nicht mehr adressierbar bzw. benutzbar?

    Mal angenommen, wir haben einen 32 Bit Prozessor und 4 GB normales RAM.
    In den Rechner stecken wir eine Grafikkarte die selbst wiederum 1 GB VRAM hat.

    Dieses 1 GB VRAM wird nun per Memory Mapping in den Adressbereich die der Prozessor adressieren kann, also irgendwo zwischen Adresse 0x00000000 und 0xFFFFFFFF rein projiziert.
    Wenn die CPU also auf so eine Adresse zugreift, dann greift sie dadurch auf das VRAM zu.

    Nun hatte der Rechner aber ganze 4 GB an RAM, mit 32 Bit kann man aber selbst nur insgesamt 4 GB adressieren. Wenn nun aber in den Adressbereich schon Platz für das eine 1 GB des VRAM vorgesehen ist, dann sind für das normale RAMs ja nur noch 3 GB über den Adressbereich verfügbar.

    Was passiert mit dem restlichen 1 GB normalem RAM?
    Ist das dann nicht benutzbar oder swapped man einfach einen 1 GB großen Adressbereich zwischen zwei realen 1 GB großen RAM Blöcken um.

    Also mal angenommen wir teilen das 4 GB große RAM Modul in 4 Bereiche auf.
    Bereich A => 0 bis 1 GB
    Bereich B => 1 GB bis 2 GB (das 1 GB+1 Bit usw. lass ich mal der Vereinfachung halber weg)
    Bereich C => 2 GB bis 3 GB
    Bereich D => 3 GB bis 4 GB.

    A und B können im Adressbereich direkt adressiert werden.
    C und D muss man nun umschalten, da im Adressbereich ja schon das VRAM reinprojeziert wird, das wiederum selbst 1 GB groß ist.
    Wird das so gemacht?

    Und wie war es früher bei DOS?
    Da war ja der Bereich zwischen 640 KB und 1 MB für die Hardware reserviert, d.h. schrieb man irgendwo in eine Adresse zwischen 640 KB bis 1 MB, dann landete man z.b. bei Pin 1 des Parallelport, wo dann ein Signal ausgegeben wurde.
    Was wenn der Rechner nun 1 MB reales RAM hatte?

    Ging das Realen Ram also nur bis 640 GB und die restlichen 360 KB setzte man an Adresse 1 MB einfach wieder oben dran?
    Und weil DOS selbst nur bis 640 KB adressieren konnte, swappte man dann aus dem oberen Bereich in einen unteren 64 KB Block, wobei das ja wieder ne Softwaregeschichte war?


  • Mod

    1. Du denkst nicht virtuell. Physikalische Adressen (also wie die Drähte im Computer liegen) haben absolut gar nichts mit dem logischen (virtuellen) Adressraum zu tun, mit dem der Prozessor arbeitet.
    2. Von diesem logischen Adressraum steht natürlich entsprechend weniger für echten RAM zur Verfügung, wenn ein Teil davon für MMIO benutzt wird.
    3. Wenn mehr physikalischer RAM da ist, als logischer Adressraum zur Verfügung steht, dann kann man diesen eben nicht (direkt) ansprechen. Aber man kann sich vielleicht etwas cleveres einfallen lassen. Beispielsweise indem man diese Bereiche selber wieder via Memory Mapping einblendet.
    4. Ernsthaft: Welche dieser Fragen hättest du nicht mit Wikipedia oder Google beantworten können?


Anmelden zum Antworten