[TOC]
概念
进程:是并发执行的程序在执行过程中分配和管理资源的基本单位,是一个动态概念。
· 线程:是进程的一个执行单元,是独立运行的基本单位。
区别
拥有资源
进程是资源分配的基本单位,但是线程不拥有资源,线程可以访问隶属进程的资源。
•开销
由于创建或撤销进程时,系统都要为之分配或回收资源。线程切换时只需保存和设置少量寄存器内容,开销很小。
· 调度
线程是独立调度的基本单位,在同一进程中,线程的切换不会引起进程切换,从一个进程中的线程切换到另一个进程
中的线程时,会引起进程切换。
· 通信方面
进程有独立的地址空间,线程间可以通过直接读写同一进程中的数据进行通信,但是进程通信需要借助 IPC。
进程的内存空间
内核态内存空间、用户态的堆栈(一般8M,从高地址向低地址增长)、数据段、进程代码段
进程间通信方式
进程间通信方式:管道(包括无名管道和命名管道)、消息队列、信号量、共享存储、Socket等
- 管道:无名管道, 半双工的(即数据只能在一个方向上流动),具有固定的读端和写端。只能用于父子进程和兄弟进程。
- FIFO:也称为命名管道,去除了管道只能在父子进程中使用的限制。
- 消息队列
1.消息队列存放于内核中,可以独立于读写进程存在,从而避免了 FIFO 中同步管道的打开和关闭时可能产生的困难;
2.避免了 FIFO 的同步阻塞问题,不需要进程自己提供同步方法;
3.读进程可以根据消息类型有选择地接收消息,而不像 FIFO 那样只能默认地接收。
- 信号量是一个计数器,用于实现进程间的互斥与同步。信号量基于操作系统的 PV 操作。每次对信号量的 PV 操作不仅限于对信号量值加 1 或减 1,而且可以加减任意正整数。
- 共享内存(Shared Memory),指两个或多个进程共享一个给定的存储区。共享内存是最快的一种 IPC,因为进程是直接对内存进行存取。因为多个进程可以同时操作,所以需要进行同步。信号量+共享内存通常结合在一起使用,信号量用来同步对共享内存的访问。
- 套接字:与其它通信机制不同的是,它可用于不同机器间的进程通信。
进程同步方式?
1.临界区
对临界资源进行访问的那段代码称为临界区。
2.同步与互斥
同步:多个进程因为合作产生的直接制约关系,使得进程有一定的先后执行关系。
互斥:多个进程在同一时刻只有一个进程能进入临界区。
3.信号量:
信号量(Semaphore)是一个整型变量,可以对其执行 down 和 up 操作,也就是常见的 P 和 V 操作。
down : 如果信号量大于 0 ,执行 -1 操作;如果信号量等于 0,进程睡眠,等待信号量大于 0;
up :对信号量执行 +1 操作,唤醒睡眠的进程让其完成 down 操作。
线程共享和线程私有的
线程共享的有:进程代码段、进程共有数据等
线程私有的:线程ID、寄存器的值、线程的栈
进程的状态
就绪,运行,阻塞。
只有就绪态和运行态可以相互转换,其它的都是单向转换。就绪状态的进程通过调度算法从而获得 CPU 时间,转为运行状态;而运行状态的进程,在分配给它的 CPU 时间片用完之后就会转为就绪状态,等待下一次调度。运行缺少资源会变为阻塞。