pub struct Process {
pub file_struct: FileStruct,
}Expand description
A process state of project 1, which contains file state.
Fields§
§file_struct: FileStructTrait Implementations§
Source§impl Task for Process
impl Task for Process
Source§fn syscall(&mut self, regs: &mut Registers)
fn syscall(&mut self, regs: &mut Registers)
Handles a system call request from a user program.
This function is the entry point for system call handling. It retrieves
the system call ABI from the provided Registers structure, which
includes the system call number and its arguments. Based on the
system call number (sysno), it looks up the appropriate handler
function in a predefined list. If a handler is found, it is invoked
with the ABI, otherwise, an error (KernelError::NoSuchSyscall) is
returned.
After the handler function processes the system call, the return value
(either a success or error) is set back into the CPU registers via
the set_return_value method. The return value is stored in the %rax
register as per the x86-64 system call convention.
§Parameters
regs: A mutable reference to theRegistersstruct, which contains the current state of the CPU registers. This structure will be used to retrieve the system call number and its arguments, and also to set the return value.
§Functionality
The function processes the system call as follows:
- Extracts the system call number and arguments using the
SyscallAbi::from_registers. - Looks up the corresponding handler function from a predefined list of
system calls. The handler function is selected based on the system
call number (
sysno). - If a handler is found, it is executed with the ABI as an argument. If
no handler is found, the function returns a
KernelError::NoSuchSyscallerror.
The result of the system call handler (either success or error) is then
returned via the SyscallAbi::set_return_value method, which
modifies the CPU registers accordingly.