Soit un ensemble de tâches noté , un ensemble de buffers fonctionnant de façon analogue à des fifos. Chaque buffer est défini par un couple de tâches où (resp. ) est la tâche en écriture (resp. en lecture) sur . L'ensemble des buffers de vers est représenté par .
Chaque tâche se décompose en opérations séquentielles notées
,
on définit de même :
.
A chaque opération est associé un buffer noté .
Si est une opération d'écriture sur , alors
, dans le cas où
lit des données dans , alors
.
On appellera le poids du buffer la surface à laquelle la donnée élémentaire stockée par est proportionnelle,
c'est-à-dire la surface que prend (resp. libère) chaque écriture (resp. lecture) dans .
La capacité d'un buffer est le nombre maximal de données pouvant y être
stockées simultanément, on note l'application de
dans
qui à chaque buffer associe une dimension à lui attribuer.
Les variables de décision du problème sont formées par l'ensemble {
}.
Si les buffers sont de dimensions insuffisantes, des tentatives d'écriture y seront impossibles;
Des échecs de la sorte en cascade (ou plutôt en boucle) peuvent entraîner le blocage
complet du système. Comme chaque buffer occupe une surface proportionnelle à
,
il devient nécessaire de trouver une application permettant de minimiser la surface
occupée par les buffers.
La fonction objectif est donc
.
Le but étant de minimiser
tout en assurant qu'aucun inter-blocage
ne peut survenir.