Patent ID: 7370174

Claim:
A method, comprising: identifying a plurality of pages of memory locations allocated to an input/output (I/O) device, wherein the memory locations within each page are contiguous and wherein each page of a plurality of said pages is of a first size and each page of a plurality of said pages is of a second size different from said first size; for each identified page, storing in a translation entry of a data structure table, a physical address of an identified page; assigning each identified page a page virtual address which identifies a data structure translation entry in which is stored the physical address of the identified page; and assigning each memory location a memory location virtual address which includes the page virtual address of the page containing the memory location, and a physical address offset relative to the page physical address of the page containing the memory location; wherein the size of the page containing the memory location addressed by the assigned memory location virtual address is equal to 2 P memory locations and the physical address offset of the memory location addressed by the memory location virtual address is defined by the P least significant bits of the memory location virtual address, wherein the assigned memory location virtual addresses define a virtual address space which includes a plurality of blocks of virtual addresses and wherein the virtual addresses assigned to memory pages of the same size are within the same block of virtual addresses, wherein the data structure table has a plurality of segments of translation entries, wherein for each translation entry of a particular segment, the size of the page addressed by each entry of the particular segment is the same, wherein each data structure table segment of translation entries is assigned a base virtual address of said virtual address space, and wherein each data structure table segment of translation entries is assigned a base translation entry index which for a particular data structure table segment, equals the number of translation entries for pages of greater size than the size of the pages addressed by the translation entries of the particular data structure table segment.