📝 操作系统教程

321篇技术文档
  操作系统关键部分问题

📅  最后修改于: 2020-12-14 03:36:17        🧑  作者: Mango

临界区问题关键部分是程序的一部分,它试图访问共享资源。该资源可以是计算机中的任何资源,例如内存位置,数据结构,CPU或任何IO设备。关键部分不能同时由多个进程执行;操作系统在允许和禁止进程进入关键部分方面面临困难。关键部分问题用于设计一组协议,这些协议可以确保进程之间的竞争条件永远不会出现。为了使协作过程同步,我们的主要任务是解决关键部分问题。我们需要提供一种可以满足以下条件的解决方案。同步机制的...

  操作系统锁定变量机制

📅  最后修改于: 2020-12-14 03:37:09        🧑  作者: Mango

锁定变量这是最简单的同步机制。这是在用户模式下实现的软件机制。这是一个繁忙的等待解决方案,可以用于两个以上的进程。在这种机制中,使用了Lock变量锁。可能有两个锁定值,分别为0或1。锁定值0表示关键部分是空的,而锁定值1则表示它已被占用。想要进入关键部分的过程首先检查lock变量的值。如果为0,则将lock的值设置为1并进入临界区,否则等待。该机制的伪代码如下所示。如果查看伪代码,则会发现该代码中...

  OS TSL机制

📅  最后修改于: 2020-12-14 03:38:02        🧑  作者: Mango

