今天看啥  ›  专栏  ›  千叶风行

操作系统之进程的并发与死锁

千叶风行  · 掘金  ·  · 2020-03-04 08:24

文章预览

阅读 48

操作系统之进程的并发与死锁

我们都知道想要成为一名合格的程序员,基础很重要,本文我们就来介绍一下。操作系统中最核心的部分,进程的并发与死锁

前提介绍

啥?你说你忘了啥是进程了。非常好,我们来介绍一下。
进程是对一个计算任务的抽象和封装,使得每个计算机任务更好地实现隔离性,资源共享和同步的需求。

一个进程的生命周期

线程是一个动态执行的过程,它也有一个从产生到死亡的过程。

  • 新建状态
  • 就绪状态:一个作业已经具备被调度执行的条件,正在排队等待调度的状态
  • 运行状态: 进程正在被处理器执行的状态
  • 阻塞状态: 一个进程正在等待某个事件发生的状态,这个事件可能是I/O设备就绪。 如果一个线程执行了 sleep(睡眠), suspend(挂起)等方法,失去所占用资源之后,该线程就从运行状态进入阻塞状态。在睡眠时间已到或者获得设备资源后可以重新进入就绪状态,可以分为三种:
    • 等待阻塞 : 运行状态中的线程执行 wait () 方法,使线程进入到等待阻塞状态
    • 同步阻塞: 线程在获取 同步锁失败(因为同步锁被其他线程占用)
    • 其他阻塞 : 通过调用线程到 sleep() 或 join () 发出了 I/O 请求时, 线程就会进入到阻塞状态。当 sleep () 状态超时, join() 等到线程终止或超时, 或者I/O 处理完毕 , 线程重新转入就绪状态。
  • 死亡状态 一个运行状态的线程完成任务或者其他终止条件发生时,该线程就切换到终止状态

进程调度策略

进程调度也称为处理器调度,是指为了满足特定系统目标,操作系统把进程分派到一个或多个处理器中执行的过程。进程调度是操作系统的核心功能之一,通过调度算法来实现。

FCFS策略

FCFS策略也称为先进先出方案。当一个进程就绪后,就被加入就绪队列。当前正在运行的进程停止执行后,选择就绪队列中存在时间最长的进程来运行。FCFS策略采用非抢占方式。因此当一个短进程紧随一个长进程到达时,短进程必须等待较长时间。因此,FCFS策略对于长进程的执行更有利。

时间片轮转

为了缓解FCFS策略对短作业不利的情况,一种简单的办法是采用基于时钟的抢占策略,这类方法中,最简单的是时间片轮转。使用时钟产生周期性中断,当中断发生时,当前正在运行的进程被置于就绪状态,然后基于FCFS策略从就绪队列中选择下一个进程运行。当连续中断的时间间隔被称为时间片。一个有用的思想是时隙最好大于一次典型的交互所需要的时间。

最短进程优先策略

最短进程优先(SPN),策略是一个非抢占式的策略,其原则是选择预计处理时间最短的进程。因此,短进程将会超过长进程优先得到调度。显然,系统将会尽快处理那些较短的进程。但对长进程不利。
SPN策略的一个难点是需要知道或至少需要估计每个进程所需要的处理器的时间。

进程的并发与死锁

前言:从前面学习过的多道程序设计及其进程的调度可知,当多个进程要在同一个处理器上运行时,操作系统通过合理的调度策略和进程切换,使处理器"同时"处理多个进程,造成多个进程并发执行的"假象"。对于单处理器而言,这种并发性是""伪并发",实际上是通过进程的交叉执行来实现的。 但是这里有一个问题?
当多个进程并发执行时,会不会影响每个进程的执行结果呢?我们分两种情况来考虑:

  • 如果并发的进程无关的,这种情况下,任意叠加执行的结果都是一致的
  • 如果并发的进程是交互的,即它们共享某些变量,或者它们的某些操作之间具有特定的顺序关系约束,那么一个进程的执行可能影响其他进程的执行,则会出错。

进程的互斥

为了说明互斥问题,我们首先通过两个例子来引入。
假设一个飞机订票系统有两个终端,在每个终端上分别运行订票业务进程 P1 和 P2。

begin(开始程序)
P(1) || P(2)
end(结束程序)

// 程序P的定义
function P(int i){
    int x;
    begin
        read record to x;
        if x >=1 then x = x -1;
        
}复制代码
………………………………

原文地址:访问原文地址
快照地址: 访问文章快照
总结与预览地址:访问总结与预览