[ros-kernel] RE: I can boot ReactOS with 8 Mb!!

Hartmut Birr hartmut.birr at gmx.de
Thu Jan 29 19:46:08 CET 2004


> -----Original Message-----
> From: Waldo Alvarez Cañizares 
> [mailto:ros-kernel-bounces at reactos.com] On
> Behalf Of Waldo Alvarez Cañizares
> Sent: Thursday, January 29, 2004 12:22 AM
> To: ReactOS Kernel List
> Subject: I can boot ReactOS with 8 Mb!!
> 
> 
> that posible? There is a bug in the nonpaged pool where when 
> a block of
> memory is freed, the previous adjacent to is not coalesced, 
> thus causing
> checkerboarding, fixing it is trivial but I have almost ready a patch
> that redesigns all things in there(I'm going to add that check to the
> macro VALIDATEPOOL to avoid it from happening again). I took

If there is a bug in the non paged pool, I would like to fix this bug
without other changes.
 
> away memory
> blocks headers out of the nonpaged pool and putted them in a 
> stack that
> spans across a couple of pages avoiding address translations while
> searching over the tree across the block all over the memory. 
> I removed
> those extra memset's, and changed the AVL tree by a Red-Black Tree.

Some time ago, I've implemented the AVL tree. I haven't written the real
AVL code. It  was easier to found examples for an AVL tree as for an
other balanced tree. If the Red-Black trees are faster or it is easier
to understand the code, we should change to Red-Black trees.

> However, there are a couple of things. One I need to know the 
> memory map
> of the reactos executive because I need a free available block to put

You can look into MmInitVirtualMemory. There is the basic initialisation
of reserved memory areas.

c0000000-zzzzzzzz ntoskrnl and boot drivers
zzzzzzzz-yyyyyyyy ntoskrnl init section
yyyyyyyy-xxxxxxxx ntoskrnl bss section
xxxxxxxx-wwwwwwww boot parameter area
wwwwwwww-vvvvvvvv non paged pool
vvvvvvvv-uuuuuuuu kernel map
uuuuuuuu-tttttttt paged pool
d0000000-d00fffff low memory mapped into kernel space
f0000000-f03f0000 page directories for a process
ff000000-ff01ffff kpcr's for 32 processors
ffdf0000-ffdf0fff shared user page mapped into kernel space

All other ranges are used by the cache manger or other function which
does reserve memory.
 
> physical page to later map it) and faced that the reactos 
> cache manager
> uses the non paged pool (wich is locked at that moment, and 
> that I can't

You must always look the access to the nonpaged pool structures. If the
access is not locked, a thread switching (or an other thread on a smp
machine) can result in a second call to the pool functions.

> unlock or I'll cause race conditions) I tested it unlocking 
> the nonpaged
> pool so that the memory from the cache manager could be freed and I

The cache manger uses only the nonpaged pool for internal datas. The
cache segments are allocate via the memory areas. 

> And finally I'm getting calls to allocate 8, 16, 23, 72 .. 
> and such tiny
> quantities of memory. Hmm that's really bad actually a such a call can
> allocate up to one page which is a looot more than what you 
> ask. I think

For some datas is it possible to allocate them from the stack. But some,
like rmap entries, must be always allocate from the pool.

- Hartmut




More information about the Ros-kernel mailing list