IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Applications et environnements graphiques Discussion :

pourquoi linux fonctionne même avec un programme qui fait une boucle while(1) ?


Sujet :

Applications et environnements graphiques

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    59
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 59
    Points : 38
    Points
    38
    Par défaut pourquoi linux fonctionne même avec un programme qui fait une boucle while(1) ?
    Bonjour à tous!
    Je me posais une question (qui n'est absolument pas vitale!).

    Voila, j'ai un PC, avec 1 unique processeur, pas de dual-core : juste un simple processeur (vieux netbook)

    Lorsque j'écrie un programme en C qui fait UNIQUEMENT while(1){}; (autent dire que ce programme est nul, mais il illustre mon propos), et bien pourquoi lorsque je l'execute, Linux( Fedora) ne plante pas?

    Si j'avais plusieurs processeur, d'accord, un proc gere linux, et l'autre ma boucle while.

    Mais la, je vois bien (avec la commande htop) que mon programme while1 tourne à fond, mais la souris et l'environement graphique répondent bien!

    Or, si je ne m'abuse, lorsqu'on lance un while1, l'os rentre en mode noyaud et le processeur lit le registre dans lequel est stocké le programme.
    Donc en gros, mon registre doit (je pense??) contenir un truc du style:
    1- lire boucle while
    2- revenir à 1

    Je me trompe?
    Et donc dans ce cas, on ne redonne jamais la main à l'OS.

    Pourtant, mon OS à bien la main, et rien ne plante!

    Comprends pas pourquoi?

    Qulequ'un peut m'éclairer?

    Par avance merci

  2. #2
    Invité
    Invité(e)
    Par défaut
    Salut,

    Ceci devrait pouvoir t'expliquer le pourquoi du comment:

    http://fr.wikipedia.org/wiki/Multit%C3%A2che

    Multitâche coopératif

    Le multitâche coopératif est une forme simple de multitâche où chaque processus doit explicitement permettre à une autre tâche de s’exécuter. Il a été utilisé, par exemple, dans les produits Microsoft Windows jusqu’à Windows 3.11 ou dans Mac OS jusqu’à Mac OS 9. Cette approche simplifie l’architecture du système d’exploitation mais présente plusieurs inconvénients :
    Si un des processus ne redonne pas la main à un autre processus, par exemple si le processus est bugué, le système entier peut s’arrêter.
    Le partage des ressources (temps CPU, mémoire, accès disque, etc.) peut être inefficace.
    Le multitâche coopératif est une forme de couplage fort.
    Multitâche préemptif

    Article détaillé : Multitâche préemptif.
    Pour remédier à cette situation, les systèmes grand-public ont évolué pour utiliser une approche nommée « multitâche préemptif ».
    Dans un tel système, le processeur signale au système d’exploitation que le processus en cours d’exécution doit être mis en pause pour permettre l’exécution d’un autre processus. Le système doit alors sauver l’état du processus en cours (le compteur ordinal, les valeurs des registres) ; le processus est placé dans une file d’attente ; lorsqu’il est en bout de file, son contexte d’exécution est restauré. À la différence du « multitâche coopératif », du point de vue des programmes préemptés, la commutation de contexte est transparente.
    Unix (1969) et ses dérivés (BSD en 1977, Linux en 1991, ...) sont des systèmes basés sur le multitâche préemptif.
    Sinclair QDOS (1984), AmigaOS (1985), NeXTSTEP (1989) ou BeOS (1991) sont des systèmes multitâches préemptif depuis leur naissance. D’autres systèmes d’exploitation le sont devenus comme Windows (avec Windows NT 3.1 en 1993 pour les professionnels et Windows 95 en 1995 pour le grand public) et MacOS X en 2001.
    Comparaison

    Le multitâche préemptif est plus robuste que le multitâche coopératif : une tâche ne peut bloquer l’ensemble du système. Le système d’exploitation peut aussi utiliser plus efficacement les ressources disponibles, par exemple si des données sont disponibles via un périphérique d’entrée, le processus devant traiter ces données peut être immédiatement activé.
    De plus, une tâche en attente de données ne consommera pas de temps processeur avant que ses données ne soient réellement disponibles.
    Bien que, au départ, le multitâche ait été conçu pour permettre à plusieurs utilisateurs d’utiliser le même ordinateur, il est apparu très rapidement qu’il était très pratique même pour un seul utilisateur. Utiliser son traitement de texte favori tout en butinant sur le Web est de nos jours une caractéristique incontournable.
    Une autre utilité du multitâche provient du fait qu’il est plus facile de concevoir et d’écrire plusieurs programmes simples, plutôt qu’un seul programme capable de tout faire, puis de les faire coopérer pour effectuer les tâches nécessaires.
    Les algorithmes implémentant le multitâche ont été raffinés au cours du temps. Les systèmes modernes peuvent gérer des processus avec des priorités différentes ainsi que des ordinateurs comportant de un à quelques centaines de processeurs.
    La technologie des processus légers en anglais : threads a été permise grâce à la présence de gestionnaires de mémoire évolués. Les processus légers partagent toute ou partie de la mémoire d’un processus existant. Ce partage permet, entre autres, une commutation de contexte plus rapide et un partage de données plus efficace entre les processus légers. En contrepartie, de tels programmes peuvent être plus complexes et peuvent se montrer difficiles à mettre au point.
    Une autre innovation clé a été l’introduction des niveaux de privilèges : les processus possédant un niveau de privilège bas ne peuvent pas effectuer certaines opérations, par exemple écrire sur des portions de mémoire vitales pour la sécurité du système.
    Si un tel processus effectue une opération interdite, le programme est interrompu et un programme superviseur (souvent le système d’exploitation) préempte le processus en cours, puis l’arrête définitivement. Cette technique permet de créer des machines virtuelles où le système « réel » émule le fonctionnement d’une ou plusieurs machines virtuelles, par exemple afin d’accroître la sécurité (une machine virtuelle ne peut pas interférer avec une autre machine virtuelle).

  3. #3
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    59
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 59
    Points : 38
    Points
    38
    Par défaut
    Merci Mygale1978!

    Je vais pouvoir me renseigner un peu plus sur les systèmes préemptifs!

    Merci!

Discussions similaires

  1. Réponses: 3
    Dernier message: 06/03/2013, 13h53
  2. Quitter une fonction qui fait une boucle dans le Thread ?
    Par bboy0303 dans le forum Multithreading
    Réponses: 2
    Dernier message: 25/05/2009, 17h58
  3. Réponses: 2
    Dernier message: 25/02/2009, 15h08
  4. Trouble avec Excel avec un programme qui utilise un Hook.
    Par hot_metal dans le forum Windows
    Réponses: 5
    Dernier message: 14/01/2006, 13h40

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo