Hypercell ein ] Hypercell aus ] Zeige Navigation ] Verstecke Navigation ]
c++.net  
   

Die mobilen Seiten von c++.net:
https://m.c-plusplus.net

  
C++ Forum :: Projekt: OS-Development  ::  Paging und Filesysteme verstehen     Zeige alle Beiträge auf einer Seite Auf Beitrag antworten
Autor Nachricht
IdeCMOS
Mitglied

Benutzerprofil
Anmeldungsdatum: 22.02.2014
Beiträge: 22
Beitrag IdeCMOS Mitglied 11:23:17 05.02.2015   Titel:   Paging und Filesysteme verstehen            Zitieren

Hi,
ich schreibe gerade an einem OS(ok, was soll ich sonst tun, wenn ich mich hier melde) nach dem Lowlevel- Tutorial und verstehe 2 Sachen nicht.
1. Wie funktioniert den jetzt Paging und was genau muss ich dazu implementieren?
2. Wie greife ich dann mit Treibern auf Festplatten, CDs und DVDs zu und greife dann aufs Dateisystem zu?

Ich hoffe ihr könnt mir helfen. Beim Paging bin ich soweit, das er das Paging aktiviert und die Page Tables und so aufsetzt.

- IdeCMOS

PS: ich habe vor kurzem meinen PC mit Windows 7 neu installiert und konnte bis jetzt noch nichtmal Updates machen. Also bitte nicht böse sein, wenn ich jetzt nichts Ausprobieren kann.


Zuletzt bearbeitet von IdeCMOS am 11:24:45 05.02.2015, insgesamt 1-mal bearbeitet
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 14885
Beitrag Erhard Henkes Mitglied 19:22:03 05.02.2015   Titel:              Zitieren

Zitat:
Wie funktioniert den jetzt Paging und was genau muss ich dazu implementieren?

http://henkessoft.de/OS_Dev/OS_Dev2.htm#mozTocId918986
http://wiki.osdev.org/Paging
http://en.wikipedia.org/wiki/Paging
http://de.wikipedia.org/wiki/Paging
http://www.intel.com/cont ....... re-developer-manuals.html

Zitat:
Der Begriff "Paging" bezeichnet den Vorgang der Abbildung (Mapping) von virtuellen Adressen auf physische Adressen. Programmcode oder Daten befinden sich in diesem Umfeld also gleichzeitig an einer physischen und einer virtuellen Adresse. Beide können hierbei deckungsgleich (identisch) sein oder verschieden (wichtig für das swapping).

Bei einem 32-Bit-Prozessor umfassen die theoretisch möglichen Adressen insgesamt 4 GB = 2^32 Byte. Die Realisierung des Pagings erfolgt durch Zerlegung dieses Adressraums in viele kleine "Pages" (Seiten). Die Verwaltung erfolgt durch das Page Directory Base Register (PDBR), das als "Kontrollregister cr3" geführt wird.

Baumstrukturen von Tabellen und Zeigern (Adressvariablen) führen über das Page Directory (PD) und Page Tables (PT) zu Pages weiter, die mit Hilfe des Offsets in einer konkreten physischen Adresse münden (siehe Bild unten). Eine hervorragende Darstellung dieser Zusammenhänge mit ausführlichen Erklärungen und einem konkreten Rechenbeispiel findet sich hier.

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 14885
Beitrag Erhard Henkes Mitglied 19:30:46 05.02.2015   Titel:              Zitieren

Zitat:
Wie greife ich dann mit Treibern auf Festplatten, CDs und DVDs zu und greife dann aufs Dateisystem zu?

Dazu benötigt ein OS verschiedene Module, die sich um Devicemanagement, Busmanagement (z.B. usb) und Treiber für die einzelnen Medien (z.B. usb-Sticks oder Festplatten) kümmern. Der Zugriff auf den Speicher erfolgt entweder virtuell (z.B. auf dem Kernel- oder User-Heap oder im MMIO) oder für direkte Hardwarezugriffe (z.B. durch den xHCI) auch mit der physischen Adresse, die man durch eine im Paging-Modul befindliche Funktion erhält.

Beispiel (aus PrettyOS):
C:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
uintptr_t paging_getPhysAddr(void* virtAddress)
{
    pageDirectory_t* pd = kernelPageDirectory;
 
    // Find the page table
    uint32_t pageNumber = (uintptr_t)virtAddress / PAGESIZE;
    pageTable_t* pt = pd->tables[pageNumber/PAGE_COUNT];
 
    if (pt)
    {
        // Read the address, cut off the flags, append the odd part of the address
        return ((pt->pages[pageNumber % PAGE_COUNT] & 0xFFFFF000) + ((uintptr_t)virtAddress & 0x00000FFF));
    }
    else
    {
        return (0); // not mapped
    }
}


Wenn Du diese Funktion im Detail verstehst, dann hast Du auch Paging verstanden.

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm


