进程
相关概念
程序:一系列的指令序列,如.calss文件
进程:由PCB、程序段、数据段构成的进程实体,拥有独立的系统资源,是资源分配和调度的独立单位
PCB(程序控制快)
OS是根据PCB来对并发执行的进程进行控制和管理的,PCB是进程存在的唯一标志
PCB中记录了操作系统所需的,用于描述进程的当前情况以及控制进程运行的全部信息 。
作用是使一个在多道程序环境下不能独立运行的程序(含数据),成为一个能独立运行的基本单位,一个能与其他进程并发执行的进程。
例如,当OS要调度某进程执行时,要从该进程的PCB中查处其现行状态及优先级;在调度到某进程后,要根据其PCB中所保存的处理机状态信息,设置该进程恢复运行的现场,并根据其PCB中的程序和数据的内存始址,找到其程序和数据;
进程在执行过程中,当需要和与之合作的进程实现同步,通信或者访问文件时,也都需要访问PCB;
当进程由于某种原因而暂停执行时,又须将其断点的处理机环境保存在PCB中。
进程的特征
进程的组织方式
为了便于管理,系统把所有PCB用适当方法组织起来,由三种组织方式
- 线性方式 将所有PCB分布不分状态组织在一个连续表中
- 索引方式 对于具有相同状态的进程的进程,分别设置各自的PCB索引表,表目为PCB在PCB表中的地址
3. 链接方式
对于具有相同状态进程的PCB,通过PCB中的链接字构成一个队列,链接字指出本队列下一PCB在PCB表中的编号(或地址)
进程的七种状态
进程调度
进程间通信方式
- 管道pipe:管道是一种半双工的通信方式,数据只能单向流动,而且只能在具有亲缘关系的进程间使用。进程的亲缘关系通常是指父子进程关系。
- 命名管道FIFO:有名管道也是半双工的通信方式,但是它允许无亲缘关系进程间的通信。
- 消息队列MessageQueue:消息队列是由消息的链表,存放在内核中并由消息队列标识符标识。消息队列克服了信号传递信息少、管道只能承载无格式字节流以及缓冲区大小受限等缺点。
- 共享存储SharedMemory:共享内存就是映射一段能被其他进程所访问的内存,这段共享内存由一个进程创建,但多个进程都可以访问。共享内存是最快的 IPC 方式,它是针对其他进程间通信方式运行效率低而专门设计的。它往往与其他通信机制,如信号量,配合使用,来实现进程间的同步和通信。
- 信号量Semaphore:信号量是一个计数器,可以用来控制多个进程对共享资源的访问。它常作为一种锁机制,防止某进程正在访问共享资源时,其他进程也访问该资源。因此,主要作为进程间以及同一进程内不同线程之间的同步手段。
- 套接字Socket:套解口也是一种进程间通信机制,与其他通信机制不同的是,它可用于不同及其间的进程通信。
- 信号 ( sinal ) : 信号是一种比较复杂的通信方式,用于通知接收进程某个事件已经发生。
线程
线程的概念
线程是进程中的一个实体,是cpu调度和分派的基本单位。 线程只拥有一点必不可少的资源,线程间共享进程的资源(内存,时间片等)
线程的优势
1 . 提高并发性
进程只能串行的运行程序,引入线程后可以并发执行进程要执行的程序
2 .减少系统开销
线程间共享进程资源,切换时不需要切换上下文,减少开销。
创建、销毁线程仅需要少量资源。
线程实现方式
- 线程的实现分为两类:
用户级线程(User-Level Thread,UTL)和内核级线程(Kernel-Level Thread, KTL)l。内核级线程又称内核支持的线程。
(1)用户级线程
(2)内核级线程
协程
同步与互斥
基本概念
- 同步
同步也称为直接制约关系。- 在多道程序环境下,进程是并发执行的,不同进程之间存在着不同的相互制约关系。为了协调进程之间的相互制约关系,如等待、传递信息等,引入了进程同步的概念。进程同步是为了解决进程的异步问题。
- 互斥
互斥,亦称间接制约关系。进程互斥指当一个进程访问某临界资源时,另一个想要访问该临界资源的进程必须等待。当前访问临界资源的进程访问结束,释放该资源之后,另一个进程才能去访问临界资源。
- 临界资源
- 一个时间段内只允许一个进程使用的资源称为临界资源。许多物理设备(比如摄像头、打印机)都属于临界资源。此外还有许多变量、数据、内存缓冲区等都属于临界资源。
- 对临界资源的访问,必须互斥地进行。
同步方法
进程间同步
- 信号量
- 互斥量
- 管程
将系统资源集中管理,进程只能通过管程提供的入口进入管程,管程中只能由一个进程保持活跃状态,如果进程请求资源不足,则在对应资源队列上等待。 - 进程间通信
线程间同步
线程同步的方法 线程同步主要包括四种方式:
- 互斥量
pthread_mutex_ - 读写锁
pthread_rwlock_ - 条件变量
pthread_cond_ - 信号量
sem_
进程/线程互斥方法
软件实现方法_BitHachi的博客
硬件实现方法_BitHachi的博客
信号量机制实现进程的互斥、同步与前驱关系
死锁
死锁详解(预防、避免、检测、解除)+思维导图_BitHachi的博客