mécanismes de mise en œuvre simultanées à réaliser l'exclusion mutuelle -2-

En même temps question de base est des ressources mutuellement exclusives demandes realize mutuellement exclusives , il existe une variété de méthodes (méthode des méthodes matérielles et logicielles)

méthode exclusive

  1. Instructions spécifiques de la machine, moins de frais généraux, mais pas universel. (Support du matériel)
  2. Système d'exploitation ou langage de programmation pour fournir un certain niveau de soutien. (Approche du logiciel: support pour les systèmes d'exploitation et langages de programmation)
  3. Assumer la responsabilité du processus pour obtenir l'exclusion mutuelle, qui est une méthode logicielle, l'augmentation des frais généraux et viciée. (Approche du logiciel: la responsabilité du processus)

1, dans lequel plusieurs méthodes de mise en œuvre sont: l'interruption est désactivée, les instructions machine dédiées, 2 Plusieurs méthodes sont: sémaphores, moniteurs et autres messages, 3 Plusieurs méthodes ont mis en œuvre des algorithmes Dekker, l'algorithme Peterson, les conditions de course de signaux, et montant. Une description détaillée de ces méthodes seront résumées dans cet article.

Support matériel

Il existe plusieurs méthodes de matériel: Interrupt handicapés, des instructions de machines spéciales

Désactiver Interrompre: assurez-vous juste qu'un processus ne peut être interrompu, l'interruption activer et désactiver les interruptions primitives de soutien fourni par le noyau, mais l'efficacité du coût élevé de la mise en œuvre sera considérablement réduite, tout en ne convient pas pour le multi-processeur

Instructions spécifiques de la machine: comparer et instruction d'échange, une unité de contrôle de la mémoire (* mot) avec une valeur de test (testVal). Si la cellule de mémoire est la valeur actuelle de la valeur de test (testVal), remplacera la valeur avec la nouvelle valeur (newval), sinon il reste inchangé. (Lorsque le mot peut entrer dans la région critique est 0, la zone critique, le mot est remis à 0, si vous avez actuellement accès à un processus critique dans la région, d'autres processus TESTVAL est 1, comparer et rendement des swaps 1 s'il n'y a pas de progrès dans la zone critique, testVal à 0, comparer et échanger renvoie 0 si la valeur du chèque retourné et testVal pas égal passé, ce qui indique que la valeur du mot d'un cycle est modifié sur), lorsqu'un processus est dans une zone critique, d'autres traiter attente active (spin-attente),

instructions machine seulement résolu mutuellement exclusifs, pourrait la faim (processus de sélection pour accéder à la section critique est facultative) et les blocages (si P1 est interrompu dans les zones critiques, et P1 est maintenu en accédant à une ressource R dans la région critique, donc si P2 a ce stade, et essayer d'être prévu pour l'exécution ne parviendra pas à accéder à la R, si elle est supérieure à la priorité P1 P2, P1 ne sera jamais exécutée, P2 est toujours occupé attente, impasse)

Méthode Logiciel: OS / programmation prise en charge linguistique

Todo: Tableau 5.3 capture d'écran de concurrence couramment utilisés

sémaphore sémaphores

Montant du drapeau binaire sémaphore binaire, la valeur ne peut être 1 ou 0

struct binary_semaphore{
	enum {zero,one} value;
    queueType queue;
}
void semWaitB(binary_semaphore s){
    if(s.value==one){
        s.value = zero;
    }else{
        /*把当前进程插入队列*/
        /*阻塞当前进程*/       
    }
}
void semSignalB(binary_semaphore s){
    if(s.queue is empty()){
        s.value = one;
    }else{
        /*把进程P从队列移除*/
        /*把进程P插入就绪队列*/       
    }
}

Comptage sémaphore de comptage sémaphore (typiquement sémaphore sémaphore général)

struct semaphore{
    int count;
    queueType queue;
}
void semWait(semaphore s){
    s.count--;
    if(s.count<0){
        /*把当前进程插入队列*/
        /*阻塞当前进程*/
    }
}
void semSignal(semaphore s){
    s.count++;
    if(s.count<=0){
        /*把进程P从队列移除*/
        /*把进程P插入就绪队列*/
    }
}

sémaphores d'exclusion mutuelle écrit à résoudre le problème comme suit

const int n= /*进程数*/;
semaphore s = 1;
void p(int i){
    while(true){
        semWait(s);
        /*临界区*/
        semSiganl(s);
        /*其他部分*/
    }
}
void main(){
    parbegin(P(1),P(1),...,P(n));
}

la mise en œuvre sémaphore

semWait et atteindre semSignal doit être atomique primitive, à tout moment, un seul processus peut être utilisé pour commander le fonctionnement semWait ou semSignal un sémaphore.

Vous pouvez utiliser des programmes logiciels: dekker algorithme ou algorithmes, peterson surcharge de traitement, mais il

