【14期】谈谈操作系统中的PV操作

文摘   2024-09-20 08:00   广东  


    现代操作系统中最基本的构成是进程,操作系统中的PV操作,是进程中实现同步和互斥的两种方法,了解PV操作对多线程编程以及JUC框架的本质有非常大的帮助

1 进程模型

1.1 两状态进程模型

最简单的进程模型,一个进程要么正在执行,要么未执行,如图所示


1.2 三态模型

在整个生命周期内,进程总是在一些状态之间转化,对于操作系统的创建和终止一般关注的较少,这里我们需要关注更重要的三种状态,即就绪态、运行态和阻塞态



  • 就绪态:当前未执行但已做好准备的进程,只要操作系统调度到它,就会执行
  • 运行态:当前正在被处理器执行的进程,在多处理器的系统中会有多个进程处于这种状态
  • 阻塞态:正在等待某一事件完成(如IO操作)的进程

1.3 五状态进程模型



  • 运行态:进程正在执行
  • 就绪态:进程做好了准备,只要有机会就开始执行
  • 阻塞/等待态:进程在某些事件发生前不能执行,如I/O操作完成
  • 新建态:刚刚创建的过程,操作系统还未把它加入可执行进程组,它通常是进程控制块已经创建但还未加载到内存中的新进程
  • 退出态:操作系统从可执行进程组中释放出的进程,要么它自身已停止,要么它因某种原因被取消

2 进程同步与互斥

在多进程的系统下,存在着不同的制约关系,为了协调这种互相制约的关系,实现资源共享和进程协作,从而避免进程之间的冲突,引入了进程同步和互斥

2.1 进程同步

进程同步也是进程之间直接的制约关系,是为完成某种任务而建立的两个或多个线程,这个线程需要在某些位置上协调他们的工作次序而等待、传递信息所产生的制约关系



如上图所示,进程P1需要从缓冲区读取进程P2产生的信息,当缓冲区为空时,进程P2因为读取不到信息而被阻塞。而当进程P1产生信息放入缓冲区时,进程P2才会被唤醒

2.2 进程互斥

进程互斥是进程之间的间接制约关系。当一个进程进入临界区使用临界资源时,另一个进程必须等待。只有当使用临界资源的进程退出临界区后,这个进程才会解除阻塞状态



如上图所示,进程P2需要访问打印机,但此时进程P1占有了打印机,进程P2会被阻塞,直到进程P1释放了打印机资源,进程P2才可以继续执行

3 信号量

信号量是一种用来解决进程同步与互斥问题的机制

3.1 定义

信号量(Saphore)由一个值和一个指针组成,指针指向等待该信号量的进程,信号量的值表示相应资源的使用情况,是用来解决进程同步与互斥的机制

3.2 使用方式

  • 信号量 S>=0 时,S 表示可用资源的数量,执行一次P操作意味着请求分配一个资源,因此 S 的值减 1

  • 信号量 S<0 时,表示已经没有可用资源,S 的绝对值表示当前等待该资源的进程数,请求者必须等待其他进程释放该类资源才能继续运行,而执行一个V操作意味着释放一个资源,因此 S 的值加 1

  • 若 S<0 ,表示有某些进程正在等待该资源,因此要唤醒一个等待状态的进程,使之运行下去

注意:信号量S的值只能通过操作系统PV操作改变

4 PV操作(占有和释放)

一种实现进程互斥与同步的有效方法,包含P操作与V操作

P操作:使 S=S-1 ,若 S>=0 ,则该进程继续执行,否则排入等待队列

P (S){S=S-1;}//若S<0,将该进程状态置为等待状态,//然后将该进程的控制块插入相应的S信号量等待队列末尾,//直到有其他进程在S上执行V操作为止

V操作:使 S=S+1 ,若 S>0 ,唤醒等待队列中的一个进程

V (S){S = S + 1 ;}//若S<=0,释放在S信号量队列中等待的一个进程,//将其状态改变为就绪态,并将其插入就绪队列;//然后,执行本操作的进程继续执行

5 临界资源与缓冲区

5.1 临界资源

在操作系统中,进程是占有资源的最小单位(线程可以访问其所在进程内的所有资源,但线程本身并不占有资源或仅仅占有一点必须资源)。但对于某些资源来说,其在同一时间只能被一个进程所占用。这些一次只能被一个进程所占用的资源就是所谓的临界资源。典型的临界资源比如物理上的打印机,或是存在硬盘或内存中被多个进程所共享的一些变量和数据等,而进程内访问临界资源的代码称为临界区,对临界区的访问过程分为以下四个部分:

①进入区:查看临界区是否可访问,如果可以访问,则转到步骤二,否则进程会被阻塞 

②临界区:在临界区做操作

③退出区:清除临界区被占用的标志

④剩余区:进程与临界区不相关部分的代码

5.2 缓冲区

进程 P1 将信息输入到缓冲区 B 中,进程 P2 负责从缓冲区 B 中取出数据输出

① 对于进程 P1 来说,如果缓冲区满,则应暂停输入,等待 P2 进程取走数据后再输入新数据


②对于进程 P2 来说,如果缓冲区空,则应等待 P1 进程送来新数据 

6 小结

(1)操作系统的进程模型,其中五态的通用进程模型,是通常被用的最多的,更符合人的思考习惯,包括之后会提到的java线程的6种状态也是参考操作系统的五态模型设计的

(2)P操作和V操作都是操作系统的原语,是用于解决进程同步和互斥的一种机制

(3)信号量是个被保护的量,只有P、V操作和信号量初始化操作才能访问和改变它的值,同一信号量的P、V操作总是成对出现,P(s)对应s+1;V(s)对应s-1

(4)对于临界资源的访问,必须是互斥进行。也就是当临界资源被占用时,另一个申请临界资源的进程会被阻塞,直到其所申请的临界资源被释放


一起探索架构技术,拥抱AI,欢迎与我交流!


顶尖架构师栈
大厂架构师,专注科技资讯,AI前沿信息,日常分享技术干货,程序员副业,职场三两事。
 最新文章