From a50503e8c9f939505b9cc9cf0dd5676f0b9a0fa2 Mon Sep 17 00:00:00 2001 From: Eggert Jung Date: Wed, 3 Dec 2025 07:07:34 +0100 Subject: [PATCH] add kill + example code scheduler.kill seems like its not implemented comletly or doest work as expected. --- kernel/syscall/handler.cc | 3 +++ kernel/syscall/skeleton.cc | 3 +++ kernel/syscall/stub.h | 6 ++++- kernel/user/app1/appl.cc | 13 ---------- kernel/user/app2/kappl.cc | 62 +++++++++++++++++----------------------------- 5 files changed, 34 insertions(+), 53 deletions(-) diff --git a/kernel/syscall/handler.cc b/kernel/syscall/handler.cc index f88cb65..ce67295 100644 --- a/kernel/syscall/handler.cc +++ b/kernel/syscall/handler.cc @@ -66,6 +66,9 @@ extern "C" size_t syscall_handler(size_t sysnum, size_t p1, size_t p2, case Syscall::ID::SYS_EXIT: Syscall::Skeleton::exit(Guard::enter().vault()); return 0; + case Syscall::ID::SYS_KILL: + Syscall::Skeleton::kill(Guard::enter().vault(),p1); + return 0; } return static_cast(-1); diff --git a/kernel/syscall/skeleton.cc b/kernel/syscall/skeleton.cc index bea3a82..5ba87e6 100644 --- a/kernel/syscall/skeleton.cc +++ b/kernel/syscall/skeleton.cc @@ -108,5 +108,8 @@ void exit(Vault &vault) { vault.scheduler.exit(); } +void kill(Vault &vault, size_t pid){ + vault.scheduler.kill(&apps[pid]); +} } // namespace Skeleton } // namespace Syscall diff --git a/kernel/syscall/stub.h b/kernel/syscall/stub.h index 080ec37..a80bcdf 100644 --- a/kernel/syscall/stub.h +++ b/kernel/syscall/stub.h @@ -16,7 +16,7 @@ enum class ID : size_t { SEM_SIGNAL=7, SYS_GETPID = 8, SYS_EXIT = 9, - //SYS_KILL=10 + SYS_KILL = 10 }; } // namespace Syscall @@ -67,3 +67,7 @@ extern "C" ssize_t sys_safe_call(Syscall::ID id, size_t p1, size_t p2, sys_call(Syscall::ID::SYS_EXIT, 0, 0, 0, 0, 0); } +[[gnu::always_inline]] static inline void sys_kill(size_t pid){ + sys_call(Syscall::ID::SYS_KILL, pid, 0, 0, 0, 0); +} + diff --git a/kernel/user/app1/appl.cc b/kernel/user/app1/appl.cc index d7d2119..e18d08e 100644 --- a/kernel/user/app1/appl.cc +++ b/kernel/user/app1/appl.cc @@ -1,20 +1,7 @@ // vim: set noet ts=4 sw=4: - #include "appl.h" #include "../../syscall/stub.h" -#include "../../arch/core.h" -#include "../../arch/system.h" -#include "../../debug/output.h" -#include "../../device/textstream.h" -#include "../../interrupt/guard.h" -#include "../../sync/semaphore.h" -#include "../../thread/scheduler.h" -extern Semaphore koutsem; -extern TextStream kout; - -extern Application apps[]; - void Application::action() { // NOLINT // Thread 1 may be an auxiliary thread diff --git a/kernel/user/app2/kappl.cc b/kernel/user/app2/kappl.cc index dab69a2..8c714b5 100644 --- a/kernel/user/app2/kappl.cc +++ b/kernel/user/app2/kappl.cc @@ -2,6 +2,7 @@ #include "./kappl.h" #include "../../syscall/stub.h" +#include "../../utils/string.h" #include "../../device/textstream.h" extern TextStream kout; @@ -9,49 +10,32 @@ extern TextStream kout; extern Semaphore koutsem; void KeyboardApplication::action() { // NOLINT + char cmd_buff[100]; + uint8_t bufferpos = 0; while(1){ char msg[11]; int len; len = read(0, msg, 10); - if(len) + if(len){ write(0, msg, len); + memcpy(&cmd_buff[bufferpos], msg, len); + bufferpos+=len; + for(uint8_t i=0; i= CGA::COLUMNS - 1) { - // column = 0; - // koutsem.p(Guard::enter().vault()); - // for (unsigned offset = 0; offset < 3; offset++) { - // for (unsigned column = 0; column < CGA::COLUMNS; ++column) { - // CGA::show(column, line + offset, ' '); - // } - // } - // koutsem.v(Guard::enter().vault()); - // } - // koutsem.p(Guard::enter().vault()); - // kout.setPos(column, line); - // kout << static_cast(key.ascii()); - // kout.flush(); - // koutsem.v(Guard::enter().vault()); - // } - // for (unsigned offset = 0; offset < 3; offset++) { - // { - // Guarded g = Guard::enter(); - // g.vault().bellringer.sleep(g.vault(), 10); - // koutsem.p(g.vault()); - // } - // kout.setPos(column, line + offset); - // kout << static_cast(key.ascii()); - // kout.flush(); - // koutsem.v(Guard::enter().vault()); - // } - //} }