Vous pouvez utiliser la solution matérielle: comapare & swap et désactiver interruption (systèmes mono-processeur), et depuis semWait semSignal temps de fonctionnement est très courte, attente tellement occupé ou d'interrompre la longueur des points de temps désactiver, est plus raisonnable.

Méthode est la suivante (note cette déclaration importante et attention à traiter quand processus de colmatage, car le processus de processus de bouchage ne peut pas atteindre la dernière phrase, elle doit être effectuée lorsque le drapeau de blocage est réglé sur 0 ou activer les interruptions !!!)

void semWait(semaphore s){
    while(compare and swap(s.flag,0,1)==1); // important ! 或: 中断禁用
    s.count--;
    if(s.count<0){
        /*把当前进程插入队列*/
        /*阻塞当前进程,并设置flag为0或允许中断*/ // important !
    }
    s.flag=0; // important ! 或: 中断允许
}
void semSignal(semaphore s){
    while(compare and swap(s.flag,0,1)==1); // important !
    s.count++;
    if(s.count<=0){
        /*把进程P从队列移除*/
        /*把进程P插入就绪队列*/
    }
    s.flag=0; // important !
}
  • PV fonctionnement: P pouvant fonctionner semWait V pouvant fonctionner semSignal

  • Processus retiré de la file d'attente dans quel ordre? FIFO la plus équitable, la plus longue processus bloqué a été libéré de la file d'attente, Sémaphore en utilisant cette stratégie est une forte sémaphores, la file d'attente sémaphores ne nécessite pas une mesure de renvoi comme sémaphores faibles. sémaphores Fort assure qu'aucune faim.

  • Le montant de la différence entre le drapeau binaire et mutex (mutex): Le processus pour le processus de verrouillage du mutex et déverrouillage doit être le même processus, et le drapeau binaire qui peut être verrouillé par la quantité d'un processus, tandis qu'un autre processus de déverrouillage

  • Le processus est essentiellement le procédé de l'sémaphore dans et hors de la file d'attente de blocage et prêt

  • est initialisé habituellement sémaphore à 1, de sorte qu'une première exécution semWait (s) du processus peut entrer immédiatement la section critique, et la valeur de s est réglé à 0, alors aucune tentative pour entrer dans la section critique des autres processus sera bloqué.

    Les programmes peuvent aussi être un processus équitable permet à plusieurs processus d'entrer dans une section critique de la demande, cette demande peut sémaphores est initialisée à une valeur spécifique à atteindre. Chaque fois que la valeur peut être expliquée comme suit s.count

    Exemples de cas (valeur COMPT.SONN.FAX supérieur à 1, comme le problème des philosophes, bien que le nombre est supérieur à 1 ne peut garantir la région critique mutuellement exclusifs, mais ne nous dit pas n'est plus la zone critique, plus une sémaphores pour assurer l'exclusion mutuelle, le nombre de couche externe est supérieure à 1 région sémaphore destiné à limiter le nombre de processus critiques, un deuxième compte est égal au sémaphore interne pour assurer l'exclusion mutuelle. 1)

    • s.count> = 0: s.count est effectuée semWait (s) et non le nombre de processus bloqué. Cette situation permet à la synchronisation de soutien et sémaphores d'exclusion mutuelle.
    • s.count <0: taille s.count est le nombre de congestion de file d'attente dans le processus s.queue

le tube

L'utilisation du processus de conception des sémaphores est difficile, et la difficulté est le fonctionnement semWait semSignal peut être distribué dans l'ensemble du processus, et il est difficile de voir l'effet global de la quantité de signal généré dans ces opérations.

Le tube est une structure, le tube peut être utilisé pour verrouiller l'objet.

Le tube est constitué d'un ou plusieurs processus (fonctions, méthodes), une séquence d'initialisation et des données locales composées de modules logiciels. (Plus orienté objet), le tube caractéristiques suivantes

  • Le processus est seulement le tube d'accès variables de données locales
  • Un processus ne peut être appelé le tube pour entrer dans le tube
  • A tout moment, un seul processus exécuté dans le tube, le tube passe tout autre processus d'appels sont bloqués,

Le processus peut non seulement être obstruée dans le tube, il est possible de libérer le côté du tube, lorsque les conditions sont remplies et le tube est à nouveau disponible, la nécessité de rétablir le processus et lui permettre de rentrer dans le tube au point de congestion.

les variables de condition de l'utilisation du tube pour la synchronisation de support, cwait (c), csignal (c), si le tube dans un processus de signalisation, mais il n'y a pas d'attente sur cette variable d'état des tâches de c, puis jeter le signal

Où le tube est supérieur à celui sémaphores, les mécanismes de synchronisation sont tous confinés dans le tube, donc pas seulement facile à vérifier l'exactitude de la synchronisation, une erreur est détectée et facilement? ? ? ?

  • Utilisez les signaux de tube? ? ? pas

  • notification utilisation diffusée le tube? ? ? pas

messagerie

Non xx

Et la relation socket? ? ?

Je suppose que tu aimes

Origine www.cnblogs.com/cheaptalk/p/12549665.html
conseillé
Classement