Synchro de «haut niveau»: Pour faciliter la programmation [Ensemble de sémaphores/Événements/Moniteurs/IPC unix]
Deadlock: Besoin de ressources différentes - Se résoud en les prenant dans le même ordre Besoin de n unités d'une ressources
Problème des philosophes: - Les prendre dans un ordre constant (famine?) Moniteurs: (Hoare 1974) / Dijkstra (Secrétaire) / Brinch Hansen
Type abstrait~objet | Regroupement syntaxique | Données partagée | Opérations (Procédures)
Exclusion mutuelle implicite | Condition (évènement) ... synchro (Primitive d'attente: c.wait() c.signal() c.empty() Mécanismes IPC: (Inter Process Comm)
Envergure [Machine|Programme|LAN|Internet]
Identification (Repérage) [Process (connaître l'interlocuteur)|Point de communication]
Synchronisation
Échange de données
Deadlocks: Blocage: quand un process doit attendre pour une ressource utilisée par un autre process.
Ressource: quelque chose dont un process a besoin pour continuer (physique ou logique/non partageable/attente circulaire) Interblocage: Situation impliquant un ensemble de process où chaque process attend un événement d'un autre process de l'ensemble.
Graphes: requête occupation Un process bloqué (avec des requêtes en attente) ne peut pas initier une transition. (bloqué vs actif) Conditions nécessaires pour obtenir un deadlock : (donc, si on en élimine une, on est sûr de pas en avoir)
1- a) Usage exclusif (pas partageables) b) Pas de préemption/réquisition (réserver la ressource avant) 2- Hold&Wait (Un process en attente de ressources continue à monopoliser les ressources qu'il a obtenues.)
3- Attente circulaire (Il existe un ensemble de process {p0, ..., pn-1} (cycle) tel que pi attend une ressource occupée par pi+1 mod n) Techniques reliées à l'interblocage:
1- Détection (en ce moment, ai-je un DL?) base des autres algorithmes
2- Guérison (kill?, préemption et retour?): récupération «forcée» de ressources pour faire terminer les autres.
3- Avoidance (évitement?): [algo du banquier] (besoin d'annonce préalable des besoins max) (réservation)
Algo d'avoidance: 1) Exige une connaissance préalable sur les besoins maximum de chaque process pour chaque ressource.
2) À chaque transition, on vérifie si l'allocation d'une requête mène à un état non-sécuritaire. Si oui on fait attendre Test de sécurité: Simule une demande max de tous les process actifs et vérifie si impasse. oui non-sécuritaire 4- Prévention: Concevoir un système qui nie une (ou plus) des conditions préalables. ex.: demander les ressources dans le même ordre
hiérarchie des ressources (et demander niveau par niveau ds même ordre / ttes requêtes même niveau en même temps) ex philosophes: limites mangeurs n-1 ou ordonner baguettes
Convertir chaîne->octets:byte[] buf=new byte[2048]; String msg="Hello world";byte[ ] message;message=msg.getBytes();String s2=new String(buf,0,10);
Problèmes fichiers: Repérage (où vs nom) (Espace non-contigü / Pagination / fd) // Gestion d'espace (trous) // Partage+protection // Performance Pagination: le taux de fautes de page multiplié par le temps d'accès à la mémoire secondaire doit être du même ordre (x2 x3?) que l'accès en cache.
donc on ajuste la quantité de mémoire allouée par process pour éviter le «crash». TAUX MAX DE FAUTE: 1 / 10 ms (temp d'accès) Algos de cache: FIFO (simpliste) // Dernier utilisé (trop long à faire) // Second chance (FIFO modifié (horloge) bit «utilisé depuis dernière fois» qui
permet de "sauter par-dessus"... approx de LRU (Last Recently Used) // NRU (Not Recently Used), [Bit R, référencé, Bit M, modifié], on sort par préférence les pages non-ref, non-mod, puis les non-ref, mod, puis ref, non-mod et finalement ref et mod. (On remet à 0 de temps en temps les référencées, mais pas les modifiées, évidemment.) Page choisie au hasard dans la catégorie.
Opérations fichiers: Création (Réserv. espace support+Répertoires) // Écriture Calcul+E/S+plusd'espace? // Lire Calcul+E/S // Positionner // Supprimer Ouverture/Fermeture: pour éviter de chercher le descripteur à chaque accès / permissions / copie en ram du descripteur / allocation de tampon Contenu d'un descripteur de fichier: Infos localisation / Taille || 3 Dates || Propriétaire/Groupe || Perm || Attributs [Caché/Effacé/...] || {Nom} optionnel!
Alors les répertoires sont des liste de nom vs #descripteur. |||| On a alors une table de descripteurs (Inodes) ... ds Unix pas de nom et resp=fichiers
Type: [action à prendre | Vérification d'erreur] Indicateurs: Conventions nom (extensions) // Début fichier // Scripts: #!<path> // descripteur:[fich/dir/dev]
Gestion d'espace: Allocation contiguë // Allocation chaînée ~FAT (File Allocation Table) // Allocation indexée (UNIX)
Contiguë: Espace nécessaire minimal, Accès rapide, Vitesse lecture haute, Accès direct (positionnement). Grossir complexe, frag espace libre.
Allocation chaînée: Peu d'espace de stockage, bcoup frag, direct impossible. Pas d'espace perdu, ajout d'espace facile. FAT=garde pointeurs Allocation indexée: Mon listing pointe vers une liste de pointeurs trouvée sur le disque. Unix 12+3 (3 niveaux)
Organisation physique: Boot sector // Superbloc (Infos sur le disque) // Inodes [les descripteurs] (sur windows 2xFAT) // Data+Rep MBR: remplace boot sector pour infos partitions
FAT16 = 216 ...
- Différences entre smea (Dijkstra) et mutex de PTHREAD
mutex est un sema initialisé à un (sema binaire). sema peut contenir n'importe quoi // 2 font de l'exclusion mutuelle // un théo autre implémenté Envergure Identification Data [exch] Synchronisation (sécuritaire)
Fichiers LAN Path Oui Oui
- attente active de création - attente active par lock
Sémaphore Machine Entier Non Oui
- attente passive
Shared memory Machine Entier Oui Non
Msg Queues Machine Entier Oui Oui
Fork/Wait Machine
(père / fils)
Process ID (pid)
Oui - Père fils (création) - Fils Père (mort du fils)
Le père peut attendre la mort du fils
Signal (kill) Machine Process ID
(pid)
Non (type de sig.)
? routine d'interruption + réveil de toute attente Threads
(posix ou java)
Programme Variables globales Oui (passif)
Pipe (FIFO) Machine fid (file ID) Flux de données Oui (?)
Attendre pour lire: Read bloquant Syncho sur le début, pas la fin Socket (Streams /
Packet) Internet Host+port