Maison base de données tutoriel mysql 操作系统之进程管理(2)

操作系统之进程管理(2)

Jun 07, 2016 pm 03:00 PM
principal commun 学习 nous 操作系统 管理 进程

上篇博文我们主要共同学习了进程的一些基本概念,这次我们就要来分析一下进程间的相互作用,即进程的互斥、同步与通信。 进程互斥是进程之间所发生的一种间接性相互作用,这种相互作用是进程本身所不希望的,也是运行进程感觉不到的。进程互斥既可能发生在相

上篇博文我们主要共同学习了进程的一些基本概念,这次我们就要来分析一下进程间的相互作用,即进程的互斥、同步与通信。

         进程互斥是进程之间所发生的一种间接性相互作用,这种相互作用是进程本身所不希望的,也是运行进程感觉不到的。进程互斥既可能发生在相关的进程之间,也可能发生在不相关的进程之间。

         几个概念需要了解:

         共享变量:多个进程均需访问的变量称为共享变量。

         临界区:访问共享变量的程序段称为临界区,也称为临界段。

         临界资源:一次只允许一个进程使用的资源。

         进程互斥:两个或者两个以上的进程不能同时进入关于同一组共享变量的临界区,否则可能发生与时间有关的错误,这种想象称为进程互斥。

         那么如何实现进程互斥呢?

         先给出临界区的框架:

       操作系统之进程管理(2)

         实现互斥就是要编写entrydiv和exit div,保证同一时刻最多只有一个进程处于临界区内。

         下面从软件和硬件两个方面来描述进程互斥的实现:

   l  进程互斥的软件实现

(1)      Dekker互斥算法

      操作系统之进程管理(2)

        操作系统之进程管理(2)                            

         判断一个算法的正确性从三个方面来说明:

u  互斥性原则:任意时刻至多只能有一个进程处于关于同一组共享变量的临界区之中。

u  进展性原则:当临界区空闲时,只有那些执行entry div和exit div的进程参与下一个进入临界区进程的决策,该决策不能被无限期的推迟。

u  有限等待性原则:一个请求进入临界区的进程应当在有限的等待时间内获得进入该临界区的机会。

我们来看看上述算法是否符合这些原则:

先解释一下定义的数据结构:intflag[2];//初值为0  int turn;//初值为0或1

         前者表示进程是想进入或者已经进入临界区,后者表示当前轮流次序。

1.        互斥性:假定P0已经进入临界区,此时flag[0]=1成立,P1欲进入临界区必将在其外层while循环处等待,因而满足互斥性;

2.        进展性:若只有一个进程(设为P0)想要进入其临界区,由于flag[1]=0,P0结束外层while循环,进入其临界区。若两个进程都想进入临界区,假设turn=0,进程P1的if条件成立,将自己的flag[1]置为0,并动态等待P0。P0获得处理器资源运行时,检测到flag[1]不成立,结束外层while循环,进入临界区,因而满足进展性。

3.        有限等待性:假设P0处于临界区中,P1正在执行entry div代码试图进入其临界区。P0离开临界区时,将turn的值置为1,flag[0]=0,这将使P1的内层while循环条件不成立。若P1在判断外层while循环条件之前P0没有再次提出进入临界区的请求,则flag[1]的值为0,P1结束外层while循环进入其临界区;反之,若P1判断外层while循环条件之前P0再次执行entry div代码,则会将flag[0]再次置为1,但是因为flag[1]条件和turn==1条件成立,P0将在其flag[0]标志为0后忙式等待P1,直到P1进入并离开其临界区。因而P1在P0再度进入临界区之前,必能得到进入临界区的机会。

关于软件实现的算法还有很多,诸如Peterson互斥算法、Lamport面包店算法等等,

大家可以自己尝试分析一下,这需要很强的逻辑能力。

l  进程互斥的硬件实现

下面给出一个我认为形式最为简单的算法,开关中断硬件互斥算法

操作系统之进程管理(2)