Zuletzt bearbeitet von Erhard Henkes am 19:31:50 05.02.2015, insgesamt 1-mal bearbeitet
IdeCMOS
Mitglied

Benutzerprofil
Anmeldungsdatum: 22.02.2014
Beiträge: 22
Beitrag IdeCMOS Mitglied 12:54:22 06.02.2015   Titel:              Zitieren

Hallo,
Danke für deine Schnelle Antwort, mit dem Code kann ich gut umgehen, ich habe den auch soweit verstanden. die Links, habe ich noch nicht angeschaut, sieht aber so aus als würden alle bei mir gehen. Muss ich jetzt nur noch ausprobieren. Da ich zurzeit noch auf der Arbeit bin, geht das jetzt gerade schlecht. und zum Glück haben wir gestern erst unsere WLAN- Passwörter gekriegt. Sobald ich die Links mal durckgeschaut habe melde ich mich wieder.

- IdeCMOS
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 14885
Beitrag Erhard Henkes Mitglied 17:57:18 06.02.2015   Titel:              Zitieren

schau dir dabei diese Grafik an:
http://henkessoft.de/OS_D ....... T_Pages_Frames_Bitset.PNG
Da hast Du alles auf einen Blick, auch das Bitset.

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm
IdeCMOS
Mitglied

Benutzerprofil
Anmeldungsdatum: 22.02.2014
Beiträge: 22
Beitrag IdeCMOS Mitglied 21:35:38 12.02.2015   Titel:              Zitieren

Das hab ich jetzt auch alles verstanden. wie sage ich aber jetzt meinem OS, dass ich ein programm an die virtuelle Adresse 2MB laden will. Ich habe jetzt nur eine vmm_alloc, die die Page Table als parameter nimmt und die Anzahl der pages. Wie mache ich das den jetzt.
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 14885
Beitrag Erhard Henkes Mitglied 20:17:43 16.02.2015   Titel:              Zitieren

Das ist wieder ein extra Thema, das "Laden", Analysieren und "Ausführen" von Programmen im User-Bereich.

Schau Dir dazu bitte
void* elf_prepareExecution(const void* file, size_t size, pageDirectory_t* pd)
im Modul elf.c und
FS_ERROR executeFile(const char* path, size_t argc, const char* argv[], bool ownConsole)
im Modul executable.c an.

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm


Zuletzt bearbeitet von Erhard Henkes am 21:00:28 16.02.2015, insgesamt 2-mal bearbeitet
IdeCMOS
Mitglied

Benutzerprofil
Anmeldungsdatum: 22.02.2014
Beiträge: 22
Beitrag IdeCMOS Mitglied 19:23:48 17.04.2015   Titel:              Zitieren

Entschuldige das ich erst jetzt meine Antwort schreibe. Ich hab mal versucht weiter das auf eigene Faust zu lösen, bin aber gescheitert. jetzt versuche ich wirklich mal deinen Code dazu zu studieren. Ich werde mich jetzt aber ransetzten und meine Idee einer Community vorstellen. Ich danke dir sehr für deine Hilfe.

- IdeCMOS
xyz_
Unregistrierter




Beitrag xyz_ Unregistrierter 13:28:07 10.05.2015   Titel:              Zitieren

wie steht's?
C++ Forum :: Projekt: OS-Development  ::  Paging und Filesysteme verstehen   Auf Beitrag antworten

Zeige alle Beiträge auf einer Seite




Nächstes Thema anzeigen
Vorheriges Thema anzeigen
Sie können Beiträge in dieses Forum schreiben.
Sie können auf Beiträge in diesem Forum antworten.
Sie können Ihre Beiträge in diesem Forum nicht bearbeiten.
Sie können Ihre Beiträge in diesem Forum nicht löschen.
Sie können an Umfragen in diesem Forum nicht mitmachen.

Powered by phpBB © 2001, 2002 phpBB Group :: FI Theme

c++.net ist Teilnehmer des Partnerprogramms von Amazon Europe S.à.r.l. und Partner des Werbeprogramms, das zur Bereitstellung eines Mediums für Websites konzipiert wurde, mittels dessen durch die Platzierung von Werbeanzeigen und Links zu amazon.de Werbekostenerstattung verdient werden kann.

Die Vervielfältigung der auf den Seiten www.c-plusplus.de, www.c-plusplus.info und www.c-plusplus.net enthaltenen Informationen ohne eine schriftliche Genehmigung des Seitenbetreibers ist untersagt (vgl. §4 Urheberrechtsgesetz). Die Nutzung und Änderung der vorgestellten Strukturen und Verfahren in privaten und kommerziellen Softwareanwendungen ist ausdrücklich erlaubt, soweit keine Rechte Dritter verletzt werden. Der Seitenbetreiber übernimmt keine Gewähr für die Funktion einzelner Beiträge oder Programmfragmente, insbesondere übernimmt er keine Haftung für eventuelle aus dem Gebrauch entstehenden Folgeschäden.