Obligement - L'Amiga au maximum

Vendredi 06 juin 2025 - 12:23  

Translate

En De Nl Nl
Es Pt It Nl


Rubriques

Actualité (récente)
Actualité (archive)
Comparatifs
Dossiers
Entrevues
Matériel (tests)
Matériel (bidouilles)
Points de vue
En pratique
Programmation
Reportages
Quizz
Tests de jeux
Tests de logiciels
Tests de compilations
Trucs et astuces
Articles divers

Articles in English


Réseaux sociaux

Suivez-nous sur X




Liste des jeux Amiga

0, A, B, C, D, E, F,
G, H, I, J, K, L, M,
N, O, P, Q, R, S, T,
U, V, W, X, Y, Z,
ALL


Trucs et astuces

0, A, B, C, D, E, F,
G, H, I, J, K, L, M,
N, O, P, Q, R, S, T,
U, V, W, X, Y, Z


Glossaire

0, A, B, C, D, E, F,
G, H, I, J, K, L, M,
N, O, P, Q, R, S, T,
U, V, W, X, Y, Z


Galeries

Menu des galeries

BD d'Amiga Spécial
Caricatures Dudai
Caricatures Jet d'ail
Diagrammes de Jay Miner
Images insolites
Fin de jeux (de A à E)
Fin de Jeux (de F à O)
Fin de jeux (de P à Z)
Galerie de Mike Dafunk
Logos d'Obligement
Pubs pour matériels
Systèmes d'exploitation
Trombinoscope Alchimie 7
Vidéos


Téléchargement

Documents
Jeux
Logiciels
Magazines
Divers


Liens

Associations
Jeux
Logiciels
Matériel
Magazines et médias
Pages personnelles
Réparateurs
Revendeurs
Scène démo
Sites de téléchargement
Divers


Partenaires

Annuaire Amiga

Amedia Computer

Relec


A Propos

A propos d'Obligement

A Propos


Contact

David Brunet

Courriel

 


Programmation : Assembleur - phénomène de fragmentation
(Article écrit par Xavier Leclercq et extrait d'Amiga News - avril 1992)


Nous allons donc tenter ensemble un début d'approche de la question (bel effort !). Pour que vous compreniez le problème (car, premier point, la fragmentation est un problème), je vais vous exposer simplement le drame qui se déroule à chaque fois que vous sauvez un fichier sur disque.

Comme tout le monde le sait, une disquette est constituée de cylindres, subdivisés en pistes, puis en secteurs. Chaque secteur est une suite séquentielle de 512 octets. Lorsque vous décidez de sauver un fichier sur le support magnétique, AmigaDOS réservera un certain nombre de secteurs pour cette opération.

Or, un secteur est une unité indivisible : la table de réservation (bitmap) indique le secteur numéro xxx qui sera réservé comme étant le bloc de données numéro x du fichier. Il n'est pas question d'envisager de ne réserver qu'un demi-bloc par ci, un quart de bloc par là, etc. Vous avez bien deviné l'horreur : si votre fichier n'a pas une taille multiple de 512 (avec FFS) le dernier bloc (de la table de hachage du fichier) aura forcément des octets non remplis par le fichier.

Concrètement

Prenons le fichier "Bidon". Ce fichier a une taille de 513 octets. En simplifiant au maximum (c'est-à-dire en ne tenant pas compte des informations relatives au fichier et en travaillant en FFS avec des blocs de données pures), il y aura donc réservations de deux secteurs car le 513e petit dernier octet ne peut pas tenir sur le premier secteur qui est saturé à 512 octets. Le dernier bloc de données contient donc un octet significatif du fichier "Bidon" et 511 octets non utilisés !

Le cas est extrême mais il souligne bien le problème : il n'y a plus moyen d'exploiter les 511 octets non utilisés pour le fichier car le secteur est réservé au fichier Bidon et son assignation est indivisible... On appelle ce phénomène : fragmentation.

La fragmentation externe et interne

La fragmentation interne est par exemple le cas de la fragmentation sur disque et peut donc se résumer en ces termes : lorsque la taille du fichier n'est pas nécessairement un multiple entier de la taille d'un secteur, le dernier secteur alloué à cet ensemble de secteurs n'est pas utilisé en entier, ce qui produit un fragment interne non exploité à ce secteur.

Jusqu'ici, c'est très simple à comprendre. L'Amiga n'est évidemment pas la seule machine à avoir ce genre de problèmes. Pour tenter de réduire au maximum ces fragments internes, on pourrait être plus précis pour désigner l'emplacement du fichier sur la disquette. Mais évidemment, cela implique un surplus d'informations à gérer et à stocker. Donc aucun système n'est parfait et à fragmentation interne moindre, risque de correspondre une gestion plus lourde et donc plus lente.

Quant au phénomène de fragmentation externe, plus complexe, nous pouvons l'aborder en parlant d'allocation de la mémoire. Si vous demandez d'allouer un bloc mémoire et que chacune des zones libres est de taille strictement supérieure à ce bloc, il faut choisir une zone libre et lui préserver ce bloc ce qui produit une nouvelle zone libre de taille plus petite (d'un bloc). Ainsi, lors des modifications successives de zones, on peut obtenir une grande quantité de fragments trop petits pour permettre le placement contigu d'un nouvel ensemble d'informations.

Exemple : le système dispose séquentiellement en mémoire d'une zone libre de 10 ko, d'une seconde zone occupée de 50 ko et d'une troisième zone libre de 40 ko. Une demande d'allocation de 32 ko parvient au système, qui donc occupera la troisième zone, laissant un fragment libre de 8 ko. Puis, une seconde demande de placement de 15 ko intervient. On s'aperçoit que l'espace libre total restant (18 ko) pourrait permettre de satisfaire la requête de 15 ko mais l'espace occupé ne serait pas adjacent. Il n'est donc pas possible de satisfaire la requête. Le phénomène de fragmentation externe laisse deux fragments externes inutilisables pour toute requête supérieure à 10 ko.

Mais nous avons beaucoup de chance sur Amiga. La stratégie de placements des zones par l'exec.library et la fragmentation externe qui résulte de l'application de cette stratégie est optimum et minimum (merci les segments qui permettent, entre autres, d'expliquer cette bonne utilisation de la mémoire grâce à un chargement dynamique relatif et non absolu des programmes...).

Pour vous rassurez, je vous propose un petit programme assembleur qui permettra de tester la macro ASM et de constater la faible fragmentation externe de la mémoire...

Assembleur

Je fais remarquer que le raisonnement qui consiste en l'utilisation pour cette détection de fragmentation externe de la mémoire Chip, ne tient pas compte de l'espace mémoire qui est pris par chaque zone, considérant qu'il s'agit de mémoire Fast tout en sachant que la fragmentation est détectée pour de la mémoire Chip.

Donc pour simplifier mes propos qui doivent être un peu embrouillés : si vous n'avez pas de mémoire Fast et qu'execbase n'est pas situé en mémoire Fast, les résultats seront quelque peu incorrect.

Assembleur
Assembleur

Conclusion

L'Amiga, même avec un fort phénomène de fragmentation interne sur disque (mais c'est souvent le cas aussi sur les autres micro et mini-ordinateurs) peut se vanter d'une utilisation globale pratiquement maximale de son espace mémoire...


[Retour en haut] / [Retour aux articles]