- 论坛徽章:
- 0
|
1 基本概念
1.1. 进程和线程
可执行文件由指令和数据组成。进程就是在计算机上运行的可执行文件针对特定的输入数据的一个实例,同一个可执行程序文件如果操作不同的输入数据就是两个不同的进程。
线程是进程的一条执行路径,它包含独立的堆栈和CPU寄存器状态,每个线程共享其所附属的进程的所有的资源,包括打开的文件、页表(因此也就共享整个用户态地址空间)、信号标识及动态分配的内存等等。线程和进程的关系是:线程是属于进程的,线程运行在进程空间内,同一进程所产生的线程共享同一物理内存空间,当进程退出时该进程所产生的线程都会被强制退出并清除。
Linux在核外采用1:1线程模型,即用一个核心进程(轻量进程)对应一个线程,将线程调度等同于进程调度,交给核心完成,而其它诸如线程取消、线程间的同步等工作,都是在核外线程库中完成的。因此可以把进程看作一组线程,这组线程拥有相同的线程组号(TGID),这个TGID就是这组线程序所附属的进程的ID号,每个线程的ID号就是我们用ps命令所看到的LWP号。
为了方便,从现在起我们用任务来代替进程和线程,即每提到任务,我们就是指线程和进程,除非要强调线程和进程之间的不同之处。任务的周期从被fork开始一直到给任务从进程表中消失。一个进程包括:正文段(text),数据段(data),栈段(STACK)和共享内存段(SHARED MEMORY)。
1.2. 中断和信号
(1)中断
中断通常定义为用来改变CPU执行的指令的顺序的事件。对于其分类可谓是仁者见仁,智者见智,但毕竟有胜于无,这里给出一种分类:硬中断、异常中断和软中断。硬中断也称为外部中断,分为两类,可屏蔽和不可屏蔽。/proc/interrupts列出了当前系统定义的所有硬中断。
异常中断是系统运行出现异常时候CPU自动产生的中断,如除数为零、使用虚拟内存机制时的缺页保护异常等。软中断是由程序指令中包含INT 指令产生的中断,如单步跟棕;该中断处理的一部分任务可以延迟一会再处理。
1.3. CPU 的状态
CPU的状态可分为有7种:
(1)常规用户态(目态): CPU所执行的任务在访问该任务自己的内存空间;
(2)核心态(管态):如果CPU正在运行核心程序或在CPU上运行的任务正在通过系统调用请求内核服务,例如访问硬件,这时就称CPU处于核心态;
(3)CPU运行nice任务,一个优先级别低于普通任务的优先级别的任务;
(4)io等待: 由于任务等待I/O而使CPU处于空闲状态,这些I/O主要指block I/O,raw I/O,VM paging/swapins; |
|