Skip to main content

os/syscall/
process.rs

1//! Process management syscalls
2
3use crate::task::{change_program_brk, exit_current_and_run_next, suspend_current_and_run_next};
4use crate::timer::get_time_ms;
5
6/// task exits and submit an exit code
7pub fn sys_exit(exit_code: i32) -> ! {
8    println!("[kernel] Application exited with code {}", exit_code);
9    exit_current_and_run_next();
10    panic!("Unreachable in sys_exit!");
11}
12
13/// current task gives up resources for other tasks
14pub fn sys_yield() -> isize {
15    suspend_current_and_run_next();
16    0
17}
18
19/// get current time
20pub fn sys_get_time() -> isize {
21    get_time_ms() as isize
22}
23
24/// change data segment size
25pub fn sys_sbrk(size: i32) -> isize {
26    if let Some(old_brk) = change_program_brk(size) {
27        old_brk as isize
28    } else {
29        -1
30    }
31}