From 597818524277bf24a2d6b10f540cbf2c34c2bb34 Mon Sep 17 00:00:00 2001 From: Andreas Kling Date: Thu, 25 Oct 2018 13:53:49 +0200 Subject: [PATCH] Add a "sleep" syscall that sleeps for N seconds. --- Kernel/ProcFileSystem.cpp | 4 ++-- Kernel/Syscall.cpp | 1 - Kernel/Task.cpp | 15 +++++++++------ Kernel/Task.h | 2 +- Kernel/_fs_contents | Bin 1024000 -> 1024000 bytes Kernel/sync-sh | 1 + LibC/unistd.cpp | 5 +++++ LibC/unistd.h | 1 + Userland/.gitignore | 1 + Userland/Makefile | 9 +++++++-- Userland/sleep.cpp | 10 ++++++++++ 11 files changed, 37 insertions(+), 12 deletions(-) create mode 100644 Userland/sleep.cpp diff --git a/Kernel/ProcFileSystem.cpp b/Kernel/ProcFileSystem.cpp index 5942e8559c..d6aa99bbc2 100644 --- a/Kernel/ProcFileSystem.cpp +++ b/Kernel/ProcFileSystem.cpp @@ -24,9 +24,9 @@ bool ProcFileSystem::initialize() auto stringImpl = StringImpl::createUninitialized(tasks.size() * 256, buffer); memset(buffer, 0, stringImpl->length()); char* ptr = buffer; - ptr += ksprintf(ptr, "PID OWNER STATE PPID NSCHED FDS NAME\n"); + ptr += ksprintf(ptr, "PID OWNER STATE PPID NSCHED FDS NAME\n"); for (auto* task : tasks) { - ptr += ksprintf(ptr, "%w %w:%w %b %w %w %w %s\n", + ptr += ksprintf(ptr, "%w %w:%w %b %w %x %w %s\n", task->pid(), task->uid(), task->gid(), diff --git a/Kernel/Syscall.cpp b/Kernel/Syscall.cpp index 538b635d15..762008e84f 100644 --- a/Kernel/Syscall.cpp +++ b/Kernel/Syscall.cpp @@ -61,7 +61,6 @@ DWORD handle(DWORD function, DWORD arg1, DWORD arg2, DWORD arg3) Console::the().putChar(arg1 & 0xff); break; case Syscall::Sleep: - //kprintf("syscall: sleep(%d)\n", arg1); current->sys$sleep(arg1); break; case Syscall::Spawn: diff --git a/Kernel/Task.cpp b/Kernel/Task.cpp index 44240a77e5..9612a24cb9 100644 --- a/Kernel/Task.cpp +++ b/Kernel/Task.cpp @@ -10,6 +10,7 @@ #include #include "MemoryManager.h" #include "errno.h" +#include "i8253.h" //#define DEBUG_IO //#define TASK_DEBUG @@ -719,6 +720,14 @@ int Task::sys$kill(pid_t pid, int sig) return -1; } +int Task::sys$sleep(unsigned seconds) +{ + if (!seconds) + return 0; + sleep(seconds * TICKS_PER_SECOND); + return 0; +} + uid_t Task::sys$getuid() { return m_uid; @@ -773,12 +782,6 @@ void sleep(DWORD ticks) yield(); } -void Task::sys$sleep(DWORD ticks) -{ - ASSERT(this == current); - sleep(ticks); -} - Task* Task::kernelTask() { ASSERT(s_kernelTask); diff --git a/Kernel/Task.h b/Kernel/Task.h index 9d84877f89..13435fc528 100644 --- a/Kernel/Task.h +++ b/Kernel/Task.h @@ -91,7 +91,6 @@ public: int sys$seek(int fd, int offset); int sys$kill(pid_t pid, int sig); int sys$geterror() { return m_error; } - void sys$sleep(DWORD ticks); void sys$exit(int status); int sys$spawn(const char* path); pid_t sys$waitpid(pid_t); @@ -99,6 +98,7 @@ public: int sys$munmap(void*, size_t size); int sys$get_dir_entries(int fd, void*, size_t); int sys$getcwd(char*, size_t); + int sys$sleep(unsigned seconds); static void initialize(); diff --git a/Kernel/_fs_contents b/Kernel/_fs_contents index 182fabbb3f1c8812fbdba97dd26faf6846cd4807..da330ef7e331510de91b386c9be3a52985107048 100644 GIT binary patch delta 33339 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 delta 6742 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 NjS{}?8YTQUv;lGJ$dUj6 diff --git a/Kernel/sync-sh b/Kernel/sync-sh index e2d1e6cd2a..b19da4ba8f 100755 --- a/Kernel/sync-sh +++ b/Kernel/sync-sh @@ -5,5 +5,6 @@ cp ../Userland/id mnt/bin/id cp ../Userland/ps mnt/bin/ps cp ../Userland/ls mnt/bin/ls cp ../Userland/pwd mnt/bin/pwd +cp ../Userland/sleep mnt/bin/sleep umount mnt sync diff --git a/LibC/unistd.cpp b/LibC/unistd.cpp index 335645e91b..82077c5a52 100644 --- a/LibC/unistd.cpp +++ b/LibC/unistd.cpp @@ -57,5 +57,10 @@ char* getcwd(char* buffer, size_t size) __RETURN_WITH_ERRNO(rc, buffer, nullptr); } +int sleep(unsigned seconds) +{ + return Syscall::invoke(Syscall::Sleep, (dword)seconds); +} + } diff --git a/LibC/unistd.h b/LibC/unistd.h index 96603a6795..2f8f1b5c4e 100644 --- a/LibC/unistd.h +++ b/LibC/unistd.h @@ -13,6 +13,7 @@ int close(int fd); pid_t waitpid(pid_t); char* getcwd(char* buffer, size_t size); int lstat(const char* path, stat* statbuf); +int sleep(unsigned seconds); #define S_IFMT 0170000 #define S_IFDIR 0040000 diff --git a/Userland/.gitignore b/Userland/.gitignore index ed1a6797f5..9effb83fcc 100644 --- a/Userland/.gitignore +++ b/Userland/.gitignore @@ -3,4 +3,5 @@ sh ps ls pwd +sleep *.o diff --git a/Userland/Makefile b/Userland/Makefile index 2a866fcc04..20e729d999 100644 --- a/Userland/Makefile +++ b/Userland/Makefile @@ -3,14 +3,16 @@ OBJS = \ sh.o \ ps.o \ ls.o \ - pwd.o + pwd.o \ + sleep.o APPS = \ id \ sh \ ps \ ls \ - pwd + pwd \ + sleep ARCH_FLAGS = STANDARD_FLAGS = -std=c++17 -nostdinc++ -nostdlib @@ -45,6 +47,9 @@ ls: ls.o pwd: pwd.o $(LD) -o $@ $(LDFLAGS) $< ../LibC/LibC.a +sleep: sleep.o + $(LD) -o $@ $(LDFLAGS) $< ../LibC/LibC.a + .cpp.o: @echo "CXX $<"; $(CXX) $(CXXFLAGS) -o $@ -c $< diff --git a/Userland/sleep.cpp b/Userland/sleep.cpp new file mode 100644 index 0000000000..c0e7c44eea --- /dev/null +++ b/Userland/sleep.cpp @@ -0,0 +1,10 @@ +#include +#include + +int main(int c, char** v) +{ + unsigned secs = 10; + sleep(secs); + return 0; +} +