Import backup from 2005-08-27

This commit is contained in:
josh committed 2017-07-25 22:23:50 -04:00
1 parent 83a5b032f8
commit daa29212d0
10 files changed
+49 -46

No files matched your search

+16 -26
View File
@@ -42,11 +42,11 @@ int proc_init()
void proc_sched(int_stack_t *int_stack)
{
processes[cur_task]->esp = (u32_t) int_stack;
processes[cur_task]->ss = read_ss();
cur_task = (cur_task + 1) % 3;
proc_new_esp = processes[cur_task]->esp;
proc_new_ss = processes[cur_task]->ss;
memcpy(&processes[cur_task]->int_stack, int_stack, sizeof(int_stack_t));
cur_task++;
if (cur_task == 3)
cur_task = 0;
memcpy(int_stack, &processes[cur_task]->int_stack, sizeof(int_stack_t));
write_cr3(processes[cur_task]->p_page_dir);
}
@@ -105,29 +105,19 @@ void create_process_stack(process_t *p, void *entry)
u32_t *ptr32 = v_stack_table;
for (i = 0; i < 1023; i++)
*ptr32++ = 0;
v_stack_table[1032] = p_stack | 0x7; /* user permissions */
v_stack_table[1023] = p_stack | 0x7; /* user permissions */
p->page_dir[511] = p_stack_table | 0x7; /* stack at 2GB */
i = 1023; /* top of stack */
v_stack[i--] = 0x20000000;
v_stack[i--] = SEG_USER_DATA | 0x3;
v_stack[i--] = 0x0202;
v_stack[i--] = SEG_USER_CODE | 0x3;
v_stack[i--] = (u32_t) entry;
v_stack[i--] = 0;
v_stack[i--] = 0;
v_stack[i--] = 0;
v_stack[i--] = 0;
v_stack[i--] = 0;
v_stack[i--] = 0;
v_stack[i--] = 0;
v_stack[i--] = SEG_USER_DATA | 0x3;
v_stack[i--] = SEG_USER_DATA | 0x3;
v_stack[i--] = SEG_USER_DATA | 0x3;
v_stack[i--] = SEG_USER_DATA | 0x3;
vmm_unmapp(v_stack_table);
vmm_unmapp(v_stack);
p->ss = SEG_USER_DATA | 0x3;
p->esp = 0x20000000 - sizeof(int_stack_t);
p->int_stack.ds = SEG_USER_DATA | 0x3;
p->int_stack.es = SEG_USER_DATA | 0x3;
p->int_stack.fs = SEG_USER_DATA | 0x3;
p->int_stack.gs = SEG_USER_DATA | 0x3;
p->int_stack.ss = SEG_USER_DATA | 0x3;
p->int_stack.esp = 0x20000000;
p->int_stack.eflags = 0x0202;
p->int_stack.cs = SEG_USER_CODE | 0x3;
p->int_stack.eip = (u32_t)entry;
}
/* Copy pages into new address space (v_page_dir must be set up) */
@@ -148,7 +138,7 @@ void copy_into_address_space(u32_t dest_addr,
/* Time for a new page table & page directory entry! */
p->v_page_dir[pde] = (u32_t)vmm_palloc_addr(&p_page_addr);
p->page_dir[pde] = p_page_addr | 0x7;
vmm_unmapp((void *)p->v_page_dir[pde]);
// vmm_unmapp((void *)p->v_page_dir[pde]);
}
page = vmm_palloc_addr(&p_page_addr);
((u32_t *)(p->v_page_dir[pde]))[pte] = p_page_addr | 0x7;
+6 -2
View File
@@ -15,8 +15,12 @@ typedef struct
u32_t *v_page_dir; /* Virtual page table addresses for init */
u32_t p_page_dir; /* Physical address of page directory */
u32_t size; /* Process size, bytes from 0 through bss */
u32_t ss;
u32_t esp;
// u32_t ss;
// u32_t esp;
// u32_t eflags;
// u32_t cs;
// u32_t eip;
int_stack_t int_stack;
} process_t;
typedef struct