7. Exceptions and System Calls

Transcription

7. Exceptions and System Calls
7. Exceptions and
System Calls
Mark Handley
CPU modes
Recall the mode bit in the CPU PSW register:
user-mode: only a subset of instructions and features are
accessible.
kernel-mode: all instructions and features are accessible.
How does a user process ask the OS to perform a function for it?
 It is running in user-mode, so cannot directly access kernel
memory or the hardware.
 If it could just directly switch to kernel-mode, there would
be no security.
1
Exceptions

What happens when a user process does something
illegal?
 Divide-by-zero.
 Runs an illegal instruction.

How does the Java Virtual Machine manage to throw
an floating exception, rather than simply crash?
Example: Illegal Instruction

The “halt” instruction is illegal in user-mode.
(in kernel mode, it halts the system).

If a user-mode process calls halt, this generates a
trap in the CPU, which suspends the user process,
switches into kernel-mode, and calls a corresponding
exception handler.
 What happens next depends on the OS.
2
Process Address Spaces
0xFFFFFFFF
Shared Kernel Memory
0xC0000000
0xBFFFFFFF
Virtual
Memory
Addresses
Process 1
User Area
Process 2
User Area
Process 3
User Area
0x00000000
Kernel Stack and Kernel Memory
User Mode
Kernel Mode
SP
kernel stack



USP
SP
user stack
kernel stack
user stack
Kernel memory is only accessible in kernel mode.
User memory is mapped by the MMU, but kernel memory is
generally shared (unmapped) by all processes.
There is a separate kernel stack
3
Kernel Exception Handler

When the OS starts, it fills in the Exception Vector
Table.
 This contains pointers to code to run when a
particular exception occurs.
 Interrupts are handled through the same table.
CPU Exception Handling
Save PC
and PSW
Exception Vectors
Exception Handlers
code to handle
exception A
Load PC from
Exception Vector
CPU switches
to kernel-mode
Use PC to fetch
next instruction
code to handle
exception B
code to handle
exception C
4
Handling a Trap





Trap occurs. CPU switches to kernel mode.
CPU saves information about the current running program
(PSW, PC, etc) on the kernel stack.
CPU calls OS exception handler for this exception from the
exception vector table.
OS handles exception.
 Unix: look up exception handler in signal table.
 Win32: call a dispatcher with relevant interrupt object.
 Call relevant signal handler code.
In some cases, terminates the process.
In some cases, returns control to user process.
If not fatal, calls “return from exception”
 CPU restores PSW and PC. Switches back to user-mode.
User Exception Handling
Execution by
user process
Exception
occurs
Exception
handler can
pass control
back to where
the exception
occurred
User Program
OS Exception Handler
Exception
handler called
Control passed to
user program’s
exception handler
5
System Calls

A system call is the mechanism by which a user process calls a
kernel procedure.
 Used to do I/O, read/write files, etc.

Basic mechanism is very similar to exception handling:
 Generate a trap.
 Kernel exception handler called.
 OS identifies which system call is required, and calls
relevant procedure.
 Returns execution to user process on completion.
System Calls:
Generating a Trap

TRAP instruction (68000)
 4-bit opcode: TRAP #0 to TRAP #16

INT (interrupt) instruction (Pentium, etc)
8-bit opcode allows 256 different exceptions to be
identified.
Linux: INT 0x80 is a system call.
Windows: INT 0x2E is a system call.
6
Processing a System Call
User program
Kernel
Validate Parameters
libc API call
Find and call
correct procedure
Return result
libc API library
System call table
Set up parameters
System call
Return result
System call
implementation
Example System Call
Call from C program:
count = read(fd, &buffer, length);
 read up to length bytes of data from from file
descriptor fd into buffer, and returns the number of
bytes actually read, or -1 if an error occurred.
C library call for read() calls the read system call.
7
Steps in Making a System Call
read (fd, &buffer, nbytes)
User program
Kernel
Push nbytes;
Push &buffer;
Push fd
Call read function
Save state
Validate syscall code
Call call_table_base+code
Increment SP
Return result
libc API library
System call table
Put code for read
syscall in register;
Trap to kernel (int 0x80)
Validate read parameters
from user stack
Return to caller
Do read function
Return
System Call sanity checking


Kernel does not trust user processes.
Needs to validate any parameters from system call
very carefully.
 Eg: buffers for I/O must be in user memory.
 Pentium has special instuctions:
VERR - verify read instruction
VERW - verify write instruction
8
System Calls For Process Management
System Calls For File Management
9
System Calls For Directory Management
System Calls For Miscellaneous Tasks
10
Unix vs Win32 System calls
Summary




System calls are how a user process gains access to
functions provided by the OS.
Implemented via trap to kernel.
Much in common with exception/interrupt handling.
Different systems have different system calls.
11