We provided PE loading support in Chapter 24 for demonstration purposes only. As you are aware, we removed it in Chapter 25 so we can demonstrate threading and multi-threading without the overhead of supporting user mode processes. Supporting user mode processes is still possible, however to do it properly
we need address space management, which has not yet been discussed. We also need a kernel mode heap to allocate the kernel mode stacks for each thread - which we also have not discussed. So, rather then introducing two large topics in Chapter 25 and instead of hacking it to get it to work (it can certainly be done) we opted to wait until these topics are introduced first and remove the code entirely.
With that said, Chapter 26
is in a pre-release state (it is incomplete!) and discusses memory management techniques (including kernel heaps) -- for the series kernel, we will most probably stick with a free list due to its simplicity although the chapter covers more advanced topics as well. This will allow us to dynamically allocate data structures in kernel mode (including kernel mode stacks.)
We will then be covering address space management, such as segmentation, algorithms (list vs AVL tree) and, for our purposes, we will probably use the list approach to keep things simple. This may or may not be in Chapter 26 - still undecided about it. There is also another issue we never actually discussed - updating the page tables. We sort of introduced the topic of recursive page directories in the VMM chapter, however we want to cover it in more detail since we will be needing it in later chapters.
Some additional changes are very small and minor - primarily with the IRQ's - are to improve compatibility with later Visual Studio versions.