30.06.2013 Views

Under the Hood of .NET Memory Management - Simple Talk

Under the Hood of .NET Memory Management - Simple Talk

Under the Hood of .NET Memory Management - Simple Talk

SHOW MORE
SHOW LESS

You also want an ePaper? Increase the reach of your titles

YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.

Chapter 7: The Windows <strong>Memory</strong> Model<br />

If all is well, <strong>the</strong>n <strong>the</strong> missing page should be in <strong>the</strong> page file, and its location stored<br />

within <strong>the</strong> PTE. In that case, it's just a simple matter <strong>of</strong> loading <strong>the</strong> page from <strong>the</strong> page<br />

file and allocating it to a page frame in physical memory.<br />

Ano<strong>the</strong>r example might be <strong>the</strong> first time a reserved address is accessed; in this situation,<br />

<strong>the</strong>re's naturally no physical memory associated with it, and so a page fault occurs. The<br />

OS responds to this by allocating a new empty page which, in most cases, doesn't involve<br />

reading anything from disk.<br />

With plenty <strong>of</strong> free space available, <strong>the</strong> solutions to both <strong>of</strong> <strong>the</strong>se situations are easy jobs.<br />

However, it's more difficult under low memory conditions, when <strong>the</strong> memory manager<br />

has to choose a resident page to remove in order to make space.<br />

To do this, Windows looks at physical pages from all user processes to determine <strong>the</strong> best<br />

candidates to be replaced. Pages which are selected for replacement are written to <strong>the</strong><br />

page file and <strong>the</strong>n overwritten with <strong>the</strong> requested page data. Each <strong>of</strong> <strong>the</strong> PTEs are <strong>the</strong>n<br />

adjusted, and address translation completes with <strong>the</strong> correct page in memory.<br />

When discussing data being moved between physical memory and page files, it's worth<br />

talking about a process's working set, which is <strong>the</strong> set <strong>of</strong> its pages currently resident in<br />

physical memory, not counting any shared resources like DLLs. Windows Task Manager<br />

shows memory usage in terms <strong>of</strong> working set, which means that when a process's pages<br />

are swapped out to disk, its working set goes down, but its allocated virtual memory is<br />

not decreasing, which can lead to confusion.<br />

Locking <strong>Memory</strong><br />

If processes need to stop <strong>the</strong>ir pages from being replaced, <strong>the</strong>y can lock <strong>the</strong>m in memory<br />

by calling <strong>the</strong> VirtualAlloc API. This should a familiar notion, as we discussed object<br />

pinning in Chapter 3, and that is all about locking memory. Regardless, it's usually best to<br />

leave it to <strong>the</strong> OS to decide its own page replacement policy.<br />

209

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!