Refactor MMU for multi-paging support and add 5-Level paging #16

已合并
harraiken 2025-08-23 20:03:56 +02:00 将 35 次代码提交从 harraiken_mm合并至 master
共有 9 个文件被更改,包括 106 次插入39 次删除
仅显示提交 5768d4bba6 的更改 - 显示所有提交

查看文件

@@ -62,6 +62,7 @@ list(APPEND XTOSKRNL_SOURCE
${XTOSKRNL_SOURCE_DIR}/mm/pages.c ${XTOSKRNL_SOURCE_DIR}/mm/pages.c
${XTOSKRNL_SOURCE_DIR}/mm/${ARCH}/init.c ${XTOSKRNL_SOURCE_DIR}/mm/${ARCH}/init.c
${XTOSKRNL_SOURCE_DIR}/mm/${ARCH}/pages.c ${XTOSKRNL_SOURCE_DIR}/mm/${ARCH}/pages.c
${XTOSKRNL_SOURCE_DIR}/mm/${ARCH}/pmap.c
${XTOSKRNL_SOURCE_DIR}/po/idle.c ${XTOSKRNL_SOURCE_DIR}/po/idle.c
${XTOSKRNL_SOURCE_DIR}/rtl/atomic.c ${XTOSKRNL_SOURCE_DIR}/rtl/atomic.c
${XTOSKRNL_SOURCE_DIR}/rtl/bitmap.c ${XTOSKRNL_SOURCE_DIR}/rtl/bitmap.c

查看文件

@@ -13,11 +13,19 @@
/* AMD64 Memory Manager routines forward references */ /* AMD64 Memory Manager routines forward references */
XTAPI
VOID
MmInitializePageMapSupport(VOID);
XTFASTCALL XTFASTCALL
VOID VOID
MmZeroPages(IN PVOID Address, MmZeroPages(IN PVOID Address,
IN ULONG Size); IN ULONG Size);
XTAPI
BOOLEAN
MmpGetExtendedPhysicalAddressingStatus(VOID);
XTAPI XTAPI
PMMPTE PMMPTE
MmpGetPdeAddress(PVOID Address); MmpGetPdeAddress(PVOID Address);
@@ -38,8 +46,4 @@ XTAPI
VOID VOID
MmpInitializeArchitecture(VOID); MmpInitializeArchitecture(VOID);
XTAPI
BOOLEAN
MmpMemoryExtensionEnabled(VOID);
#endif /* __XTOSKRNL_AMD64_MMI_H */ #endif /* __XTOSKRNL_AMD64_MMI_H */

查看文件

@@ -13,15 +13,27 @@
/* i686 Memory Manager routines forward references */ /* i686 Memory Manager routines forward references */
XTAPI
VOID
MmInitializePageMapSupport(VOID);
XTFASTCALL XTFASTCALL
VOID VOID
MmZeroPages(IN PVOID Address, MmZeroPages(IN PVOID Address,
IN ULONG Size); IN ULONG Size);
XTAPI XTAPI
PMMPTE BOOLEAN
MmpGetExtendedPhysicalAddressingStatus(VOID);
XTAPI
PMMPDE
MmpGetPdeAddress(PVOID Address); MmpGetPdeAddress(PVOID Address);
XTAPI
PMMPPE
MmpGetPpeAddress(PVOID Address);
XTAPI XTAPI
PMMPTE PMMPTE
MmpGetPteAddress(PVOID Address); MmpGetPteAddress(PVOID Address);
@@ -30,8 +42,4 @@ XTAPI
VOID VOID
MmpInitializeArchitecture(VOID); MmpInitializeArchitecture(VOID);
XTAPI
BOOLEAN
MmpMemoryExtensionEnabled(VOID);
#endif /* __XTOSKRNL_I686_MMI_H */ #endif /* __XTOSKRNL_I686_MMI_H */

查看文件

@@ -52,6 +52,9 @@ KepInitializeMachine(VOID)
/* Initialize processor */ /* Initialize processor */
HlInitializeProcessor(); HlInitializeProcessor();
/* Initialize page map support */
MmInitializePageMapSupport();
} }
/** /**

查看文件

@@ -52,6 +52,9 @@ KepInitializeMachine(VOID)
/* Initialize processor */ /* Initialize processor */
HlInitializeProcessor(); HlInitializeProcessor();
/* Initialize page map support */
MmInitializePageMapSupport();
} }
/** /**

查看文件

@@ -9,6 +9,20 @@
#include <xtos.h> #include <xtos.h>
/**
* Detects if eXtended Physical Addressing (XPA) is enabled and initializes page map support.
*
* @return This routine does not return any value.
*
* @since XT 1.0
*/
XTAPI
VOID
MmInitializePageMapSupport(VOID)
{
UNIMPLEMENTED;
}
/** /**
* Gets the address of the PDE (Page Directory Entry), that maps given address. * Gets the address of the PDE (Page Directory Entry), that maps given address.
* *
@@ -102,18 +116,3 @@ MmpInitializeArchitecture(VOID)
{ {
UNIMPLEMENTED; UNIMPLEMENTED;
} }
/**
* Checks if LA57 (PML5) is enabled.
*
* @return This routine returns TRUE if LA57 is enabled, or FALSE otherwise.
*
* @since XT 1.0
*/
XTAPI
BOOLEAN
MmpMemoryExtensionEnabled(VOID)
{
/* Check if LA57 (PML5) is enabled */
return ((ArReadControlRegister(4) & CR4_LA57) != 0) ? TRUE : FALSE;
}

