This commit is contained in:
74
content/news/20260214-development-update.md
Normal file
74
content/news/20260214-development-update.md
Normal file
@@ -0,0 +1,74 @@
|
|||||||
|
+++
|
||||||
|
title = 'Development Update'
|
||||||
|
author = 'Aiken Harris'
|
||||||
|
date = '2026-02-14T11:17:38+01:00'
|
||||||
|
+++
|
||||||
|
It has been several months since our last update. During this time, development of ExectOS has continued steadily,
|
||||||
|
although much of the work has taken place deep within the kernel and boot process. While the original goal of
|
||||||
|
delivering a fully functional memory manager has not yet been achieved, we believe this is a good moment to inform
|
||||||
|
the community about the progress made and the challenges addressed along the way.
|
||||||
|
<!--more-->
|
||||||
|
|
||||||
|
## Focus Area: Memory Manager
|
||||||
|
Since the previous update, development has been focused exclusively on the kernel memory manager. This work required
|
||||||
|
substantial changes not only within the memory subsystem itself but also in the bootloader, where several critical
|
||||||
|
issues were discovered.
|
||||||
|
|
||||||
|
## Bootloader Issues and Fixes
|
||||||
|
During integration work, it became clear that our custom bootloader still contained serious flaws that directly
|
||||||
|
impacted memory manager development:
|
||||||
|
* **XTLDR and XTOSKRNL incompatibility**: The bootloader and the kernel used different memory mapping strategies
|
||||||
|
across architectures. This mismatch resulted in inconsistent virtual memory layouts and prevented reliable
|
||||||
|
initialization of the memory manager. The mapping strategies have now been unified to ensure predictable behavior.
|
||||||
|
* **Incorrect identity mapping of UEFI-reserved memory**: The bootloader was identity-mapping memory regions reserved
|
||||||
|
by UEFI. This was a design error, as it unnecessarily consumed limited virtual address space. The mapping logic has
|
||||||
|
been corrected to avoid reserving virtual space for firmware-managed regions.
|
||||||
|
* **Critical mapping construction bug**: A severe issue in the bootloader's memory mapping builder caused overlapping
|
||||||
|
virtual memory regions. This made correct construction of the PFN (Page Frame Number) database impossible. The
|
||||||
|
mapping generation logic has been rewritten to guarantee non-overlapping, deterministic memory regions.
|
||||||
|
|
||||||
|
### PAE Handling Fix (Bug #23)
|
||||||
|
We also resolved bug #23, which affected PAE support on the i686 platform. The root cause was improper handling of
|
||||||
|
memory descriptors above the 32-bit boundary. The fix ensures that all valid memory regions are correctly preserved and
|
||||||
|
passed to the kernel, allowing full utilization of available RAM under PAE.
|
||||||
|
|
||||||
|
## Progress in the Memory Manager
|
||||||
|
Beyond bootloader fixes, significant progress has been made within the memory manager itself.
|
||||||
|
|
||||||
|
### Dynamic Memory Layout Construction
|
||||||
|
The kernel now dynamically builds its memory layout based on the total amount of detected physical RAM. This ensures
|
||||||
|
that core memory regions, such as: PagedPool, NonPagedPool, or system structures and internal mappings are assigned
|
||||||
|
clearly defined and non-overlapping virtual address ranges. This dynamic approach improves scalability and makes the
|
||||||
|
layout adaptable to systems with varying memory configurations.
|
||||||
|
|
||||||
|
### PFN Database Initialization
|
||||||
|
We are now successfully constructing the PFN database and mapping all memory regions required for the Memory Manager's
|
||||||
|
operation. This was a key milestone, as many higher-level memory operations depend on a correctly initialized PFN layer.
|
||||||
|
|
||||||
|
### Stack Allocation and Deallocation
|
||||||
|
We have implemented internal routines for allocating and freeing memory intended for kernel stacks. These mechanisms
|
||||||
|
allow:
|
||||||
|
* Allocation of stacks with arbitrary sizes depending on requirements,
|
||||||
|
* Proper tracking and release of stack memory
|
||||||
|
This is a prerequisite for thread management. As a result, we can now begin work on kernel thread support. In the near
|
||||||
|
future, we plan to introduce functionality for dynamically growing existing stacks.
|
||||||
|
|
||||||
|
## Current Work
|
||||||
|
At present, development is focused on implementing general-purpose allocation and deallocation routines for arbitrary
|
||||||
|
address pools, specifically: PagedPool and NonPagedPool. These allocators are essential for enabling further kernel
|
||||||
|
subsystems.
|
||||||
|
One of the next major items on our roadmap is SMT support. We intend to introduce it as early as possible to reduce
|
||||||
|
issues related to resource locking and race conditions. Bringing up symmetric multithreading early should help expose
|
||||||
|
and eliminate concurrency-related bugs before additional kernel complexity is introduced.
|
||||||
|
|
||||||
|
## Summary
|
||||||
|
Although the fully functional memory manager is not yet complete, substantial foundational work has been finished:
|
||||||
|
* Critical bootloader memory mapping bugs resolved
|
||||||
|
* Proper PAE handling restored
|
||||||
|
* Dynamic kernel memory layout construction implemented
|
||||||
|
* PFN database successfully built
|
||||||
|
* Kernel stack allocation mechanisms introduced
|
||||||
|
|
||||||
|
The project is now in a more stable and architecturally consistent state than it was before. The full and detailed
|
||||||
|
list of changes can be found in the **memmgr** branch. Further updates will follow as we continue stabilizing the
|
||||||
|
allocator infrastructure.
|
||||||
Reference in New Issue
Block a user