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;
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(); p<Multiboot::getModule(0)->getEndAddress(); 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(); p<Multiboot::getModule(0)->getEndAddress(); 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]));

View File

@@ -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);

View File

@@ -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

View File

@@ -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<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);
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<uintptr_t>(this), 0, 0);