diff options
Diffstat (limited to 'kernel')
| -rw-r--r-- | kernel/Makefile | 2 | ||||
| -rw-r--r-- | kernel/include/process.h | 25 | ||||
| -rw-r--r-- | kernel/include/registers.h | 61 | ||||
| -rw-r--r-- | kernel/src/scheduler/process.c | 38 | ||||
| -rw-r--r-- | kernel/src/scheduler/switch_process.S | 113 |
5 files changed, 0 insertions, 239 deletions
diff --git a/kernel/Makefile b/kernel/Makefile index dc75b20..9417ffd 100644 --- a/kernel/Makefile +++ b/kernel/Makefile @@ -33,9 +33,7 @@ OBJS = \ src/mem/paging.o \ src/misc/graphics.o \ src/misc/stdbuff.o \ - src/scheduler/process.o \ src/scheduler/scheduler.o \ - src/scheduler/switch_process.o \ src/sys/syscall_asm.o \ src/sys/syscall.o \ src/sys/userspace_asm.o \ diff --git a/kernel/include/process.h b/kernel/include/process.h deleted file mode 100644 index 7e8f59d..0000000 --- a/kernel/include/process.h +++ /dev/null @@ -1,25 +0,0 @@ -#ifndef PROCESS_H -#define PROCESS_H - -#include <registers.h> -#include <libk/list.h> - -#define STATUS_READY 0 -#define STATUS_RUNNING 1 -#define STATUS_WAITING 2 - -struct process_t { - registers_t registers; - list_t* next; - uint32_t status; - uint32_t pid; - uint32_t time_using_cpu; -}; -typedef struct process_t process_t; - -extern process_t process_list; -extern process_t current_process; - -void create_process(uint64_t rip, uint64_t param1, uint64_t param2); - -#endif diff --git a/kernel/include/registers.h b/kernel/include/registers.h deleted file mode 100644 index 373e557..0000000 --- a/kernel/include/registers.h +++ /dev/null @@ -1,61 +0,0 @@ -#ifndef REGISTERS_H -#define REGISTERS_H - -#include <types.h> - -#define RAX 0x0 -#define RBX 0x8 -#define RCX 0x10 -#define RDX 0x18 -#define RSI 0x20 -#define RDI 0x28 -#define RSP 0x30 -#define RBP 0x38 -#define R8 0x40 -#define R9 0x48 -#define R10 0x50 -#define R11 0x58 -#define R12 0x60 -#define R13 0x68 -#define R14 0x70 -#define R15 0x78 -#define RIP 0x80 -#define RFLAGS 0x88 -#define CR3 0x90 -#define CS 0x98 -#define DS 0x9c -#define SS 0x100 -#define ES 0x104 -#define FS 0x108 -#define GS 0x10c - -struct registers_t { - uint64_t rax; - uint64_t rbx; - uint64_t rcx; - uint64_t rdx; - uint64_t rsi; - uint64_t rdi; - uint64_t rsp; - uint64_t rbp; - uint64_t r8; - uint64_t r9; - uint64_t r10; - uint64_t r11; - uint64_t r12; - uint64_t r13; - uint64_t r14; - uint64_t r15; - uint64_t rip; - uint64_t rflags; - uint64_t cr3; - uint16_t cs; - uint16_t ds; - uint16_t ss; - uint16_t es; - uint16_t fs; - uint16_t gs; -} __attribute__((packed, aligned(8))); -typedef struct registers_t registers_t; - -#endif diff --git a/kernel/src/scheduler/process.c b/kernel/src/scheduler/process.c deleted file mode 100644 index 92c6ab3..0000000 --- a/kernel/src/scheduler/process.c +++ /dev/null @@ -1,38 +0,0 @@ -#include <types.h> -#include <registers.h> -#include <heap.h> -#include <process.h> - -process_t process_list; -process_t current_process; - -void create_process(uint64_t rip, uint64_t param1, uint64_t param2) -{ - process_t* process = (process_t*)kalloc(sizeof(process_t)); - registers_t* regs = &process->registers; - regs->rax = 0; - regs->rbx = 0; - regs->rcx = 0; - regs->rdx = 0; - regs->rsi = 0; - regs->rdi = 0; - regs->rsp = 0; - regs->rbp = 0; - regs->r8 = 0; - regs->r9 = 0; - regs->r10 = 0; - regs->r11 = 0; - regs->r12 = 0; - regs->r13 = 0; - regs->r14 = 0; - regs->r15 = 0; - regs->rflags = 0; - - uint64_t stack_size = 4*4096; - regs->rsp = (uint64_t)kalloc(4*4096) + stack_size - 8; - regs->rip = rip; - regs->rdi = param1; - regs->rsi = param2; - process->status = STATUS_READY; - process->time_using_cpu = 0; -} diff --git a/kernel/src/scheduler/switch_process.S b/kernel/src/scheduler/switch_process.S deleted file mode 100644 index 7209d37..0000000 --- a/kernel/src/scheduler/switch_process.S +++ /dev/null @@ -1,113 +0,0 @@ -.extern current_process -.extern schedule - -.text - -.set RAX, 0x0 -.set RBX, 0x8 -.set RCX, 0x10 -.set RDX, 0x18 -.set RSI, 0x20 -.set RDI, 0x28 -.set RSP, 0x30 -.set RBP, 0x38 -.set R8, 0x40 -.set R9, 0x48 -.set R10, 0x50 -.set R11, 0x58 -.set R12, 0x60 -.set R13, 0x68 -.set R14, 0x70 -.set R15, 0x78 -.set RIP, 0x80 -.set RFLAGS, 0x88 -.set CR3, 0x90 -.set CS, 0x98 -.set DS, 0x9c -.set SS, 0x100 -.set ES, 0x104 -.set FS, 0x108 -.set GS, 0x10c - -.macro save_regs - mov %rax, RAX(%rsp) - mov %rbx, RBX(%rsp) - mov %rax, RAX(%rsp) - mov %rbx, RBX(%rsp) - mov %rcx, RCX(%rsp) - mov %rdx, RDX(%rsp) - mov %rsi, RSI(%rsp) - mov %rdi, RDI(%rsp) -# mov %rsp, RSP(%rsp) - mov %rbp, RBP(%rsp) - mov %r8, R8(%rsp) - mov %r9, R9(%rsp) - mov %r10, R10(%rsp) - mov %r11, R11(%rsp) - mov %r12, R12(%rsp) - mov %r13, R13(%rsp) - mov %r14, R14(%rsp) - mov %r15, R15(%rsp) -# mov %rip, RIP(%rsp) - - pushfq - pop %rax - mov %rax, RFLAGS(%rsp) - -# mov %cr3, CR3(%rsp) - mov %cs, CS(%rsp) - mov %ds, DS(%rsp) - mov %ss, SS(%rsp) - mov %es, ES(%rsp) - mov %fs, FS(%rsp) - mov %gs, GS(%rsp) -.endm - -.macro restore_regs - mov RBX(%rsp), %rbx - mov RAX(%rsp), %rax - mov RBX(%rsp), %rbx - mov RCX(%rsp), %rcx - mov RDX(%rsp), %rdx - mov RSI(%rsp), %rsi - mov RDI(%rsp), %rdi -# mov RSP(%rsp), %rsp - mov RBP(%rsp), %rbp - mov R8(%rsp), %r8 - mov R9(%rsp), %r9 - mov R10(%rsp), %r10 - mov R11(%rsp), %r11 - mov R12(%rsp), %r12 - mov R13(%rsp), %r13 - mov R14(%rsp), %r14 - mov R15(%rsp), %r15 -# mov RIP(%rsp), %rip - - mov RFLAGS(%rsp), %rax - push %rax - popfq - - mov RAX(%rsp), %rax - -# mov CR3(%rsp), %cr3 - mov CS(%rsp), %cs - mov DS(%rsp), %ds - mov SS(%rsp), %ss - mov ES(%rsp), %es - mov FS(%rsp), %fs - mov GS(%rsp), %gs -.endm - - -.global switch_process -switch_process: - # save current process context - mov current_process, %rsp - save_regs - - # get which process is next - call schedule - - # restore next process context - mov current_process, %rsp - restore_regs |
