fix mark module unavailable
This commit is contained in:
@@ -43,8 +43,8 @@ OutputStream* copyout = ©stream;
|
|||||||
|
|
||||||
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]));
|
||||||
|
|||||||
@@ -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);
|
||||||
|
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
@@ -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);
|
||||||
|
|||||||
Reference in New Issue
Block a user