fix mark module unavailable

This commit is contained in:
2026-02-16 14:46:53 +01:00
parent 448aa638a7
commit 4d5d6913d7
4 changed files with 30 additions and 23 deletions

View File

@@ -43,8 +43,8 @@ OutputStream* copyout = &copystream;
alignas(4096) four_lvl_paging_t paging_tree; alignas(4096) four_lvl_paging_t paging_tree;
static const uint32_t NUM_APPS = 9; //static const uint32_t NUM_APPS = 9;
Application apps[NUM_APPS]; //Application apps[NUM_APPS];
//static KeyboardApplication kapp; //static KeyboardApplication kapp;
@@ -52,14 +52,14 @@ Application apps[NUM_APPS];
extern "C" int main() { extern "C" int main() {
PageFrameAllocator::stats(); 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); Multiboot::Module* initrd = Multiboot::getModule(0);
DBG << "initrd address: " << hex << initrd->getStartAddress() << endl << "initrd size: " << initrd->getSize() << endl; DBG << "initrd address: " << hex << initrd->getStartAddress() << endl << "initrd size: " << initrd->getSize() << endl;
memcpy((void *)0x4000000, initrd->getStartAddress(), initrd->getSize()); 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.reset();
tout.setPos(33, 0); tout.setPos(33, 0);
tout << OS_NAME << " (2.x)" << flush; tout << OS_NAME << " (2.x)" << flush;
@@ -82,10 +82,11 @@ extern "C" int main() {
// Enter Level 1/2 // Enter Level 1/2
Guarded g = Guard::enter(); Guarded g = Guard::enter();
for(void* p=Multiboot::getModule(0)->getStartAddress(); p<Multiboot::getModule(0)->getEndAddress(); p=(void*)((uintptr_t)p+4096)){ //for(void* p=Multiboot::getModule(0)->getStartAddress(); p<Multiboot::getModule(0)->getEndAddress(); p=(void*)((uintptr_t)p+4096)){
DBG << "module at: " << hex << p << endl; // DBG << "module at: " << hex << p << endl;
g.vault().scheduler.ready(new Thread(false, p)); // 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) { //for (uint32_t i = 0; i < NUM_APPS; ++i) {
// g.vault().scheduler.ready(&(apps[i])); // g.vault().scheduler.ready(&(apps[i]));

View File

@@ -61,6 +61,11 @@ void PageFrameAllocator::init(){
memory_map_entry = memory_map_entry->getNext(); 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 other known regions as unavailable
mark_pageframes((uintptr_t)&___KERNEL_START___, (uintptr_t)&___KERNEL_END___, false); mark_pageframes((uintptr_t)&___KERNEL_START___, (uintptr_t)&___KERNEL_END___, false);

View File

@@ -9,8 +9,8 @@
void *operator new(size_t, void *); void *operator new(size_t, void *);
#include "../user/app1/appl.h" //#include "../user/app1/appl.h"
extern Application apps[]; //extern Application apps[];
namespace Syscall { namespace Syscall {
namespace Skeleton { 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) { int getpid(Vault &vault) {
Thread *me = vault.scheduler.active(); //Thread *me = vault.scheduler.active();
unsigned id = 0; //unsigned id = 0;
while (&apps[id++] != me); // TODO find better pid source //while (&apps[id++] != me); // TODO find better pid source
return id; //return id;
return 0;
} }
size_t write(Vault &vault, uint32_t id, const void *buffer, size_t size, int x, int y) { 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){ void kill(Vault &vault, size_t pid){
vault.scheduler.kill(&apps[pid]); //vault.scheduler.kill(&apps[pid]);
} }
} // namespace Skeleton } // namespace Skeleton
} // namespace Syscall } // namespace Syscall

View File

@@ -37,7 +37,7 @@ void Thread::kickoffUsermode (Thread *object){
extern four_lvl_paging_t paging_tree; 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){ Thread::Thread (bool kernel, void * start): queue_link(nullptr), isKernel(kernel), start(start), id(idCounter++), kill_flag(false){
StackPointer.isr = reinterpret_cast<void *>(reserved_stack_space_isr + STACK_SIZE); StackPointer.isr = reinterpret_cast<void *>((uintptr_t)PageFrameAllocator::alloc(true)+STACK_SIZE);//(reserved_stack_space_isr + STACK_SIZE);
StackPointer.user = reinterpret_cast<void *>((uintptr_t)PageFrameAllocator::alloc(false)+STACK_SIZE); StackPointer.user = reinterpret_cast<void *>((uintptr_t)PageFrameAllocator::alloc(false)+STACK_SIZE);
subtable = (pagetable_t*) PageFrameAllocator::alloc(true); 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 .address = (uintptr_t)StackPointer.user >> 12
}; };
//paging_tree.l2.entries[32] = { paging_tree.l2.entries[32] = {
// .present = 1, .present = 1,
// .user = 1, .user = 1,
// .address = (uintptr_t)subtable >> 12 .address = (uintptr_t)subtable >> 12
//}; };
//map_pageframe(&paging_tree, (uintptr_t)StackPointer.user, 0x4001000); //map_pageframe(&paging_tree, (uintptr_t)StackPointer.user, 0x4001000);
prepareContext(StackPointer.isr, context, kickoff, reinterpret_cast<uintptr_t>(this), 0, 0); prepareContext(StackPointer.isr, context, kickoff, reinterpret_cast<uintptr_t>(this), 0, 0);