测试装置锁定机制汇编代码中的修改在锁变量机制中,有时Process会读取锁变量的旧值并进入关键部分。由于这个原因,关键部分可能会涉及多个过程。但是,下一节第一部分中显示的代码可以替换为第二部分中显示的代码。这不会影响算法,但是通过这样做,我们可以设法在某种程度上但并非完全提供互斥。在更新的代码版本中,将Lock的值加载到本地寄存器R0中,然后将lock的值设置为1。但是,在第3步中,将锁的先前值(...

  TSL中的OS优先级反转

📅  最后修改于: 2020-12-14 03:38:53        🧑  作者: Mango

优先级倒置在TSL机制中,可能存在优先级倒置的问题。假设有两个协作过程,P1和P2。P1的优先级为2,而P2的优先级为1。P1较早到达并由CPU调度。由于这是一个协作过程,并且希望在关键部分执行,因此它将通过将lock变量设置为1进入关键部分。现在,P2到达就绪队列。 P2的优先级高于P1,因此根据优先级调度,P2被调度,P1被抢占。 P2也是一个协作过程,希望在关键部分内执行。尽管P1被抢占,但...

  操作系统转向可变或严格交替

📅  最后修改于: 2020-12-14 03:39:46        🧑  作者: Mango

转可变或严格交替方法转变量或严格交替方法是在用户模式下实施的软件机制。这是一个繁忙的等待解决方案,只能对两个进程实施。在这种方法中,使用了实际上是锁的turn变量。此方法只能用于两个过程。通常,让两个过程为Pi和Pj。他们共享一个称为转弯变量的变量。程序的伪代码可以如下所示。对于过程Pi对于过程Pj锁定变量方法的实际问题是,仅当锁定变量为1时,进程才进入关键部分。多个进程可以同时将锁定变量视为1,...

  操作系统感兴趣的变量机制

📅  最后修改于: 2020-12-14 03:40:41        🧑  作者: Mango

兴趣变量机制我们必须确保必须通过我们的同步机制来提供进度。在转弯变量机制中,由于不想进入关键部分的过程也没有考虑其他感兴趣的过程,因此未提供进度。无论关键部分内没有任何人,其他过程也都必须等待。如果操作系统可以将额外的变量与turn变量一起使用,则可以解决此问题,并且我们的问题可以在很大程度上解决问题。感兴趣的变量机制利用额外的布尔变量来确保提供进度。对于过程Pi对于过程Pj在这种机制中,使用了一...

  操作系统Paterson解决方案

📅  最后修改于: 2020-12-14 03:41:34        🧑  作者: Mango

百德解决方案这是在用户模式下实现的软件机制。这是一个繁忙的等待解决方案,只能针对两个进程实施。它使用两个变量,即转变量和感兴趣变量。解决方案的代码如下到目前为止,我们的每个解决方案都受到一个或另一个问题的影响。但是,Peterson解决方案为您提供了所有必要的要求,例如互斥,进度,有限的等待时间和可移植性。彼得森解决方案的分析这是两个过程的解决方案。让我们考虑两个协作过程P1和P2。入口部分和出口...

  无需等待的OS同步机制

📅  最后修改于: 2020-12-14 03:42:25        🧑  作者: Mango

同步机制,无需等待到目前为止,我们所看到的所有解决方案都是为了在繁忙的等待中提供互斥的。但是,繁忙等待不是资源的最佳分配,因为尽管进程正在等待关键部分可用,但它始终使CPU一直在忙于检查while循环条件,从而使CPU一直忙碌。所有具有繁忙等待的同步机制也都存在优先级倒置问题,因为总是有较高优先级的进程必须在关键部分之外等待,因此总是有自旋锁定的可能性,因为该机制打算执行较低的优先级关键部分中的过...

  操作系统睡眠和唤醒

📅  最后修改于: 2020-12-14 03:43:26        🧑  作者: Mango

睡眠与唤醒(生产者消费者问题)让我们检查一下睡眠和唤醒的基本模型。假设我们有两个系统调用,分别为sleep和唤醒。调用睡眠的过程将被阻塞,而调用过程将被唤醒。有一个流行的例子称为生产者消费者问题,它是模拟睡眠和唤醒机制的最流行的问题。睡眠和唤醒的概念非常简单。如果关键部分不为空,则该过程将进入休眠状态。当前正在关键部分内执行的另一个进程将唤醒它,以便该进程可以进入关键部分内。在生产者消费者问题中,...

  操作系统信号量介绍

📅  最后修改于: 2020-12-14 03:44:21        🧑  作者: Mango

信号量简介为了消除浪费唤醒信号的问题,Dijkstra提出了一种方法,该方法涉及存储所有唤醒呼叫。 Dijkstra指出,生产者可以将唤醒呼叫存储在变量中,而不是直接将唤醒呼叫传递给消费者。任何需要阅读的消费者都可以阅读。信号量是存储从生产者到消费者转移的整个唤醒呼叫的变量。它是一个变量,在内核模式下会自动进行读取,修改和更新。信号量无法在用户模式下实现,因为当两个或多个进程尝试同时访问变量时,竞...

  操作系统计数信号量

📅  最后修改于: 2020-12-14 03:45:20        🧑  作者: Mango

计数信号量在某些情况下,需要在关键部分中同时执行多个流程。但是,当我们需要在关键部分中同时具有多个过程时,可以使用计数信号量。下面显示了信号量实现的编程代码,其中包括信号量的结构以及可以在关键部分执行进入和退出操作的逻辑。在这种机制中,关键部分的进入和退出是根据计数信号量的值执行的。在任何时间点的信号量计数值表示可以同时进入关键部分的最大进程数。想要进入关键部分的过程首先将信号量值减小1,然后检查...

  计数信号量时的OS问题

📅  最后修改于: 2020-12-14 03:46:15        🧑  作者: Mango

信号量计数问题在计数GATE中的信号量时提出了一些问题。通常,问题非常简单,仅包含减法和加法。在GATE中可以询问以下类型的问题。将计数信号量初始化为12。然后对该信号量计算10P(等待)和4V(信号)操作。结果是什么?因此,计数信号量的最终值为6。...

  OS Binary Semaphore或Mutex

📅  最后修改于: 2020-12-14 03:47:08        🧑  作者: Mango

二进制信号量或互斥量在计算信号量时,未提供互斥,因为我们有一组必须在关键部分同时执行的过程。但是,Binary Semaphore严格提供互斥。在这里,关键部分中最多只能有1个进程,而不是关键部分中有1个以上的可用插槽。信号量只能有两个值,即0或1。让我们看一下二进制信号量的编程实现。...

  操作系统死锁简介

📅  最后修改于: 2020-12-14 03:48:00        🧑  作者: Mango

死锁简介每个进程都需要一些资源来完成其执行。但是,资源是按顺序授予的。该过程需要一些资源。如果资源可用,则OS会授予该资源,否则让进程等待。该过程使用它并在完成时释放。死锁是一种情况,其中每个计算机进程都在等待分配给另一个进程的资源。在这种情况下,由于所需的资源由其他正在等待释放其他资源的进程所保留,因此没有任何进程被执行。让我们假设存在三个过程P1,P2和P3。存在三个不同的资源R1,R2和R3...

  操作系统策略处理死锁

📅  最后修改于: 2020-12-14 09:23:45        🧑  作者: Mango

处理死锁的策略1.死锁无知死锁无知是所有机制中使用最广泛的方法。许多操作系统主要将其用于最终用户。在这种方法中,操作系统假定永远不会发生死锁。它只是忽略了死锁。这种方法最适合单个最终用户系统,在该系统中,用户仅将系统用于浏览以及所有其他常规内容。在正确性和性能之间总是要权衡取舍。 Windows和Linux等操作系统主要关注性能。但是,如果系统始终使用死锁处理机制会降低系统的性能,如果死锁发生10...