Initial implementation of process initialization
All checks were successful
ci/woodpecker/push/build Pipeline was successful

This commit is contained in:
Rafal Kupiec 2023-02-24 19:52:20 +01:00
parent c4d1f1cd0d
commit 9c74aafe3d
Signed by: belliash
GPG Key ID: 4E829243E0CFE6B4
7 changed files with 116 additions and 0 deletions

View File

@ -39,6 +39,10 @@
#define KTIMER_WAIT_BLOCK 3 #define KTIMER_WAIT_BLOCK 3
#define SEMAPHORE_WAIT_BLOCK 2 #define SEMAPHORE_WAIT_BLOCK 2
/* Quantum values */
#define READY_SKIP_QUANTUM 2
#define THREAD_QUANTUM 6
/* Adjust reason */ /* Adjust reason */
typedef enum _ADJUST_REASON typedef enum _ADJUST_REASON
{ {
@ -96,6 +100,17 @@ typedef enum _KOBJECTS
MaximumKernelObject = 25 MaximumKernelObject = 25
} KOBJECTS, *PKOBJECTS; } KOBJECTS, *PKOBJECTS;
/* Process states */
typedef enum _KPROCESS_STATE
{
ProcessInMemory,
ProcessOutOfMemory,
ProcessInTransition,
ProcessOutTransition,
ProcessInSwap,
ProcessOutSwap
} KPROCESS_STATE, *PKPROCESS_STATE;
/* Thread state */ /* Thread state */
typedef enum _KTHREAD_STATE typedef enum _KTHREAD_STATE
{ {
@ -252,6 +267,13 @@ typedef struct _KWAIT_BLOCK
/* Process control block structure definition */ /* Process control block structure definition */
typedef struct _KPROCESS typedef struct _KPROCESS
{ {
DISPATCHER_HEADER Header;
LIST_ENTRY ProfileListHead;
ULONG_PTR DirectoryTable[2];
USHORT IopmOffset;
LIST_ENTRY ReadyListHead;
LIST_ENTRY ThreadListHead;
KAFFINITY Affinity;
union union
{ {
struct struct
@ -263,6 +285,10 @@ typedef struct _KPROCESS
}; };
LONG ProcessFlags; LONG ProcessFlags;
}; };
SCHAR BasePriority;
SCHAR Quantum;
UCHAR State;
ULONG_PTR StackCount;
} KPROCESS, *PKPROCESS; } KPROCESS, *PKPROCESS;
/* Thread control block structure definition */ /* Thread control block structure definition */

View File

@ -14,6 +14,9 @@
#include <xttypes.h> #include <xttypes.h>
/* Kernel affinity */
typedef ULONG_PTR KAFFINITY, *PKAFFINITY;
/* Interrupt Request Level (IRQL) */ /* Interrupt Request Level (IRQL) */
typedef UCHAR KIRQL, *PKIRQL; typedef UCHAR KIRQL, *PKIRQL;

View File

@ -30,6 +30,14 @@
#define NULL ((PVOID) 0) #define NULL ((PVOID) 0)
#define NULL64 ((VOID * PVOID) 0) #define NULL64 ((VOID * PVOID) 0)
/* Type limits */
#define MINCHAR 0x80
#define MAXCHAR 0x7F
#define MINSHORT 0x8000
#define MAXSHORT 0x7FFF
#define MINLONG 0x80000000
#define MAXLONG 0x7FFFFFFF
/* Preprocessor macros for defining a structure alignment and packing */ /* Preprocessor macros for defining a structure alignment and packing */
#define ALIGN(x) __attribute__((aligned(x))) #define ALIGN(x) __attribute__((aligned(x)))
#define PACK __attribute__((packed)) #define PACK __attribute__((packed))

View File

