[−][src]Struct sunrise_kernel::i386::TssStruct
The Task State Segment (TSS) is a special data structure for x86 processors which holds information about a task. The TSS is primarily suited for hardware multitasking, where each individual process has its own TSS. (see OSDEV)
Fields
link: u16_reserved1: u16esp0: u32ss0: u16_reserved2: u16esp1: u32ss1: u16_reserved3: u16esp2: u32ss2: u16_reserved4: u16cr3: u32eip: u32eflags: u32eax: u32ecx: u32edx: u32ebx: u32esp: u32ebp: u32esi: u32edi: u32es: u16_reserved5: u16cs: u16_reserved6: u16ss: u16_reserved7: u16ds: u16_reserved8: u16fs: u16_reserved9: u16gs: u16_reserveda: u16ldt_selector: u16_reservedb: u16_reservedc: u16iopboffset: u16Implementations
impl TssStruct[src]
pub const fn empty() -> TssStruct[src]
Creates an empty TssStruct.
All fields are set to 0, suitable for static declarations, so that it can live in the .bss.
The TssStruct must then be initialized with init.
Note that until it is initialized properly, the .iopboffset field will be invalid.
pub fn init(&mut self)[src]
Fills the TSS.
The TSS is filled with kernel segments selectors, and the current cr3. Registers are set to 0.
pub fn set_esp0_stack(&mut self, esp: u32)[src]
Set the stack pointer used to handle interrupts occuring while running in Ring3.
If an interrupt occurs while running in Ring3, it would be a security problem to use the user-controlled stack to handle the interrupt. To avoid this, we can tell the CPU to instead run the interrupt handler in a separate stack.
pub fn set_ip(&mut self, eip: u32)[src]
Set the IP of the current task struct. When we hardware task switch to this TSS, we will resume running at the given instruction.
Trait Implementations
Auto Trait Implementations
impl RefUnwindSafe for TssStruct
impl Send for TssStruct
impl Sync for TssStruct
impl Unpin for TssStruct
impl UnwindSafe for TssStruct
Blanket Implementations
impl<T> Any for T where
T: 'static + ?Sized, [src]
T: 'static + ?Sized,
impl<T> Borrow<T> for T where
T: ?Sized, [src]
T: ?Sized,
impl<T> BorrowMut<T> for T where
T: ?Sized, [src]
T: ?Sized,
fn borrow_mut(&mut self) -> &mut T[src]
impl<T> From<T> for T[src]
impl<T, U> Into<U> for T where
U: From<T>, [src]
U: From<T>,
impl<T> ToOwned for T where
T: Clone, [src]
T: Clone,
type Owned = T
The resulting type after obtaining ownership.
fn to_owned(&self) -> T[src]
fn clone_into(&self, target: &mut T)[src]
impl<T, U> TryFrom<U> for T where
U: Into<T>, [src]
U: Into<T>,
type Error = Infallible
The type returned in the event of a conversion error.
fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>[src]
impl<T, U> TryInto<U> for T where
U: TryFrom<T>, [src]
U: TryFrom<T>,