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.