[−][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: u16
esp0: u32
ss0: u16
_reserved2: u16
esp1: u32
ss1: u16
_reserved3: u16
esp2: u32
ss2: u16
_reserved4: u16
cr3: u32
eip: u32
eflags: u32
eax: u32
ecx: u32
edx: u32
ebx: u32
esp: u32
ebp: u32
esi: u32
edi: u32
es: u16
_reserved5: u16
cs: u16
_reserved6: u16
ss: u16
_reserved7: u16
ds: u16
_reserved8: u16
fs: u16
_reserved9: u16
gs: u16
_reserveda: u16
ldt_selector: u16
_reservedb: u16
_reservedc: u16
iopboffset: u16
Implementations
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>,