Introduce PS subsystem with IDLE process and thread creation
All checks were successful
Builds / ExectOS (amd64, release) (push) Successful in 33s
Builds / ExectOS (i686, release) (push) Successful in 29s
Builds / ExectOS (amd64, debug) (push) Successful in 50s
Builds / ExectOS (i686, debug) (push) Successful in 48s

This commit is contained in:
2026-06-04 13:09:09 +02:00
parent e2a78389f2
commit 02d0f3f538
7 changed files with 175 additions and 0 deletions

View File

@@ -77,6 +77,8 @@ list(APPEND XTOSKRNL_SOURCE
${XTOSKRNL_SOURCE_DIR}/mm/pool.cc
${XTOSKRNL_SOURCE_DIR}/mm/pte.cc
${XTOSKRNL_SOURCE_DIR}/po/idle.cc
${XTOSKRNL_SOURCE_DIR}/ps/process.cc
${XTOSKRNL_SOURCE_DIR}/ps/thread.cc
${XTOSKRNL_SOURCE_DIR}/rtl/${ARCH}/dispatch.cc
${XTOSKRNL_SOURCE_DIR}/rtl/${ARCH}/exsup.cc
${XTOSKRNL_SOURCE_DIR}/rtl/${ARCH}/intrin.cc

18
xtoskrnl/includes/ps.hh Normal file
View File

@@ -0,0 +1,18 @@
/**
* PROJECT: ExectOS
* COPYRIGHT: See COPYING.md in the top level directory
* FILE: xtoskrnl/includes/ps.hh
* DESCRIPTION: Process and thread management
* DEVELOPERS: Aiken Harris <harraiken91@gmail.com>
*/
#ifndef __XTOSKRNL_PS_HH
#define __XTOSKRNL_PS_HH
#include <xtos.hh>
#include <ps/process.hh>
#include <ps/thread.hh>
#endif /* __XTOSKRNL_PS_HH */

View File

@@ -0,0 +1,25 @@
/**
* PROJECT: ExectOS
* COPYRIGHT: See COPYING.md in the top level directory
* FILE: xtoskrnl/includes/ps/process.hh
* DESCRIPTION: Process Management
* DEVELOPERS: Aiken Harris <harraiken91@gmail.com>
*/
#ifndef __XTOSKRNL_PS_PROCESS_HH
#define __XTOSKRNL_PS_PROCESS_HH
#include <xtos.hh>
/* Process and thread management */
namespace PS
{
class Process
{
public:
STATIC XTAPI VOID CreateIdleProcess(IN PKPROCESSOR_CONTROL_BLOCK Prcb);
};
}
#endif /* __XTOSKRNL_PS_PROCESS_HH */

View File

@@ -0,0 +1,26 @@
/**
* PROJECT: ExectOS
* COPYRIGHT: See COPYING.md in the top level directory
* FILE: xtoskrnl/includes/ps/thread.hh
* DESCRIPTION: Thread Management
* DEVELOPERS: Aiken Harris <harraiken91@gmail.com>
*/
#ifndef __XTOSKRNL_PS_THREAD_HH
#define __XTOSKRNL_PS_THREAD_HH
#include <xtos.hh>
/* Process and thread management */
namespace PS
{
class Thread
{
public:
STATIC XTAPI XTSTATUS CreateIdleThread(IN PKPROCESSOR_CONTROL_BLOCK Prcb,
IN PVOID Stack);
};
}
#endif /* __XTOSKRNL_PS_THREAD_HH */

View File

@@ -24,4 +24,5 @@
#include <ke.hh>
#include <mm.hh>
#include <po.hh>
#include <ps.hh>
#include <rtl.hh>

43
xtoskrnl/ps/process.cc Normal file
View File

@@ -0,0 +1,43 @@
/**
* PROJECT: ExectOS
* COPYRIGHT: See COPYING.md in the top level directory
* FILE: xtoskrnl/po/process.cc
* DESCRIPTION: Process Management
* DEVELOPERS: Aiken Harris <harraiken91@gmail.com>
*/
#include <xtos.hh>
/**
* Creates the global IDLE process.
*
* @param Prcb
* Supplies a pointer to the Processor Control Block of the Bootstrap Processor.
*
* @return This routine does not return any value.
*
* @since XT 1.0
*/
XTAPI
VOID
PS::Process::CreateIdleProcess(IN PKPROCESSOR_CONTROL_BLOCK Prcb)
{
ULONG_PTR PageDirectory[2];
PKPROCESS IdleProcess;
PKTHREAD IdleThread;
/* Get initial IDLE thread */
IdleThread = Prcb->CurrentThread;
/* Get initial IDLE process */
IdleProcess = IdleThread->ApcState.Process;
/* Setup placeholder for page directory entries */
PageDirectory[0] = 0;
PageDirectory[1] = 0;
/* Initialize Idle process and Idle thread */
KE::KProcess::InitializeIdleProcess(IdleProcess, PageDirectory);
KE::KThread::InitializeIdleThread(IdleProcess, IdleThread, Prcb, AR::ProcessorSupport::GetBootStack());
}

60
xtoskrnl/ps/thread.cc Normal file
View File

@@ -0,0 +1,60 @@
/**
* PROJECT: ExectOS
* COPYRIGHT: See COPYING.md in the top level directory
* FILE: xtoskrnl/po/thread.cc
* DESCRIPTION: Thread Management
* DEVELOPERS: Aiken Harris <harraiken91@gmail.com>
*/
#include <xtos.hh>
/**
* Allocates and initializes a per-processor IDLE thread for an Application Processor (AP).
*
* @param Prcb
* Supplies a pointer to the Processor Control Block of the target processor.
*
* @param Stack
* Supplies a pointer to the pre-allocated kernel stack for the new idle thread.
*
* @return This routine returns a status code indicating the success or failure of the operation.
*
* @since XT 1.0
*/
XTAPI
XTSTATUS
PS::Thread::CreateIdleThread(IN PKPROCESSOR_CONTROL_BLOCK Prcb,
IN PVOID Stack)
{
PKPROCESS IdleProcess;
PETHREAD IdleThread;
XTSTATUS Status;
/* Retrieve the global IDLE process container */
IdleProcess = KE::KProcess::GetIdleProcess();
/* Allocate the Executive Thread object */
Status = MM::Allocator::AllocatePool(NonPagedPool, sizeof(ETHREAD), (PVOID*)&IdleThread);
if(Status != STATUS_SUCCESS)
{
/* Allocation failed, return the status code */
return Status;
}
/* Zero the allocated memory to prevent uninitialized data */
RTL::Memory::ZeroMemory(IdleThread, sizeof(ETHREAD));
/* Register the new thread within the Processor Control Block */
Prcb->CurrentThread = &IdleThread->ThreadControlBlock;
Prcb->IdleThread = &IdleThread->ThreadControlBlock;
/* Initialize the IDLE thread */
KE::KThread::InitializeIdleThread(IdleProcess,
&IdleThread->ThreadControlBlock,
Prcb,
Stack);
/* Return success */
return STATUS_SUCCESS;
}