25
xtoskrnl/mm/amd64/pmap.c 普通文件
查看文件

@@ -0,0 +1,25 @@
/**
* PROJECT: ExectOS
* COPYRIGHT: See COPYING.md in the top level directory
* FILE: xtoskrnl/mm/amd64/pmap.c
* DESCRIPTION: Low-level support for AMD64 page map manipulation
* DEVELOPERS: Aiken Harris <harraiken91@gmail.com>
*/
#include <xtos.h>
/**
* Checks if eXtended Physical Addressing (XPA) is enabled.
*
* @return This routine returns TRUE if LA57 is enabled, or FALSE otherwise.
*
* @since XT 1.0
*/
XTAPI
BOOLEAN
MmpGetExtendedPhysicalAddressingStatus(VOID)
{
/* Check if LA57 is enabled */
return ((ArReadControlRegister(4) & CR4_LA57) != 0) ? TRUE : FALSE;
}

查看文件

@@ -9,6 +9,20 @@
#include <xtos.h> #include <xtos.h>
/**
* Detects if eXtended Physical Addressing (XPA) is enabled and initializes page map support.
*
* @return This routine does not return any value.
*
* @since XT 1.0
*/
XTAPI
VOID
MmInitializePageMapSupport(VOID)
{
UNIMPLEMENTED;
}
/** /**
* Gets the address of the PDE (Page Directory Entry), that maps given address. * Gets the address of the PDE (Page Directory Entry), that maps given address.
* *
@@ -64,18 +78,3 @@ MmpInitializeArchitecture(VOID)
{ {
UNIMPLEMENTED; UNIMPLEMENTED;
} }
/**
* Checks if PAE (Physical Address Extension) is enabled.
*
* @return This routine returns TRUE if PAE is enabled, or FALSE otherwise.
*
* @since XT 1.0
*/
XTAPI
BOOLEAN
MmpMemoryExtensionEnabled(VOID)
{
/* Check if PAE is enabled */
return ((ArReadControlRegister(4) & CR4_PAE) != 0) ? TRUE : FALSE;
}

25
xtoskrnl/mm/i686/pmap.c 普通文件
查看文件

@@ -0,0 +1,25 @@
/**
* PROJECT: ExectOS
* COPYRIGHT: See COPYING.md in the top level directory
* FILE: xtoskrnl/mm/i686/pmap.c
* DESCRIPTION: Low-level support for i686 page map manipulation
* DEVELOPERS: Aiken Harris <harraiken91@gmail.com>
*/
#include <xtos.h>
/**
* Checks if eXtended Physical Addressing (XPA) is enabled.
*
* @return This routine returns TRUE if PAE is enabled, or FALSE otherwise.
*
* @since XT 1.0
*/
XTAPI
BOOLEAN
MmpGetExtendedPhysicalAddressingStatus(VOID)
{
/* Check if PAE is enabled */
return ((ArReadControlRegister(4) & CR4_PAE) != 0) ? TRUE : FALSE;
}