操作系统基础知识(1)

发布时间 2023-04-24 22:10:03作者: Lumen3ever

什么是管程?

当共享资源用共享数据结构表示时,资源管理程序可用对该数据结构进行操作的一组过程来表示,如资源的请求和释放过程request和release。把这样一组相关的数据结构和过程一并归为管程。

Hansan为管程所下的定义是:“一个管程定义了一个数据结构和能为并发进程所执行的一组操作(操作要在该数据结构上执行),这组操作能同步进程和改变管程中的数据。”。

看不懂上面,说人话!

上面的定义晦涩难懂,简单来说,管程就是定义了一个数据结构和一组操作,这组操作必须要在定义的这个数据结构上进行。

打一个形象的比喻:

人们到一家叫做计算机的银行取钱,这个银行里面就一个空窗口。最早之前,每个人需要从这个窗口爬进去取钱。

这里,银行里面每一个需要取钱的人看作进程,而银行里面的钱可以看做计算机的共享资源,一般是硬件设备或一群共享变量。

每个人都向窗口拥挤,场面混乱不堪。

后面计算机银行不断改进,发明了一种叫ATM的机器(管程),ATM(管程)封装了钱和对外开放了一些存取钱的操作。

这样一来,ATM(管程)在计算机银行的钱和客户之间担任了中介服务的角色。

在一个相对封闭的屋子里面,一次只能服务一个人(让进程互斥使用)。ATM屋子里面有人的时候,其他需要依次排队使用。

一个人(进程)在ATM使用的时间太长也不行,所以需要一个条件变量(condition)来约束他。条件变量可以让一个线程等待时让另一线程进入管程,这样可以有效防止死锁。

管程由哪几部分组成?

管程由四部分组成:

  1.  管程的名称。
  2. 局部于管程内部的共享数据结构说明。
  3. 对该数据结构进行操作的一组过程。
  4. 对局部于管程内部的共享数据设置初始值的语句。

说明引入管程的必要性

  1. 管程的引入是为了解决临界区分散所带来的管理和控制问题。
  2. 在没有管程之前,对临界区的访问分散在各个进程之中,不易发现和纠正分散在用户程序中的不正确使用P,V操作等问题。管程将这些分散在各进程中的临界区集中起来,并加以控制和管理,管程一次值允许一个进程进入管程内,从而既便于系统管理资源,又能保证互斥。