This shows you the differences between two versions of the page.
| Both sides previous revisionPrevious revisionNext revision | Previous revision | ||
| en:multiasm:papc:chapter_6_2 [2025/04/16 10:12] – [Addressing in x64 processors] ktokarz | en:multiasm:papc:chapter_6_2 [2025/04/30 12:14] (current) – [Addressing in x64 processors] ktokarz | ||
|---|---|---|---|
| Line 43: | Line 43: | ||
| </ | </ | ||
| + | ===== Paging ===== | ||
| + | |||
| + | Paging is a mechanism for translating linear addresses to physical addresses. Operating systems extensively use it to implement memory protection and virtual memory mechanisms. The virtual memory mechanism allows the operating system to use the entire address space with less physical memory installed in the computer. The paging is supported by the memory management unit using a structure of tables, stored in memory. | ||
| + | In 32-bit mode, the tables are organised in a two-level structure, with a single page directory table and a set of page tables. The pages can be 4kB or 4MB in size. The 1-bit information about the page size (named PS) is stored in the page directory entry. | ||
| + | |||
| + | * 4kB pages | ||
| + | Each entry in the page directory holds a pointer to the page table, and every page table stores the pointers to the pages. | ||
| + | The linear address is divided into three parts. The first (highest) part is a 10-bit index of the entry in the page directory table, the middle 10 bits form an index of the entry in the page table, and finally, the last (least significant) 12 bits are the offset within the table in memory. This mechanism is shown in Fig {{ref> | ||
| + | |||
| + | <figure paging324kB> | ||
| + | {{ : | ||
| + | < | ||
| + | </ | ||
| + | |||
| + | * 4MB pages | ||
| + | For pages of 4MB in size, the page table level is omitted. The page directory holds the direct pointer to the table in memory. In this situation, the entry in the page directory is indexed with 10 bits, and the offset within the page is 22 bits long. It is shown in the Fig {{ref> | ||
| + | |||
| + | <figure paging324MB> | ||
| + | {{ : | ||
| + | < | ||
| + | </ | ||
| + | |||
| + | In 64-bit mode, the tables are organised in a four or five-level structure. In a 4-level structure, the highest level is a single page map level 4 table, next, there are page directory pointer tables, page directory tables, and page tables. The linear address is divided into six parts. Each table is indexed with 9 bits and can store up to 512 entries. It is shown in the Fig {{ref> | ||
| + | |||
| + | <figure paging644kB> | ||
| + | {{ : | ||
| + | < | ||
| + | </ | ||
| + | |||
| + | As currently built computers have significantly less physical memory than can be theoretically addressed with a 64-bit linear address, producers decided to limit the usable address space. That's why the 4-level paging mechanism recognises only 48 bits, leaving the upper bits unused. In 5-level paging, 57 bits are recognised. The most significant part of the address should have the value of the highest recognisable bit from the address. As the most significant bit of the number represents the sign, duplicating this bit is known as sign extension. | ||
| + | |||
| + | Sign-extended addresses having 48 or 57 recognised bits are known as canonical addresses, while others are non-canonical. It is presented in Fig {{ref> | ||
| + | |||
| + | <figure canonical> | ||
| + | {{ : | ||
| + | < | ||
| + | </ | ||
| ===== Addressing in x64 processors ===== | ===== Addressing in x64 processors ===== | ||
| - | Because the segmentation wasn't used by operating systems software producers, AMD and Intel decided to abandon segmentation in 64-bit processors. For backwards compatibility, | + | Because the segmentation wasn't used by operating systems software producers, AMD and Intel decided to abandon segmentation in 64-bit processors. For backwards compatibility, |
| + | < | ||
| + | In x64 bit mode, some instructions can use segment registers FS and GS as base registers. Operating systems' | ||
| + | </ | ||
| + | The 64-bit mode theoretically allows the processor to address a vast memory of 16 exabytes in size. It is expected that such a big memory will not be installed in currently built computers, so the processors limit the available address space, not only at the paging level but also physically, having a limited number of address bus lines. | ||