rCore-Tutorial-v3/ch4/os/trap/index.html
2022-03-26 15:01:38 +00:00

29 lines
8.1 KiB
HTML
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<!DOCTYPE html><html lang="en"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><meta name="generator" content="rustdoc"><meta name="description" content="Trap handling functionality"><meta name="keywords" content="rust, rustlang, rust-lang, trap"><title>os::trap - Rust</title><link rel="preload" as="font" type="font/woff2" crossorigin href="../../SourceSerif4-Regular.ttf.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href="../../FiraSans-Regular.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href="../../FiraSans-Medium.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href="../../SourceCodePro-Regular.ttf.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href="../../SourceSerif4-Bold.ttf.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href="../../SourceCodePro-Semibold.ttf.woff2"><link rel="stylesheet" type="text/css" href="../../normalize.css"><link rel="stylesheet" type="text/css" href="../../rustdoc.css" id="mainThemeStyle"><link rel="stylesheet" type="text/css" href="../../ayu.css" disabled><link rel="stylesheet" type="text/css" href="../../dark.css" disabled><link rel="stylesheet" type="text/css" href="../../light.css" id="themeStyle"><script id="default-settings" ></script><script src="../../storage.js"></script><script src="../../crates.js"></script><script defer src="../../main.js"></script>
<noscript><link rel="stylesheet" href="../../noscript.css"></noscript><link rel="alternate icon" type="image/png" href="../../favicon-16x16.png"><link rel="alternate icon" type="image/png" href="../../favicon-32x32.png"><link rel="icon" type="image/svg+xml" href="../../favicon.svg"></head><body class="rustdoc mod"><!--[if lte IE 11]><div class="warning">This old browser is unsupported and will most likely display funky things.</div><![endif]--><nav class="sidebar"><div class="sidebar-menu" role="button">&#9776;</div><a class="sidebar-logo" href="../../os/index.html"><div class="logo-container"><img class="rust-logo" src="../../rust-logo.svg" alt="logo"></div>
</a><h2 class="location"><a href="#">Module trap</a></h2><div class="sidebar-elems"><div class="block items"><ul><li><a href="#modules">Modules</a></li><li><a href="#structs">Structs</a></li><li><a href="#functions">Functions</a></li></ul></div><div id="sidebar-vars" data-name="trap" data-ty="mod" data-relpath="./"></div><script defer src="./sidebar-items.js"></script></div></nav><main><div class="width-limiter"><div class="sub-container"><a class="sub-logo-container" href="../../os/index.html"><img class="rust-logo" src="../../rust-logo.svg" alt="logo"></a><nav class="sub"><div class="theme-picker hidden"><button id="theme-picker" aria-label="Pick another theme!" aria-haspopup="menu" title="themes"><img width="18" height="18" alt="Pick another theme!" src="../../brush.svg"></button><div id="theme-choices" role="menu"></div></div><form class="search-form"><div class="search-container"><div>
<input class="search-input" name="search" autocomplete="off" spellcheck="false" placeholder="Click or press S to search, ? for more options…" type="search"></div><button type="button" id="help-button" title="help">?</button><a id="settings-menu" href="../../settings.html" title="settings"><img width="18" height="18" alt="Change settings" src="../../wheel.svg"></a></div></form></nav></div><section id="main-content" class="content"><div class="main-heading">
<h1 class="fqn"><span class="in-band">Module <a href="../index.html">os</a>::<wbr><a class="mod" href="#">trap</a><button id="copy-path" onclick="copy_path(this)" title="Copy item path to clipboard"><img src="../../clipboard.svg" width="19" height="18" alt="Copy item path"></button></span></h1><span class="out-of-band"><a class="srclink" href="../../src/os/trap/mod.rs.html#1-123" title="goto source code">source</a> · <a id="toggle-all-docs" href="javascript:void(0)" title="collapse all docs">[<span class="inner">&#x2212;</span>]</a></span></div><details class="rustdoc-toggle top-doc" open><summary class="hideme"><span>Expand description</span></summary><div class="docblock"><p>Trap handling functionality</p>
<p>For rCore, we have a single trap entry point, namely <code>__alltraps</code>. At
initialization in <a href="fn.init.html" title="init()"><code>init()</code></a>, we set the <code>stvec</code> CSR to point to it.</p>
<p>All traps go through <code>__alltraps</code>, which is defined in <code>trap.S</code>. The
assembly language code does just enough work restore the kernel space
context, ensuring that Rust code safely runs, and transfers control to
<a href="fn.trap_handler.html" title="trap_handler()"><code>trap_handler()</code></a>.</p>
<p>It then calls different functionality based on what exactly the exception
was. For example, timer interrupts trigger task preemption, and syscalls go
to <a href="../syscall/fn.syscall.html" title="syscall()"><code>syscall()</code></a>.</p>
</div></details><h2 id="modules" class="small-section-header"><a href="#modules">Modules</a></h2>
<div class="item-table"><div class="item-row"><div class="item-left module-item"><a class="mod" href="context/index.html" title="os::trap::context mod">context</a></div><div class="item-right docblock-short"><p>Implementation of <a href="context/struct.TrapContext.html" title="TrapContext"><code>TrapContext</code></a></p>
</div></div></div><h2 id="structs" class="small-section-header"><a href="#structs">Structs</a></h2>
<div class="item-table"><div class="item-row"><div class="item-left module-item"><a class="struct" href="struct.TrapContext.html" title="os::trap::TrapContext struct">TrapContext</a></div><div class="item-right docblock-short"><p>trap context structure containing sstatus, sepc and registers</p>
</div></div></div><h2 id="functions" class="small-section-header"><a href="#functions">Functions</a></h2>
<div class="item-table"><div class="item-row"><div class="item-left module-item"><a class="fn" href="fn.enable_timer_interrupt.html" title="os::trap::enable_timer_interrupt fn">enable_timer_interrupt</a></div><div class="item-right docblock-short"><p>enable timer interrupt in sie CSR</p>
</div></div><div class="item-row"><div class="item-left module-item"><a class="fn" href="fn.init.html" title="os::trap::init fn">init</a></div><div class="item-right docblock-short"><p>initialize CSR <code>stvec</code> as the entry of <code>__alltraps</code></p>
</div></div><div class="item-row"><div class="item-left module-item"><a class="fn" href="fn.set_kernel_trap_entry.html" title="os::trap::set_kernel_trap_entry fn">set_kernel_trap_entry</a></div><div class="item-right docblock-short"></div></div><div class="item-row"><div class="item-left module-item"><a class="fn" href="fn.set_user_trap_entry.html" title="os::trap::set_user_trap_entry fn">set_user_trap_entry</a></div><div class="item-right docblock-short"></div></div><div class="item-row"><div class="item-left module-item"><a class="fn" href="fn.trap_from_kernel.html" title="os::trap::trap_from_kernel fn">trap_from_kernel</a></div><div class="item-right docblock-short"><p>Unimplement: traps/interrupts/exceptions from kernel mode
Todo: Chapter 9: I/O device </p>
</div></div><div class="item-row"><div class="item-left module-item"><a class="fn" href="fn.trap_handler.html" title="os::trap::trap_handler fn">trap_handler</a></div><div class="item-right docblock-short"><p>handle an interrupt, exception, or system call from user space</p>
</div></div><div class="item-row"><div class="item-left module-item"><a class="fn" href="fn.trap_return.html" title="os::trap::trap_return fn">trap_return</a></div><div class="item-right docblock-short"><p>set the new addr of __restore asm function in TRAMPOLINE page,
set the reg a0 = trap_cx_ptr, reg a1 = phy addr of usr page table,
finally, jump to new addr of __restore asm function</p>
</div></div></div></section><section id="search" class="content hidden"></section></div></main><div id="rustdoc-vars" data-root-path="../../" data-current-crate="os" data-themes="ayu,dark,light" data-resource-suffix="" data-rustdoc-version="1.60.0-nightly (9ad5d82f8 2022-01-18)" ></div>
</body></html>