Initial implementation of process initialization
All checks were successful
ci/woodpecker/push/build Pipeline was successful
All checks were successful
ci/woodpecker/push/build Pipeline was successful
This commit is contained in:
parent
c4d1f1cd0d
commit
9c74aafe3d
@ -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 */
|
||||||
|
@ -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;
|
||||||
|
|
||||||
|
@ -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))
|
||||||
|
@ -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;
|
||||||
|
@ -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
|
||||||
|
@ -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
69
xtoskrnl/ke/kprocess.c
Normal 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;
|
||||||
|
}
|
Loading…
Reference in New Issue
Block a user