Beiträge anzeigen

Diese Sektion erlaubt es dir alle Beiträge dieses Mitglieds zu sehen. Beachte, dass du nur solche Beiträge sehen kannst, zu denen du auch Zugriffsrechte hast.


Themen - SHyx0rmZ

Seiten: [1]
1
Nun, ich hänge mal wieder beim Paging fest, das Problem ist folgendes:

Wenn eine neue Page gemappt werden soll, die dafür nötigen, höheren Level in der Pagingstruktur aber noch nicht vorhanden sind, werden diese zwar erstellt, müssen aber noch gemappt werden. Dies führt unweigerlich zu einer Rekursion und ich weiß einfach nicht, wie ich da raus komme.

void PagingManager::Map(uintptr_t virtual_address, uintptr_t physical_address)
{
this->UpdateIndexes(virtual_address & 0x000FFFFFFFFFF000LL);

PageMapLevel4Entry *pml4e = (PageMapLevel4Entry *)(page_map_level_4[pml4i].GetAddress());

if(pml4e->IsPresent() == false)
{
pml4e->Clear();
pml4e->SetAccess(PageAccess::UserWritable);
pml4e->SetAddress(memory.PAlloc());
pml4e->SetCachability(PageCachability::WriteThroughCachable);
pml4e->SetPresence(true);
}

PageDirectoryPointerEntry *pdpe = (PageDirectoryPointerEntry *)(pml4e[pdpi].GetAddress());

if(pdpe->IsPresent() == false)
{
pdpe->Clear();
pdpe->SetAccess(PageAccess::UserWritable);
pdpe->SetAddress(memory.PAlloc());
pdpe->SetCachability(PageCachability::WriteThroughCachable);
pdpe->SetPresence(true);
}

PageDirectoryEntry *pde = (PageDirectoryEntry *)(pdpe[pdi].GetAddress());

if(pde->IsPresent() == false)
{
pde->Clear();
pde->SetAccess(PageAccess::UserWritable);
pde->SetAddress(memory.PAlloc());
pde->SetCachability(PageCachability::WriteThroughCachable);
pde->SetPresence(true);
}

PageTableEntry *pte = (PageTableEntry *)(pde[pti].GetAddress());

pte->Clear();
pte->SetAccess(PageAccess::UserWritable);
pte->SetAddress(physical_address);
pte->SetCachability(PageCachability::WriteThroughCachable);
pte->SetPresence(true);
}
2
OS-Design / Bootloader - Nächsten Sektor finden
« am: 06. May 2009, 16:02 »
Da ich immer noch der Meinung bin, dass sich ein eigener Bootloader für mein OS besser eignet, muss ich euch leider noch mal nerven ^^

Ich habe noch ein Verständnisproblem beim Bootvorgang. Von Floppy booten ist ja kein Problem. Wenn das System von CD bootet, werden ja entweder eine Floppy oder eine Festplatte emuliert. Wie kann man jetzt genau bestimmen, an welcher Stelle auf dem Medium (CD, HDD) der "zweite" Sektor liegt, sprich der Sektor nach dem Bootloader?

Man könnte natürlich bei der HDD versuchen, Infos aus der Partitionstabelle zu bekommen. War es nicht bei der Floppy-Emu der CD nicht so, dass der Bootloader denkt, er wäre im ersten Sektor? Gibt es da irgendwelche Tricks?
Grub scheint ja auch einfach stur den zweiten Sektor zu laden.
3
Lowlevel-Coding / Über Netzwerk booten?
« am: 10. November 2007, 14:10 »
Hallo zusammen. Ich möchte gern auch anfangen mit dem Programmieren eines eigenen Betriebssystems, nur habe ich ein Problem dabei.

Ich habe hier noch einen alten Rechner und möchte auf diesem nun über das Netzwerk das eigene System booten. Hab schon ein bisschen rumgesucht und bin da auf die Info gestoßen, dass ich wohl einen TFTP Server benötige. Wie schaffe ich es jetzt, dass mein eigener Kernel gebootet wird?

Virtuelle Maschinen fallen für mich leider flach, deswegen hoffe ich, dass ihr mir helfen könnt. Ich könnte zwar auch immer eine CD brennen, aber das lohnt sich irgendwie nicht :)
Seiten: [1]

Einloggen