睡眠与唤醒2024年8月28日 | 阅读 4 分钟 (生产者-消费者问题)让我们来研究一下睡眠和唤醒的基本模型。假设我们有两个系统调用,分别是 sleep 和 wake。调用 sleep 的进程将被阻塞,而调用 wake 的进程将被唤醒。 有一个著名的例子叫做生产者-消费者问题,这是模拟睡眠和唤醒机制最受欢迎的问题。 睡眠和唤醒的概念非常简单。如果临界区不为空,则进程将进入睡眠状态。它将被当前正在临界区内执行的另一个进程唤醒,以便该进程可以进入临界区。 在生产者-消费者问题中,假设有两个进程,一个进程写入数据,另一个进程读取数据。写入数据的进程称为生产者,而读取数据的进程称为消费者。 为了读写,它们都使用一个缓冲区。下面显示了模拟睡眠和唤醒机制以解决生产者-消费者问题的代码。 生产者生产物品并将其插入缓冲区。全局变量 count 的值在每次插入时都会增加。如果缓冲区完全填满,没有可用插槽,则生产者将休眠,否则它会继续插入。 在消费者端,count 的值在每次消费时都会减 1。如果在任何时候缓冲区为空,则消费者将休眠,否则,它会继续消费物品并将 count 的值减 1。 如果缓冲区中至少有 1 个待消费的物品,生产者将唤醒消费者。如果缓冲区中至少有一个可用插槽,以便生产者可以写入,消费者将唤醒生产者。 然而,问题出现在消费者即将进入睡眠状态之前被抢占的情况下。现在消费者既没有睡眠也没有消费。由于生产者不知道消费者实际上没有睡眠,因此它会不断唤醒消费者,而消费者由于没有睡眠而没有响应。 这导致系统调用的浪费。当消费者再次被调度时,它将进入睡眠状态,因为它在被抢占时即将睡眠。 生产者不断向缓冲区写入数据,一段时间后缓冲区被填满。生产者也会在那时休眠,记住当缓冲区中有可用插槽时,消费者会唤醒它。 消费者也在睡眠,并且不知道生产者会唤醒它。 这是一种死锁,生产者和消费者都处于非活动状态,并等待对方唤醒它们。这是一个需要解决的严重问题。 使用标志位解决此问题可以使用一个标志位来解决这个问题。生产者在第一次调用唤醒时可以设置该位。当消费者被调度时,它会检查该位。 消费者现在将知道生产者试图唤醒它,因此它不会睡眠并进入就绪状态,以消费生产者生产的任何东西。 此解决方案仅适用于一对生产者和消费者,如果有 n 个生产者和 n 个消费者怎么办?在这种情况下,需要维护一个整数,它可以记录已进行了多少次唤醒调用,以及有多少消费者不需要睡眠。这个整数变量称为信号量。我们稍后将详细讨论信号量。 下一个主题信号量介绍 |
机制 我们必须确保我们的同步机制能够提供进展。在 turn 变量机制中,由于不希望进入临界区的进程不考虑其他...,因此没有提供进展。
阅读 4 分钟
或互斥量简介:称为二进制信号量的同步机制的整数值介于 0 和 1 之间。因此,此类信号量提供对临界区的单一访问点。这意味着关键组件仅对一个人可用...
阅读 4 分钟
(操作系统)当两个或多个进程相互协作时,它们的执行顺序必须得到保证,否则它们的执行可能发生冲突,并可能产生不适当的输出。协作进程是指可以影响其他进程执行的进程...
阅读1分钟
在 OS(操作系统)中,临界区是程序中尝试访问共享资源的部分。该资源可以是计算机中的任何资源,如内存位置、数据结构、CPU 或任何 IO 设备。临界区不能由多于... 执行。
阅读 2 分钟
简介:计数信号量是介于 [0, n] 之间的同步机制,其中 n 是大于一 (1) 的非负整数。通过以这种方式计数信号量,可以提供许多关键组件的访问令牌。这使得多个实体可以访问关键...
阅读 8 分钟
操作系统 (OS) 中的信号量简介 在本教程中,我们将学习最重要的主题——信号量。在口试、面试、考试甚至实习中,100% 会有关于信号量主题的问题...
11 分钟阅读
优先级反转 在 TSL 机制中,可能存在优先级反转问题。假设有两个协作进程 P1 和 P2。P1 的优先级为 2,而 P2 的优先级为 1。P1 先到达并被 CPU 调度。由于它...
阅读1分钟
Test Set Lock 机制 汇编代码中的修改 在 lock 变量机制中,有时进程会读取 lock 变量的旧值并进入临界区。因此,可能有两个或多个进程进入临界区。然而,在第一部分所示的代码中...
阅读 3 分钟
关于计数信号量的问题 GATE 考试中经常问到计数信号量问题。通常问题非常简单,只包含加法和减法。Wait Decre Down P Signal Inc Up V 以下类型的问题可能会在... 提出。
阅读1分钟
Lock 变量 这是最简单的同步机制。这是一种在用户模式下实现的软件机制。这是一种忙等待解决方案,可用于两个以上的进程。在此机制中,使用了一个 Lock 变量 lock。lock 可以有两种值,...
阅读 3 分钟
我们请求您订阅我们的新闻通讯以获取最新更新。
我们提供所有技术(如 Java 教程、Android、Java 框架)的教程和面试问题
G-13, 2nd Floor, Sec-3, Noida, UP, 201301, India