*** UNIX MANUAL PAGE BROWSER ***

A Nergahak database for man pages research.

Navigation

Directory Browser

1Browse 4.4BSD4.4BSD
1Browse Digital UNIXDigital UNIX 4.0e
1Browse FreeBSDFreeBSD 14.3
1Browse MINIXMINIX 3.4.0rc6-d5e4fc0
1Browse NetBSDNetBSD 10.1
1Browse OpenBSDOpenBSD 7.7
1Browse UNIX v7Version 7 UNIX
1Browse UNIX v10Version 10 UNIX

Manual Page Search

Manual Page Result

0 Command: mi_switch | Section: 9 | Source: OpenBSD | File: mi_switch.9
MI_SWITCH(9) FreeBSD Kernel Developer's Manual MI_SWITCH(9) NAME mi_switch, cpu_switchto - switch to another process context SYNOPSIS #include <sys/param.h> #include <sys/proc.h> void mi_switch(void); void cpu_switchto(struct proc *old, struct proc *new); DESCRIPTION The mi_switch() function implements the machine-independent prelude to a process context switch. It is called from only a few distinguished places in the kernel code as a result of the principle of non-preemptable kernel mode execution. The three major uses of mi_switch() can be enumerated as follows: 1. From within functions like tsleep(9), when the current process sleeps to wait for some resource to become available, or from within functions like yield(), when it relinquishes the CPU to allow other processes to make progress. 2. After handling a trap (e.g., a system call or device interrupt) when the kernel prepares a return to user-mode execution. This case is typically handled by machine- dependent trap-handling code after detection of a change in the signal disposition of the current process, or when a higher priority process might be available to run. The latter event is communicated by the machine-independent scheduling routines by calling the machine-dependent need_resched(void). 3. In the signal handling code (see sys/kern/kern_sig.c) if a signal is delivered that causes a process to stop. mi_switch() records the amount of time the current process has been running in the process structure and checks this value against the CPU time limits allocated to the process (see getrlimit(2)). Exceeding the soft limit results in a SIGXCPU signal to be posted to the process, while exceeding the hard limit will cause a SIGKILL. After these administrative tasks are done, mi_switch() chooses the next process to run and hands over control to the machine dependent routine cpu_switchto(), which will perform the actual process context switch. cpu_switchto() will save the context of the old process and switch to the new one. A special case is when the old process is NULL which means that the old process has exited and doesn't need to be saved. Note that mi_switch() and thus cpu_switchto() must be called while holding the scheduler lock. SEE ALSO spl(9), tsleep(9), wakeup(9) FreeBSD 14.1-RELEASE-p8 September 5, 2017 FreeBSD 14.1-RELEASE-p8

Navigation Options