由于中断是实现进程切换的必要条件,所以关中断后,不会发生进程的切换,进入临界区的进程将连续执行临界区中的全部指令,因而满足互斥性。易于证明,也满足进展性。

         关于进程互斥的硬件实现算法也有很多,诸如:基于测试并设置指令的互斥算法、基于“交换”指令的硬件互斥算法等,大家感兴趣也可以找来算法描述自己分析。

         关于进程互斥的问题我们先了解到这,以后再PV操作中还会涉及到,到时候我们就可以自己写原语,来找出现实问题的求解……

Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn

Outils d'IA chauds

Undresser.AI Undress

Undresser.AI Undress

Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover

AI Clothes Remover

Outil d'IA en ligne pour supprimer les vêtements des photos.

Undress AI Tool

Undress AI Tool

Images de déshabillage gratuites

Clothoff.io

Clothoff.io

Dissolvant de vêtements AI

AI Hentai Generator

AI Hentai Generator

Générez AI Hentai gratuitement.

Article chaud

R.E.P.O. Crystals d'énergie expliqués et ce qu'ils font (cristal jaune)
3 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Meilleurs paramètres graphiques
3 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Comment réparer l'audio si vous n'entendez personne
3 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
WWE 2K25: Comment déverrouiller tout dans Myrise
3 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌

Outils chauds

Bloc-notes++7.3.1

Bloc-notes++7.3.1

Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise

SublimeText3 version chinoise

Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1

Envoyer Studio 13.0.1

Puissant environnement de développement intégré PHP

Dreamweaver CS6

Dreamweaver CS6

Outils de développement Web visuel

SublimeText3 version Mac

SublimeText3 version Mac

Logiciel d'édition de code au niveau de Dieu (SublimeText3)

La différence entre char et wchar_t dans le langage C La différence entre char et wchar_t dans le langage C Apr 03, 2025 pm 03:09 PM

Dans le langage C, la principale différence entre Char et WCHAR_T est le codage des caractères: Char utilise ASCII ou étend ASCII, WCHAR_T utilise Unicode; Char prend 1 à 2 octets, WCHAR_T occupe 2-4 octets; Char convient au texte anglais, WCHAR_T convient au texte multilingue; Le char est largement pris en charge, WCHAR_T dépend de la prise en charge du compilateur et du système d'exploitation Unicode; Le char est limité dans la gamme de caractères, WCHAR_T a une gamme de caractères plus grande et des fonctions spéciales sont utilisées pour les opérations arithmétiques.

Quatre façons d'implémenter le multithreading dans le langage C Quatre façons d'implémenter le multithreading dans le langage C Apr 03, 2025 pm 03:00 PM

Le multithreading dans la langue peut considérablement améliorer l'efficacité du programme. Il existe quatre façons principales d'implémenter le multithreading dans le langage C: créer des processus indépendants: créer plusieurs processus en cours d'exécution indépendante, chaque processus a son propre espace mémoire. Pseudo-Multithreading: Créez plusieurs flux d'exécution dans un processus qui partagent le même espace mémoire et exécutent alternativement. Bibliothèque multi-thread: Utilisez des bibliothèques multi-threades telles que PTHEADS pour créer et gérer des threads, en fournissant des fonctions de fonctionnement de thread riches. Coroutine: une implémentation multi-thread légère qui divise les tâches en petites sous-tâches et les exécute tour à tour.

c Quelles sont les différences entre les trois méthodes de mise en œuvre de la lecture multithre c Quelles sont les différences entre les trois méthodes de mise en œuvre de la lecture multithre Apr 03, 2025 pm 03:03 PM

Le multithreading est une technologie importante dans la programmation informatique et est utilisée pour améliorer l'efficacité de l'exécution du programme. Dans le langage C, il existe de nombreuses façons d'implémenter le multithreading, y compris les bibliothèques de threads, les threads POSIX et l'API Windows.

Pouvez-vous utiliser Tauri pour développer des applications de bureau si vous ne connaissez pas la rouille? Pouvez-vous utiliser Tauri pour développer des applications de bureau si vous ne connaissez pas la rouille? Apr 04, 2025 pm 11:42 PM

