进程和线程
一、什么是进程
进程是:
- 一次程序的执行
- 程序及其数据在计算机上执行所发生的活动
- 时操作系统分配资源和调度的一个独立单位
进程分为内核进程、用户进程:
- 内核进程:就是操作系统内核,在开机时,磁盘中的内核程序加载进内存,成为内核进程
- 用户进程:一般讲的进程就是用户进程,就是应用程序的执行过程。
1.1 PCB
创建进程实质上是创建进程实体中的PCB(进程控制块),系统利用PCB描述和记录进程的基本情况和活动记录。
PCB包含以下信息:
- 进程标识符:
- 外部标识符
- 内部标识符
- 处理机状态
- 进程调度信息
- 进程控制信息
PCB组织管理方式:
- 线性方式:相当于用数组管理PCB
- 链接方式:相当于链表,根据进程的状态,会有三种不同的链表实现的队列(就绪队列、执行队列、阻塞队列)
- 索引方式:根据进程的状态,开几个数组,数组记录PCB的地址
1.2 进程的状态
- 就绪:分配好出CPU以外的必要资源后,其PCB会被放到就绪队列中
- 执行:获取到CPU后,其PCB会被放到执行队列中
- 阻塞:进程发生IO请求、申请缓冲区失败等暂时无法继续执行的操作时,就会阻塞。其PCB会被系统挪到阻塞队列中
进程状态切换:
- 就绪->执行:被调度,获取到CPU
- 执行->就绪:时间片用完
- 执行->阻塞: IO阻塞...
- 阻塞->就绪: IO完成...
1.3 进程间通信方式
- 管道
- 消息队列
- 共享内存
- 信号量
- 信号
- socket
二、什么是线程
早期的操作系统中都是以进程作为独立运行的基本单位,后来人们提出了比进程更小的进本单位----线程。
线程拥有传统进程所拥有的特征,所以又被称之为轻量级进程。初期以进程作为基本调度和分派单位时,都需要进行较大开销的上下文切换。而以线程作为基本调度和分派单位时,上下文切换的开销远低于进程,仅需保存和设置少量寄存器内容。
2.1 TCB
每个进程都有自己的PCB,同样的每个线程有自己的TCB(线程控制块)。
线程控制块用于记录控制管理线程的信息。
TCB包含以下信息:
- 现成标识符
- 一组寄存器
- 线程状态
- 优先级
- 线程私有的存储区
- 信号屏蔽
- 堆栈指针
2.2 线程状态
- 就绪状态:除了CPU,其它必要资源都一获得
- 执行状态:已经获得CPU且正在执行
- 阻塞状态:调用发生阻塞时,处于暂停状态
2.3 线程的实现
- 内核支持线程KST(kernel support thread):在内核中实现的线程,是由内核管理的线程
- 用户级线程ULT(user level thread): 在用户空间实现的线程,不是由内核管理的线程
基于ULT、KST可以实现n:1、1:1、n:m线程模型
- 轻量级进程LWP: LWP通过系统调用获得内核提供的服务,通过LWP把内核、用户级线程连接,同时也实现了隔离
一个进程可有一个或多个 LWP,每个 LWP 是跟内核线程一对一映射的,也就是 LWP 都是由一个内核线程支持,而且 LWP 是由内核管理并像普通进程一样被调度
在 LWP 之上也是可以使用用户线程的,那么 LWP 与用户线程的对应关系就有三种:
- 1 : 1,即一个 LWP 对应 一个用户线程;
- N : 1,即一个 LWP 对应多个用户线程;
- M : N,即多个 LWP 对应多个用户线程;
2.4 线程间通信方式
- 锁
- 信号量
- 信号
Loading...