Introduce PS subsystem with IDLE process and thread creation
This commit is contained in:
@@ -77,6 +77,8 @@ list(APPEND XTOSKRNL_SOURCE
|
|||||||
${XTOSKRNL_SOURCE_DIR}/mm/pool.cc
|
${XTOSKRNL_SOURCE_DIR}/mm/pool.cc
|
||||||
${XTOSKRNL_SOURCE_DIR}/mm/pte.cc
|
${XTOSKRNL_SOURCE_DIR}/mm/pte.cc
|
||||||
${XTOSKRNL_SOURCE_DIR}/po/idle.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}/dispatch.cc
|
||||||
${XTOSKRNL_SOURCE_DIR}/rtl/${ARCH}/exsup.cc
|
${XTOSKRNL_SOURCE_DIR}/rtl/${ARCH}/exsup.cc
|
||||||
${XTOSKRNL_SOURCE_DIR}/rtl/${ARCH}/intrin.cc
|
${XTOSKRNL_SOURCE_DIR}/rtl/${ARCH}/intrin.cc
|
||||||
|
|||||||
18
xtoskrnl/includes/ps.hh
Normal file
18
xtoskrnl/includes/ps.hh
Normal 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 */
|
||||||
25
xtoskrnl/includes/ps/process.hh
Normal file
25
xtoskrnl/includes/ps/process.hh
Normal 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 */
|
||||||
26
xtoskrnl/includes/ps/thread.hh
Normal file
26
xtoskrnl/includes/ps/thread.hh
Normal 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 */
|
||||||
@@ -24,4 +24,5 @@
|
|||||||
#include <ke.hh>
|
#include <ke.hh>
|
||||||
#include <mm.hh>
|
#include <mm.hh>
|
||||||
#include <po.hh>
|
#include <po.hh>
|
||||||
|
#include <ps.hh>
|
||||||
#include <rtl.hh>
|
#include <rtl.hh>
|
||||||
|
|||||||
43
xtoskrnl/ps/process.cc
Normal file
43
xtoskrnl/ps/process.cc
Normal 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
60
xtoskrnl/ps/thread.cc
Normal 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;
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user