This commit is contained in:
2025-12-03 05:50:05 +01:00
parent 246a5bc3e6
commit a4bf6ab8c8
4 changed files with 13 additions and 3 deletions

View File

@@ -61,6 +61,8 @@ extern "C" size_t syscall_handler(size_t sysnum, size_t p1, size_t p2,
case Syscall::ID::SEM_SIGNAL: case Syscall::ID::SEM_SIGNAL:
Syscall::Skeleton::sem_signal(Guard::enter().vault(), p1); Syscall::Skeleton::sem_signal(Guard::enter().vault(), p1);
break; break;
case Syscall::ID::SYS_EXIT:
Syscall::Skeleton::exit(Guard::enter().vault());
} }

View File

@@ -97,7 +97,9 @@ bool sem_wait(Vault &vault, size_t id) {
return true; return true;
} }
void exit(Vault &vault) { (void)vault; } void exit(Vault &vault) {
vault.scheduler.exit();
}
} // namespace Skeleton } // namespace Skeleton
} // namespace Syscall } // namespace Syscall

View File

@@ -15,7 +15,7 @@ enum class ID : size_t {
SEM_WAIT=6, SEM_WAIT=6,
SEM_SIGNAL=7, SEM_SIGNAL=7,
//SYS_GETPID=8, //SYS_GETPID=8,
//SYS_EXIT= 9, SYS_EXIT= 9,
//SYS_KILL=10 //SYS_KILL=10
}; };
} // namespace Syscall } // namespace Syscall
@@ -59,3 +59,7 @@ extern "C" ssize_t sys_safe_call(Syscall::ID id, size_t p1, size_t p2,
return sys_call(Syscall::ID::SEM_SIGNAL, fd, semid,0,0,0); return sys_call(Syscall::ID::SEM_SIGNAL, fd, semid,0,0,0);
} }
[[gnu::always_inline]] static inline void sys_exit(){
sys_call(Syscall::ID::SYS_EXIT, 0, 0, 0, 0, 0);
}

View File

@@ -25,8 +25,10 @@ void Application::action() { // NOLINT
char text[] = "testX"; char text[] = "testX";
text[4] = 0x30+id; text[4] = 0x30+id;
for (unsigned i = 0;; ++i) { for (unsigned i = 1;; ++i) {
write(0, text, sizeof(text)); write(0, text, sizeof(text));
if(i==id)
sys_exit();
sleep(1000); sleep(1000);
} }
} }