进程与线程

进程定义

进程(process)是指一个具有一定独立功能的程序关于某个数据集合的一次运行活动。

进程有着“执行-暂停-执行”的活动规律,所以进程通常有三种状态:

  1. 就绪(ready)状态:进程获得了除CPU之外的所有资源,它就已经准备就绪。

  2. 运行(running)状态:当进程获得调度模块分派后,进入运行状态。

  3. 阻塞(wait)状态:若一个进程正在等待某一事件(例如I/O)发生而暂时停止执行。

进程的构成: 进程控制块 PCB + 程序段(数据)。

进程控制块中通常包含了:进程的名字,当前状态和next指针等。

线程定义

线程(threads)是进程中的一条执行路径。

线程特点:

  1. 他有自己私有的堆栈和处理机执行环境;他有自己私有的栈和处理机执行环境(尤其是处理器寄存器)。

  2. 共享分配给父进程的主存。

  3. 单个进程中拥有许多线程。

进程与线程的区别:

  1. 进程和线程,进程有自己的独立地址空间,每启动一个进程,系统就会为它分配地址空间,建立数据表来维护代码段、堆栈段和数据段,这种操作非常昂贵。而线程是共享进程中的数据的,使用相同的地址空间,因此 CPU 切换一个线程的花费远比进程要小很多,同时创建一个线程的开销也比进程要小很多。

  2. 线程之间的通信更方便,同一进程下的线程共享全局变量、静态变量等数据,而进程之间的通信需要以通信的方式(IPC) 进行。不过如何处理好同步与互斥是编写多线程程序的难点。

  3. 多进程程序更健壮,多线程程序只要有一个线程死掉,整个进程也死掉了,而一个进程死掉并不会对另外一个进程造成影响,因为进程有自己独立的地址空间。

进程同步

进程之间的相互制约是通过进程通信来实现的,他们之间需要交换信息以便达到目的,也就是需要 同步

通常把一次仅允许一个进程使用的自愿成为 临界资源

访问临界资源的那段程序从概念上抽离出来,称为 临界区临界段

通过 互斥 解决了并发进程对临界区的的使用问题。

操作系统提供提供的同步方式有:

  1. 锁的上锁和开锁

  2. 信号量和其P、V操作

生产者-消费者问题,计算机每个进程都可以消费(使用)或生产(释放)某类资源,通常实现的手段是信号灯P、V操作。

进程间通信(IPC)

IPC 机制是一个进程与另一个进程间共享消息的一种方式,消息(message)是发送进程的一个消息块,通过信息的语法表示传送进程形成的一个信息块,通过信息的语法表示传送内容到接受进程。

!()[https://i.loli.net/2018/12/14/5c131da3bbab2.png]

资源分配

资源分配的目的是

  1. 保证资源的高利用率。

  2. 在 “合理” 时间内使所有顾客获得所需资源的机会。

  3. 对不可共享的资源实施互斥使用。

  4. 防止由资源分配不当而引起的死锁。

资源分配原则

  1. 资源数据结构的描述。

  2. 确定资源分配的原则和调度原则。

  3. 执行资源分配。

  4. 存取控制和安全保护。

资源分配的策略

  1. 先请求先服务

  2. 优先调度原则:根据优先级调度

死锁

死锁产生原因

  1. 系统资源不足

  2. 进程推进顺序非法

死锁产生必要条件

  1. 互斥条件:设计的资源是非共享的,一次只有一个进程使用。

  2. 不剥夺条件(非抢占):资源在进程使用完之前只能由自己释放。

  3. 占有并等待(部分分配):进程每次申请它所需要的一部分资源。在等待新资源时继续占有分配到的资源。

  4. 环路条件(循环等待):链中每一个进程以获得的资源同时被下一个进程请求。

死锁的避免

  1. 有序资源分配法

  2. 银行家算法

处理机调度

  1. 先来先服务调度算法

  2. 短作业优先调度算法

  3. 响应比高者优先调度算法

  4. 优先调度算法