In some embodiments, when a system such as a TidalPod starts up, all pages are empty (e.g., dormant). The guest operating system then begins allocating pages. For example, when a page is allocated, a page number (e.g., 4567) is allocated. Upon allocation, the page is zeroed out, and then its address is put in the second level page table (the page is not made visible until after it has been zeroed out). Now, if an attempt is made to address some pages that are known to the hyper-kernel as 4567, a page of zeroes will be seen.
In some embodiments, until allocation, the page does not exist. When a TidalPod with a number of nodes and processors is started up, a majority of the pages are dormant at startup time. As the pages are used, they become valid. This holds true for pages in dynamic memory as well as in the NAM.
In some embodiments, the number of pages in the NAM agrees with the number of pages that the guest operating system observes. Other copies of pages (e.g., shadow copies) of the page may exist (e.g., in a page cache), but, in some embodiments, they are not made visible to the guest operating system. There need not be a one-to-one correspondence between the hyper-kernel(s) and the NAM. However, in some embodiments, there is a one-to-one correspondence as seen by the guest operating system.