From bc828883c51c3c0f35872019f4db632e4ce82dc5 Mon Sep 17 00:00:00 2001 From: Anton Kling Date: Wed, 11 Dec 2024 14:56:58 +0100 Subject: procfs: Add a procfs Userland can now interface with processes by writing/reading from `/proc//` It can send signals, for example `echo 15 > /proc/1/signal` --- kernel/sched/scheduler.c | 12 ++++++++++++ 1 file changed, 12 insertions(+) (limited to 'kernel/sched/scheduler.c') diff --git a/kernel/sched/scheduler.c b/kernel/sched/scheduler.c index d0452fd..1b36e8a 100644 --- a/kernel/sched/scheduler.c +++ b/kernel/sched/scheduler.c @@ -98,6 +98,7 @@ process_t *create_process(process_t *p, u32 esp, u32 eip) { if (!r) { return NULL; } + r->reference_count = 1; r->tcb = kcalloc(1, sizeof(struct TCB)); if (!r->tcb) { kfree(r); @@ -147,6 +148,9 @@ process_t *create_process(process_t *p, u32 esp, u32 eip) { r->cr3 = get_active_pagedirectory(); } r->parent = p; + if (p) { + p->reference_count++; + } r->tcb->CR3 = r->cr3->physical_address; @@ -205,6 +209,14 @@ void free_process(process_t *p) { mmu_free_pagedirectory(p->cr3); } +void process_remove_reference(process_t *p) { + assert(0 != p->reference_count); + p->reference_count--; + if (0 == p->reference_count) { + kfree(p); + } +} + void exit_process(process_t *p, int status) { assert(p->pid != 1); disable_interrupts(); -- cgit v1.2.3