- Linux内核完全注释(20周年版·第2版)
- 赵炯编著
- 587字
- 2024-05-10 12:20:19
2.4 Linux内核进程控制
程序是一个可执行的文件,而进程(process)是一个执行中的程序实例。利用分时技术,在Linux操作系统上同时可以运行多个进程。分时技术的基本原理是把CPU的运行时间划分成一个个规定长度的时间片(time slice),让每个进程在一个时间片内运行。当进程的时间片用完时系统就利用调度程序切换到另一个进程去运行。因此实际上对于具有单个CPU的机器来说某一时刻只能运行一个进程。但由于每个进程运行的时间片很短(例如15个系统滴答=150ms),所以表面看来好像所有进程在同时运行着。
对于Linux 0.11内核来讲,系统最多可有64个进程同时存在。除了第一个进程是“手工”建立以外,其余的都是进程使用系统调用fork创建的新进程,被创建的进程称为子进程(child process),创建者则称为父进程(parent process)。内核程序使用进程标识号(process ID,pid)来标识每个进程。进程由可执行的指令代码、数据和堆栈区组成。进程中的代码和数据部分分别对应一个执行文件中的代码段、数据段。每个进程只能执行自己的代码和访问自己的数据及堆栈区。进程之间的通信需要通过系统调用来进行。对于只有一个CPU的系统,在某一时刻只能有一个进程在运行。内核通过调度程序分时调度执行运行各个进程。
Linux系统中,一个进程可以在内核态(kernel mode)或用户态(user mode)下执行,因此,Linux内核堆栈和用户堆栈是分开的。用户堆栈用于进程在用户态下临时保存调用函数的参数、局部变量等数据。内核堆栈则含有内核程序执行函数调用时的信息。