Import backup from 2005-08-27
This commit is contained in:
1 parent
83a5b032f8
commit
daa29212d0
10 files changed
+49
-46
No files matched your search
+16
-26
@@ -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
@@ -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
|
||||
|
||||
Reference in new issue
Block a user