软考-系统分析师

软考

操作系统

进程与线程

  • 在操作系统中进程是进行系统资源分配、调度和管理的最小单位。
    • PCB(process control block)是进程存在的唯一标志, PCB 描述了进程的基本情况。其中的内容可分成为调度信息和执行信息两大部分。
    • 进程的生命周期可以刻画为不同的状态,并分为三态模型和五态模型。
  • 线程是进程的活动成分,是处理器分配资源的最小单位,它可以共享进程的资源与地址空间,通过线程的活动,进程可以提供多种服务〈对服务器进程而言)或实行子任务并行(对用户进程而言)。每个进程创建时只有一个线程,根据需要在运行过程中创建更多的线程〈前者也可称主线程)。显然,只有主线程的进程才是传统意义下的进程。
    • 内核负责线程的调度,线程的优先级可以动态地改变。采用线程机制的最大优点是节省开销,传统的进程创建子进程的办法中,内存开销大,而且创建时间也长。
    • 多线程实现的并行避免了进程问并行的缺点:创建线程的开销比创建进程要小,同一进程的线程共享进程的地址空间,所以线程切挟(处理器调度)比进程切换快。

PV操作

ref

定义

  • PV操作是一种实现进程互斥与同步的有效方法。PV操作与信号量的处理相关。P(passeren)通过,理解为申请资源,V(vrijgeven)释放,理解为释放资源
  • P操作的主要动作是:
    • ①S减1;(申请资源,资源量减一)
    • ②若S减1后仍大于或等于0,则进程继续执行;
    • ③若S减1后小于0,则该进程被阻塞后放入等待该信号量的等待队列中,然后转进程调度。
  • V操作的主要动作是:
    • ①S加1;(释放资源,资源量加一)
    • ②若相加后结果大于0,则进程继续执行;
    • ③若相加后结果小于或等于0,则从该信号的等待队列中释放一个等待进程,然后再返回原进程(调用v的进程)继续执行或转进程调度
  • PV操作对于每一个进程来说,都只能进行一次,而且必须成对使用(申请资源用P,释放资源用V)。在PV原语执行期间不允许有中断发生。原语不能被中断执行,因为原语对变量的操作过程如果被打断,可能会去运行另一个对同一变量的操作过程,从而出现临界段问题。如果能够找到一种解决临界段问题的元方法,就可以实现对共享变量操作的原子性。
  • 相关推论
    • 推论1:若信号量S为正值,则该值等于在阻塞进程之前对信号量S可施行的P操作数,亦即等于S所代表的实际还可以使用的物理资源数。
    • 推论2:若信号量s为负值,则其绝对值等于登记排列在该信号量S等待队列之中的进程个数,亦即恰好等于对信号量S实施P操作而被阻塞并进入信号量S等待队列的进程数。
    • 推论3:通常,P操作意味着请求一个资源,V操作意味着释放一个资源。在一定条件下,P操作代表阻塞进程操作,而V操作代表唤醒被阻塞进程的操作。

应用

进程的同步与互斥

1
2
3
4
5
6
7
8
9
10
1. 进程同步
(1)调用P操作测试消息是否到达
  任何进程调用P操作可测试到自己所期望的消息是否已经到达。若消息尚未产生,则S=0,调用P(s)后,P(S)一定让调用者成为等待信号量S的状态,即调用者此时必定等待直到消息到达;若消息已经存在,则S≠0,调用P(S)后,进程不会成为等待状态而可继续执行,即进程测试到自己期望的消息已经存在。
(2)调用V操作发送消息
  任何进程要向其他进程发送消息时可调用V操作。若调用V操作之前S=0,表示消息尚未产生且无等待消息的进程,则调用V(S)后,V(s)执行S:=S+1使S≠0,即意味着消息已存在;若调用V操作之前S<0,表示消息未产生前已有进程在等待消息,则调用V(S)后将释放一个等待消息者,即表示该进程等待的消息已经到达,可以继续执行。
  在用PV操作实现同步时,一定要根据具体的问题来定义信号量和调用P操作或V操作。一个信号量与一个消息联系在一起,当有多个消息时必须定义多个信号量;测试不同的消息是否到达或发送不同的消息时,应对不同的信号量调用P操作或V操作。

2. 进程互斥
(1)设立一个互斥信号量S,表示临界区,其取值为1,0,-1,…其中,S=1表示无并发进程进入S临界区;S=0表示已有一个并发进程进入了S临界区;S等于负数表示已有一个并发进程进入S临界区,且有|S|个进程等待进入S临界区,S的初值为1。
(2)用PV操作表示对S临界区的申请和释放。在进入临界区之前,通过P操作进行申请,在退出临界区之后,通过V操作释放。

生产者与消费者

ref

死锁

  • 产生原因:多个进程的循环等待
  • 必要条件:互斥条件,不可抢占条件,保持与等待条件(部分分配条件)、循环等待条件
    1
    2
    3
    4
    - 互斥条件:一个资源每次只能被一个进程使用。
    - 保持与等待条件:有一个进程已获得了一些资源,但因请求其他资源被阻塞肘,对已获得的资源保持不放。
    - 不可抢占条件:有些系统资源是不可抢占的,当某个进程已获得这种资源后,系统不能强行收回,只能由进程使用完时自己释放。
    - 循环等待条件:若干个进程形成环形链,每个都占用对方要申请的下一个资源。
  • 破坏任一条件,死锁不成立
  • 解决策略