From 4d5d6913d7bc5bfd1680af6a844acee72bfa717a Mon Sep 17 00:00:00 2001 From: Eggert Jung Date: Mon, 16 Feb 2026 14:46:53 +0100 Subject: [PATCH] fix mark module unavailable --- kernel/main.cc | 21 +++++++++++---------- kernel/memory/pageframealloc.cc | 5 +++++ kernel/syscall/skeleton.cc | 15 ++++++++------- kernel/thread/thread.cc | 12 ++++++------ 4 files changed, 30 insertions(+), 23 deletions(-) diff --git a/kernel/main.cc b/kernel/main.cc index 73f3f3a..5c5e169 100644 --- a/kernel/main.cc +++ b/kernel/main.cc @@ -43,8 +43,8 @@ OutputStream* copyout = ©stream; alignas(4096) four_lvl_paging_t paging_tree; -static const uint32_t NUM_APPS = 9; -Application apps[NUM_APPS]; +//static const uint32_t NUM_APPS = 9; +//Application apps[NUM_APPS]; //static KeyboardApplication kapp; @@ -52,14 +52,14 @@ Application apps[NUM_APPS]; extern "C" int main() { PageFrameAllocator::stats(); - memset(&paging_tree, 0, sizeof(four_lvl_paging_t)); - create_basic_page_table(&paging_tree); - load_cr3((void*)&paging_tree.l4); - Multiboot::Module* initrd = Multiboot::getModule(0); DBG << "initrd address: " << hex << initrd->getStartAddress() << endl << "initrd size: " << initrd->getSize() << endl; memcpy((void *)0x4000000, initrd->getStartAddress(), initrd->getSize()); + memset(&paging_tree, 0, sizeof(four_lvl_paging_t)); + create_basic_page_table(&paging_tree); + load_cr3((void*)&paging_tree.l4); + tout.reset(); tout.setPos(33, 0); tout << OS_NAME << " (2.x)" << flush; @@ -82,10 +82,11 @@ extern "C" int main() { // Enter Level 1/2 Guarded g = Guard::enter(); - for(void* p=Multiboot::getModule(0)->getStartAddress(); pgetEndAddress(); p=(void*)((uintptr_t)p+4096)){ - DBG << "module at: " << hex << p << endl; - g.vault().scheduler.ready(new Thread(false, p)); - } + //for(void* p=Multiboot::getModule(0)->getStartAddress(); pgetEndAddress(); p=(void*)((uintptr_t)p+4096)){ + // DBG << "module at: " << hex << p << endl; + // g.vault().scheduler.ready(new Thread(false, p)); + //} + g.vault().scheduler.ready(new Thread(false, (void*)((uintptr_t)Multiboot::getModule(0)->getStartAddress()+4096))); //for (uint32_t i = 0; i < NUM_APPS; ++i) { // g.vault().scheduler.ready(&(apps[i])); diff --git a/kernel/memory/pageframealloc.cc b/kernel/memory/pageframealloc.cc index 65c873d..ac347f3 100644 --- a/kernel/memory/pageframealloc.cc +++ b/kernel/memory/pageframealloc.cc @@ -61,6 +61,11 @@ void PageFrameAllocator::init(){ memory_map_entry = memory_map_entry->getNext(); } + Multiboot::Module* mod = Multiboot::getModule(0); + + mark_pageframes((uintptr_t)mod, (uintptr_t)mod+1, false); + mark_pageframes((uintptr_t)mod->getStartAddress(), (uintptr_t)mod->getEndAddress(), false); + //mark other known regions as unavailable mark_pageframes((uintptr_t)&___KERNEL_START___, (uintptr_t)&___KERNEL_END___, false); diff --git a/kernel/syscall/skeleton.cc b/kernel/syscall/skeleton.cc index afe1da3..71b2536 100644 --- a/kernel/syscall/skeleton.cc +++ b/kernel/syscall/skeleton.cc @@ -9,8 +9,8 @@ void *operator new(size_t, void *); -#include "../user/app1/appl.h" -extern Application apps[]; +//#include "../user/app1/appl.h" +//extern Application apps[]; namespace Syscall { namespace Skeleton { @@ -23,10 +23,11 @@ size_t test(Vault &vault, size_t p1, size_t p2, size_t p3, size_t p4, } int getpid(Vault &vault) { - Thread *me = vault.scheduler.active(); - unsigned id = 0; - while (&apps[id++] != me); // TODO find better pid source - return id; + //Thread *me = vault.scheduler.active(); + //unsigned id = 0; + //while (&apps[id++] != me); // TODO find better pid source + //return id; + return 0; } size_t write(Vault &vault, uint32_t id, const void *buffer, size_t size, int x, int y) { @@ -123,7 +124,7 @@ void exit(Vault &vault) { } void kill(Vault &vault, size_t pid){ - vault.scheduler.kill(&apps[pid]); + //vault.scheduler.kill(&apps[pid]); } } // namespace Skeleton } // namespace Syscall diff --git a/kernel/thread/thread.cc b/kernel/thread/thread.cc index 1c62c16..cb641a6 100644 --- a/kernel/thread/thread.cc +++ b/kernel/thread/thread.cc @@ -37,7 +37,7 @@ void Thread::kickoffUsermode (Thread *object){ extern four_lvl_paging_t paging_tree; Thread::Thread (bool kernel, void * start): queue_link(nullptr), isKernel(kernel), start(start), id(idCounter++), kill_flag(false){ - StackPointer.isr = reinterpret_cast(reserved_stack_space_isr + STACK_SIZE); + StackPointer.isr = reinterpret_cast((uintptr_t)PageFrameAllocator::alloc(true)+STACK_SIZE);//(reserved_stack_space_isr + STACK_SIZE); StackPointer.user = reinterpret_cast((uintptr_t)PageFrameAllocator::alloc(false)+STACK_SIZE); subtable = (pagetable_t*) PageFrameAllocator::alloc(true); @@ -54,11 +54,11 @@ Thread::Thread (bool kernel, void * start): queue_link(nullptr), isKernel(kerne .address = (uintptr_t)StackPointer.user >> 12 }; - //paging_tree.l2.entries[32] = { - // .present = 1, - // .user = 1, - // .address = (uintptr_t)subtable >> 12 - //}; + paging_tree.l2.entries[32] = { + .present = 1, + .user = 1, + .address = (uintptr_t)subtable >> 12 + }; //map_pageframe(&paging_tree, (uintptr_t)StackPointer.user, 0x4001000); prepareContext(StackPointer.isr, context, kickoff, reinterpret_cast(this), 0, 0);