[][src]Struct x86_64::structures::paging::RecursivePageTable

pub struct RecursivePageTable<'a> { /* fields omitted */ }

A recursive page table is a last level page table with an entry mapped to the table itself.

This recursive mapping allows accessing all page tables in the hierarchy:

  • To access the level 4 page table, we “loop“ (i.e. follow the recursively mapped entry) four times.
  • To access a level 3 page table, we “loop” three times and then use the level 4 index.
  • To access a level 2 page table, we “loop” two times, then use the level 4 index, then the level 3 index.
  • To access a level 1 page table, we “loop” once, then use the level 4 index, then the level 3 index, then the level 2 index.

This struct implements the Mapper trait.

Methods

impl<'a> RecursivePageTable<'a>
[src]

Creates a new RecursivePageTable from the passed level 4 PageTable.

The page table must be recursively mapped, that means:

  • The page table must have one recursive entry, i.e. an entry that points to the table itself.
    • The reference must use that “loop”, i.e. be of the form 0o_xxx_xxx_xxx_xxx_0000 where xxx is the recursive entry.
  • The page table must be active, i.e. the CR3 register must contain its physical address.

Otherwise Err(NotRecursivelyMapped) is returned.

Creates a new RecursivePageTable without performing any checks.

The recursive_index parameter must be the index of the recursively mapped entry.

Trait Implementations

impl<'a> Mapper<Size1GiB> for RecursivePageTable<'a>
[src]

Maps the given frame to the virtual page with the same address.

impl<'a> Mapper<Size2MiB> for RecursivePageTable<'a>
[src]

Maps the given frame to the virtual page with the same address.

impl<'a> Mapper<Size4KiB> for RecursivePageTable<'a>
[src]

Maps the given frame to the virtual page with the same address.

impl<'a> Debug for RecursivePageTable<'a>
[src]

Auto Trait Implementations

impl<'a> Send for RecursivePageTable<'a>

impl<'a> Sync for RecursivePageTable<'a>

Blanket Implementations

impl<T, U> TryFrom for T where
    T: From<U>, 
[src]

🔬 This is a nightly-only experimental API. (try_from)

The type returned in the event of a conversion error.

impl<T> From for T
[src]

impl<T, U> TryInto for T where
    U: TryFrom<T>, 
[src]

🔬 This is a nightly-only experimental API. (try_from)

The type returned in the event of a conversion error.

impl<T, U> Into for T where
    U: From<T>, 
[src]

impl<T> Borrow for T where
    T: ?Sized
[src]

impl<T> BorrowMut for T where
    T: ?Sized
[src]

impl<T> Any for T where
    T: 'static + ?Sized
[src]