From 3de8e1c9321f1b931b98c29382c94fdf7a4a255f Mon Sep 17 00:00:00 2001 From: Alex Date: Fri, 21 Oct 2022 03:49:56 +0300 Subject: [PATCH] More tasking stubs --- Tasking/Mono.cpp | 2 -- Tasking/Multi.cpp | 2 -- Tasking/Task.cpp | 52 +++++++++++++++++++++++++++++++++++++++++++++-- include/task.hpp | 22 ++++++++++++++++++-- 4 files changed, 70 insertions(+), 8 deletions(-) delete mode 100644 Tasking/Mono.cpp delete mode 100644 Tasking/Multi.cpp diff --git a/Tasking/Mono.cpp b/Tasking/Mono.cpp deleted file mode 100644 index 597b435..0000000 --- a/Tasking/Mono.cpp +++ /dev/null @@ -1,2 +0,0 @@ -#include - diff --git a/Tasking/Multi.cpp b/Tasking/Multi.cpp deleted file mode 100644 index 597b435..0000000 --- a/Tasking/Multi.cpp +++ /dev/null @@ -1,2 +0,0 @@ -#include - diff --git a/Tasking/Task.cpp b/Tasking/Task.cpp index e4d7c01..1100730 100644 --- a/Tasking/Task.cpp +++ b/Tasking/Task.cpp @@ -1,26 +1,74 @@ #include #include +#include +#include + +NewLock(TaskingLock); + +#if defined(__amd64__) +#include "../Architecture/amd64/cpu/gdt.hpp" +#elif defined(__i386__) +#elif defined(__aarch64__) +#endif namespace Tasking { - PCB *Task::CreateProcess(char *Name, ExecutionElevation Elevation) +#if defined(__amd64__) +#elif defined(__i386__) +#elif defined(__aarch64__) +#endif + + void a() { + return; + } + + PCB *Task::GetCurrentProcess() + { + SmartCriticalSection(TaskingLock); + return GetCurrentCPU()->CurrentProcess; + } + + TCB *Task::GetCurrentThread() + { + SmartCriticalSection(TaskingLock); + return GetCurrentCPU()->CurrentThread; + } + + PCB *Task::CreateProcess(PCB *Parent, + char *Name, + ExecutionElevation Elevation) + { + SmartCriticalSection(TaskingLock); PCB *Process = new PCB; +#if defined(__amd64__) +#elif defined(__i386__) +#elif defined(__aarch64__) +#endif return Process; } - TCB *Task::CreateThread(PCB *Parent, IP EntryPoint) + TCB *Task::CreateThread(PCB *Parent, + IP EntryPoint) { + SmartCriticalSection(TaskingLock); TCB *Thread = new TCB; +#if defined(__amd64__) +#elif defined(__i386__) +#elif defined(__aarch64__) +#endif return Thread; } Task::Task(const IP EntryPoint) { + SmartCriticalSection(TaskingLock); trace("Starting tasking with IP: %#lx", EntryPoint); } Task::~Task() { + SmartCriticalSection(TaskingLock); + trace("Stopping tasking"); } } diff --git a/include/task.hpp b/include/task.hpp index 65ab651..cf0c73d 100644 --- a/include/task.hpp +++ b/include/task.hpp @@ -8,6 +8,7 @@ namespace Tasking typedef unsigned long IP; typedef unsigned long UPID; typedef unsigned long UTID; + typedef unsigned long Token; enum ExecutionElevation { @@ -31,6 +32,7 @@ namespace Tasking struct ExecutionSecurity { ExecutionElevation Elevation; + Token Token; }; struct PCB @@ -51,8 +53,24 @@ namespace Tasking class Task { public: - PCB *CreateProcess(char *Name, ExecutionElevation Elevation); - TCB *CreateThread(PCB *Parent, IP EntryPoint); + /** + * @brief Get the Current Process object + * @return PCB* + */ + PCB *GetCurrentProcess(); + + /** + * @brief Get the Current Thread object + * @return TCB* + */ + TCB *GetCurrentThread(); + + PCB *CreateProcess(PCB *Parent, + char *Name, + ExecutionElevation Elevation); + + TCB *CreateThread(PCB *Parent, + IP EntryPoint); Task(const IP EntryPoint); ~Task();