Autor Thema: Help! Exception 14, Page Fault -- OS-Dev Teil 9 (code)  (Gelesen 6826 mal)

MikyGonzalez

  • Beiträge: 3
    • Profil anzeigen
Gespeichert
« am: 21. January 2013, 16:12 »
Wie kann ich realisiere ich das?:
Beim Anlegen eines Tasks müssen wir jetzt einen neuen Speicherkontext anlegen (dafür gibt es ja schon vmm_create_context) und ggf. den Kernelteil des Page Directory kopieren. init_elf kann den Speicher jetzt im Kernel an eine beliebige Stelle im aktuellen Page Directory mappen, muss das Programm aber zusätzlich noch in dessen Page Directory an die richtige Stelle (nämlich 0x200000) mappen.

(http://www.lowlevel.eu/wiki/Teil_9_-_Paging)

MNemo

  • Beiträge: 547
    • Profil anzeigen
Gespeichert
« Antwort #1 am: 21. January 2013, 21:54 »
LOL - Welcher Depp schmeisst sein Geld zum Fenster raus für so Anfänger wie dich ?! Wie wäre es erst mal was gescheites zu lernen, bevor du dich an einem so ambitionierten Projekt beteiligst.
Also ich verstehe MikyGonzalez frage nicht ganz, aber WTF soll dieser Kommentar?
„Wichtig ist nicht, besser zu sein als alle anderen. Wichtig ist, besser zu sein als du gestern warst!“

MikyGonzalez

  • Beiträge: 3
    • Profil anzeigen
Gespeichert
« Antwort #2 am: 21. January 2013, 22:01 »
Ich bin ein Anfänger in Betriebssystem-Design. Ich wollte nur lernen, nicht versuchen, zu erstellen oder zu erfinden nichts, aber wie ich hier sehen, ist nicht gut zu erkennen helfen.

kevin

  • Administrator
  • Beiträge: 2 767
    • Profil anzeigen
Gespeichert
« Antwort #3 am: 21. January 2013, 22:26 »
Dein Deutsch ist leider sehr schwer zu verstehen. Eventuell solltest du zusätzlich eine englische Version (oder was auch immer deine Muttersprache ist) posten.

In Pseudocode würde ich sagen:
context = vmm_create_context(); // Neuen Kontext anlegen
memcpy(context.pagedir, kernel_context.pagedir, 256 * sizeof(uint32_t)); // Kernel-Pagetables übernehmen
init_elf(context, modules[i].mod_start);

Um init_elf() zu implementieren brauchst du ein vmm_alloc(), wie es im Abschnitt zuvor beschrieben ist. Dann läuft das ungefähr so:
dest = vmm_alloc(kernel_context, ph->mem_size);
memcpy(dest, ...);
vmm_map(context, ph->virt_addr, vmm_resolve(kernel_context, dest), ph->mem_size);
vmm_unmap(kernel_context, dest, ph->mem_size);
Thou shalt not follow the NULL pointer, for chaos and madness await thee at its end.

kevin

  • Administrator
  • Beiträge: 2 767
    • Profil anzeigen
Gespeichert
« Antwort #4 am: 21. January 2013, 22:29 »
LOL - Welcher Depp schmeisst sein Geld zum Fenster raus für so Anfänger wie dich ?! Wie wäre es erst mal was gescheites zu lernen, bevor du dich an einem so ambitionierten Projekt beteiligst.
Nochmal sowas und du kriegst einen Bann.
Thou shalt not follow the NULL pointer, for chaos and madness await thee at its end.

Dimension

  • Beiträge: 155
    • Profil anzeigen
Gespeichert
« Antwort #5 am: 22. January 2013, 19:14 »
Nochmal sowas und du kriegst einen Bann.
OK, sorry - Ich hielt den Typ für einen Berufseinsteiger mit gekauftem Abschluss, der andere seine Arbeit machen lassen wollte.

Dennoch ist es mir ein Rätsel, wieso er nicht gleich auf osdev.org postet.

kevin

  • Administrator
  • Beiträge: 2 767
    • Profil anzeigen
Gespeichert
« Antwort #6 am: 22. January 2013, 21:18 »
Vielleicht haben wir einfach trotz Sprachbarriere die besseren Tutorials? :-D
Thou shalt not follow the NULL pointer, for chaos and madness await thee at its end.

 

Einloggen