fix mark module unavailable
This commit is contained in:
@@ -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(); 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]));
|
||||
|
||||
@@ -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);
|
||||
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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);
|
||||
|
||||
Reference in New Issue
Block a user