@ -40,6 +40,7 @@ typedef enum _EFI_UART_STOP_BITS_TYPE EFI_UART_STOP_BITS_TYPE, *PEFI_UART_STOP_B
typedef enum _EFI_UNIVERSA_GRAPHICS_BLT_OPERATION EFI_UNIVERSA_GRAPHICS_BLT_OPERATION, *PEFI_UNIVERSA_GRAPHICS_BLT_OPERATION; typedef enum _EFI_UNIVERSA_GRAPHICS_BLT_OPERATION EFI_UNIVERSA_GRAPHICS_BLT_OPERATION, *PEFI_UNIVERSA_GRAPHICS_BLT_OPERATION;
typedef enum _KAPC_ENVIRONMENT KAPC_ENVIRONMENT, *PKAPC_ENVIRONMENT; typedef enum _KAPC_ENVIRONMENT KAPC_ENVIRONMENT, *PKAPC_ENVIRONMENT;
typedef enum _KOBJECTS KOBJECTS, *PKOBJECTS; typedef enum _KOBJECTS KOBJECTS, *PKOBJECTS;
typedef enum _KPROCESS_STATE KPROCESS_STATE, *PKPROCESS_STATE;
typedef enum _KTHREAD_STATE KTHREAD_STATE, *PKTHREAD_STATE; typedef enum _KTHREAD_STATE KTHREAD_STATE, *PKTHREAD_STATE;
typedef enum _KTIMER_TYPE KTIMER_TYPE, *PKTIMER_TYPE; typedef enum _KTIMER_TYPE KTIMER_TYPE, *PKTIMER_TYPE;
typedef enum _LOADER_MEMORY_TYPE LOADER_MEMORY_TYPE, *PLOADER_MEMORY_TYPE; typedef enum _LOADER_MEMORY_TYPE LOADER_MEMORY_TYPE, *PLOADER_MEMORY_TYPE;

View File

@ -18,6 +18,7 @@ list(APPEND XTOSKRNL_SOURCE
${XTOSKRNL_SOURCE_DIR}/hl/${ARCH}/ioport.c ${XTOSKRNL_SOURCE_DIR}/hl/${ARCH}/ioport.c
${XTOSKRNL_SOURCE_DIR}/ke/apc.c ${XTOSKRNL_SOURCE_DIR}/ke/apc.c
${XTOSKRNL_SOURCE_DIR}/ke/globals.c ${XTOSKRNL_SOURCE_DIR}/ke/globals.c
${XTOSKRNL_SOURCE_DIR}/ke/kprocess.c
${XTOSKRNL_SOURCE_DIR}/ke/krnlinit.c ${XTOSKRNL_SOURCE_DIR}/ke/krnlinit.c
${XTOSKRNL_SOURCE_DIR}/ke/kthread.c ${XTOSKRNL_SOURCE_DIR}/ke/kthread.c
${XTOSKRNL_SOURCE_DIR}/ke/semphore.c ${XTOSKRNL_SOURCE_DIR}/ke/semphore.c

View File

@ -12,6 +12,14 @@
#include <xtos.h> #include <xtos.h>
XTAPI
VOID
KeInitializeProcess(IN OUT PKPROCESS Process,
IN KPRIORITY Priority,
IN KAFFINITY Affinity,
IN PULONG_PTR DirectoryTable,
IN BOOLEAN Alignment);
XTAPI XTAPI
XTSTATUS XTSTATUS
KeInitializeThread(IN PKTHREAD Thread, KeInitializeThread(IN PKTHREAD Thread,

69
xtoskrnl/ke/kprocess.c Normal file
View File

@ -0,0 +1,69 @@
/**
* PROJECT: ExectOS
* COPYRIGHT: See COPYING.md in the top level directory
* FILE: xtoskrnl/ke/kprocess.c
* DESCRIPTION: XT kernel process manipulation support
* DEVELOPERS: Rafal Kupiec <belliash@codingworkshop.eu.org>
*/
#include <xtos.h>
/**
* Initializes the process.
*
* @param Process
* Supplies a pointer to process that will be initialized.
*
* @param Priority
* Specifies the process priority.
*
* @param Affinity
* Specifies a process affinity designating processors on which process can run.
*
* @param DirectoryTable
* Supplies a pointer to the directory table.
*
* @param Alignment
* Specifies the exceptions alignment of the process.
*
* @return This routine does not return any value.
*
* @since NT 3.5
*/
XTAPI
VOID
KeInitializeProcess(IN OUT PKPROCESS Process,
IN KPRIORITY Priority,
IN KAFFINITY Affinity,
IN PULONG_PTR DirectoryTable,
IN BOOLEAN Alignment)
{
/* Initialize process dispatcher header */
Process->Header.Type = ProcessObject;
/* Initialize process wait list */
RtlInitializeListHead(&Process->Header.WaitListHead);
/* Initialize process list heads */
RtlInitializeListHead(&Process->ProfileListHead);
RtlInitializeListHead(&Process->ReadyListHead);
RtlInitializeListHead(&Process->ThreadListHead);
/* Set base process properties */
Process->BasePriority = Priority;
Process->Affinity = Affinity;
Process->AutoAlignment = Alignment;
Process->DirectoryTable[0] = DirectoryTable[0];
Process->DirectoryTable[1] = DirectoryTable[1];
Process->StackCount = MAXSHORT;
/* Set thread quantum */
Process->Quantum = THREAD_QUANTUM;
/* Set IOPM offset */
Process->IopmOffset = sizeof(KTSS);
/* Set initial process state */
Process->State = ProcessInMemory;
}