diff --git a/kernel/main.cc b/kernel/main.cc index 4249027..b1655e3 100644 --- a/kernel/main.cc +++ b/kernel/main.cc @@ -3,6 +3,7 @@ #include "./debug/output.h" #include "./types.h" // This is actually used #include "arch/core_interrupt.h" +#include "memory/page.h" #include "memory/pageframealloc.h" #include "memory/pagetable.h" #include "object/outputstream.h" @@ -82,12 +83,20 @@ extern "C" int main() { // Enter Level 1/2 Guarded g = Guard::enter(); + uint32_t (*apps_header)[1024] = (uint32_t (*)[1024])Multiboot::getModule(0)->getStartAddress(); + uint64_t offset = 1; + for(uint16_t i = 1; i <= (*apps_header)[0]; i++){ + uint32_t appsize = (*apps_header)[i]; + uintptr_t appstart = (0x4000+offset)<<12; + DBG << "app " << i << " size " << appsize << " at " << appstart << endl; + g.vault().scheduler.ready(new Thread(false, (void*)appstart)); + offset += 1+(appsize/4096); + } //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*)0x4001000)); - load_cr3((void*)&paging_tree.l4); + //g.vault().scheduler.ready(new Thread(false, (void*)0x4001000)); //for (uint32_t i = 0; i < NUM_APPS; ++i) { // g.vault().scheduler.ready(&(apps[i])); diff --git a/kernel/thread/scheduler.h b/kernel/thread/scheduler.h index 8a71b1f..ef5b2ca 100644 --- a/kernel/thread/scheduler.h +++ b/kernel/thread/scheduler.h @@ -42,6 +42,7 @@ class Scheduler { */ alignas(16) IdleThread idleThread; + public: Scheduler(); diff --git a/kernel/thread/thread.h b/kernel/thread/thread.h index ac70434..4f76f79 100644 --- a/kernel/thread/thread.h +++ b/kernel/thread/thread.h @@ -33,6 +33,7 @@ class Thread { bool isKernel; void* start; + pagetable_t* subtable; friend class Queue; diff --git a/user/app1/appl.cc b/user/app1/appl.cc index 1f65807..196b800 100644 --- a/user/app1/appl.cc +++ b/user/app1/appl.cc @@ -13,12 +13,12 @@ extern "C" void main() { for (unsigned i = 1;; ++i) { write(1, text, sizeof(text)); - if(i==id){ - //write(2, "kill", 4); - //write(2, &text[4], 1); - //write(2, " ", 1); - sys_exit(); - } + //if(i==id){ + // //write(2, "kill", 4); + // //write(2, &text[4], 1); + // //write(2, " ", 1); + // sys_exit(); + //} sleep(1000); } } diff --git a/user/app2/kappl.cc b/user/app2/kappl.cc index ed6e396..572143a 100644 --- a/user/app2/kappl.cc +++ b/user/app2/kappl.cc @@ -9,29 +9,30 @@ extern "C" void main() { char cmd_buff[100]; uint8_t bufferpos = 0; while(1){ - char msg[11]; - int len; - len = read(0, msg, 1); - if(len){ - write(0, msg, len); - memcpy(&cmd_buff[bufferpos], msg, len); - bufferpos+=len; - for(uint8_t i=0; i