L'impact de la maîtrise du langage de la rouille sur le développement du programme de bureau dans le cadre de Tauri Tauri est un cadre de développement d'applications de bureau construit à l'aide de la rouille, grâce à son poids léger et ...

Copier et coller le code d'amour Copier et coller le code d'amour gratuitement Copier et coller le code d'amour Copier et coller le code d'amour gratuitement Apr 04, 2025 am 06:48 AM

Copier et coller le code n'est pas impossible, mais il doit être traité avec prudence. Des dépendances telles que l'environnement, les bibliothèques, les versions, etc. dans le code peuvent ne pas correspondre au projet actuel, entraînant des erreurs ou des résultats imprévisibles. Assurez-vous de vous assurer que le contexte est cohérent, y compris les chemins de fichier, les bibliothèques dépendantes et les versions Python. De plus, lors de la copie et de la collation du code pour une bibliothèque spécifique, vous devrez peut-être installer la bibliothèque et ses dépendances. Les erreurs courantes incluent les erreurs de chemin, les conflits de version et les styles de code incohérents. L'optimisation des performances doit être redessinée ou refactorisée en fonction de l'objectif d'origine et des contraintes du code. Il est crucial de comprendre et de déboguer le code copié, et de ne pas copier et coller aveuglément.

Quelles sont les différences entre asynchrone et multithreading Quelles sont les différences entre asynchrone et multithreading Apr 03, 2025 pm 02:48 PM

Asynchrone et Multithreading sont des concepts complètement différents en C #. Portez de manière asynchrone à l'ordre d'exécution des tâches, et Multithreads prêtez attention à l'exécution des tâches en parallèle. Les opérations asynchrones évitent de bloquer le thread actuel en coordonnant l'exécution des tâches, tandis que Multithreads exécute des tâches en parallèle en créant de nouveaux threads. Asynchrone est plus adapté aux tâches à forte intensité d'E / O, tandis que le multithreading convient plus aux tâches à forte intensité de processeur. Dans les applications pratiques, les asynchrones et le multithreading sont souvent utilisés pour optimiser les performances du programme. Faites attention pour éviter les blocs de bloces, l'utilisation excessive de l'asynchrone et l'utilisation rationnelle des pools de fil.

C compilation conditionnelle du langage: un guide détaillé pour les débutants vers des applications pratiques C compilation conditionnelle du langage: un guide détaillé pour les débutants vers des applications pratiques Apr 04, 2025 am 10:48 AM

C La compilation conditionnelle du langage est un mécanisme pour compiler sélectivement les blocs de code en fonction des conditions de temps de compilation. Les méthodes d'introduction incluent: l'utilisation des directives #IF et #ELSE pour sélectionner des blocs de code en fonction des conditions. Les expressions conditionnelles couramment utilisées incluent STDC, _WIN32 et Linux. Cas pratique: imprimez différents messages en fonction du système d'exploitation. Utilisez différents types de données en fonction du nombre de chiffres du système. Différents fichiers d'en-tête sont pris en charge selon le compilateur. La compilation conditionnelle améliore la portabilité et la flexibilité du code, ce qui le rend adaptable aux modifications du compilateur, du système d'exploitation et de l'architecture du processeur.

La différence entre H5 et mini-programmes et applications La différence entre H5 et mini-programmes et applications Apr 06, 2025 am 10:42 AM

H5. La principale différence entre les mini programmes et l'application est: Architecture technique: H5 est basé sur la technologie Web, et les mini-programmes et l'application sont des applications indépendantes. Expérience et fonctions: H5 est légère et facile à utiliser, avec des fonctions limitées; Les mini-programmes sont légers et ont une bonne interactivité; Les applications sont puissantes et ont une expérience fluide. Compatibilité: H5 est compatible multiplateforme, les applets et les applications sont limités par la plate-forme. Coût de développement: H5 a un faible coût de développement, des mini-programmes moyens et une application la plus élevée. Scénarios applicables: H5 convient à l'affichage d'informations, les applets conviennent aux applications légères et les applications conviennent aux fonctions complexes.

See all articles