From d3cf3f08d1343d6b265516d5a79ce2d197b59d26 Mon Sep 17 00:00:00 2001 From: Richard Qin Date: Sun, 4 Jan 2026 14:05:49 +0800 Subject: feat(file-system): implement read and write FAT32 File System and basic shell --- src/kernel/proc/proc.cc | 32 +++++++++++++++++++++++++++++++- 1 file changed, 31 insertions(+), 1 deletion(-) (limited to 'src/kernel/proc/proc.cc') diff --git a/src/kernel/proc/proc.cc b/src/kernel/proc/proc.cc index 5db5f7a..6940a3e 100644 --- a/src/kernel/proc/proc.cc +++ b/src/kernel/proc/proc.cc @@ -152,7 +152,8 @@ void forkret() struct cpu *c = mycpu(); c->runqueue->lock.release(); - Drivers::uart_puts("[Proc] forkret: jumping to user.\n"); + // Debug + // Drivers::uart_puts("[Proc] forkret: jumping to user.\n"); // Enter user mode usertrapret(); @@ -185,6 +186,7 @@ static Proc *allocproc() p->state = USED; p->pid = nextpid++; p->priority = 0; + p->killed = 0; p->cpu = mycpu(); p->cwd = nullptr; for (int i = 0; i < NOFILE; i++) @@ -587,6 +589,34 @@ namespace ProcManager } } + int kill(int pid) + { + Proc* p; + proc_mem_lock.acquire(); + for (p = proc_list_head; p != nullptr; p = p->all_next) + { + if (p->pid == pid) + { + p->killed = 1; + + if (p->state == SLEEPING) + { + p->state = RUNNABLE; + + struct cpu *c = mycpu(); + c->runqueue->lock.acquire(); + c->runqueue->enqueue(p); + c->runqueue->lock.release(); + } + + proc_mem_lock.release(); + return 0; + } + } + proc_mem_lock.release(); + return -1; + } + int growproc(int n) { uint64 sz; -- cgit v1.2.3