On m'a récemment posé cette question lors d'un entretien, et si j'ai bien répondu aux deux premières parties [je suppose], j'ai eu un peu de mal à répondre à la troisième. Voici la question :
Vous avez deux programmes Linux, A et B. Lorsqu'ils sont exécutés séparément, A et B mettent chacun une minute à se terminer sur un système qui vient d'être redémarré. (c'est-à-dire un système neuf : vous le redémarrez, vous vous connectez, obtenez une invite shell, exécutez le programme).
Que pouvez-vous me dire sur les programmes si :
a) lorsqu'ils sont exécutés ensemble, ils prennent 2 minutes b) lorsqu'ils sont exécutés ensemble, ils prennent 1 minute c) lorsqu'ils sont exécutés ensemble, ils prennent 30 secondes
J'ai dit pour a) que s'ils prennent exactement le double du temps lorsqu'ils sont exécutés ensemble, ils ne partagent aucune exclusion mutuelle et se disputent toutes les mêmes ressources, ne partagent probablement aucune sorte de données ou d'instructions de cache [et donc ne s'entraident pas du point de vue du cache] et chaque programme a besoin de la pleine utilisation de ladite ressource pour être achevé, de sorte que le système d'exploitation ne peut pas les paralléliser.
Pour b), j'ai dit que s'ils peuvent s'exécuter aussi rapidement ensemble, ils partagent probablement une certaine localité spatiale/temporelle dans l'argent, et peuvent se prêter à être correctement pipelinés de telle sorte que pendant que le programme A attend quelque chose, le programme B peut s'exécuter entre ces étapes, et vice versa - les exécuter tous les deux en 1 minute.
Pour le point c), j'étais un peu bloqué. Rétrospectivement, j'aurais probablement dû dire que les programmes A et B effectuaient tous deux une tâche commune, et que deux d'entre eux fonctionnant en même temps pouvaient accomplir cette tâche plus rapidement que l'un d'entre eux fonctionnant seul - comme un collecteur d'ordures. Mais le mieux que j'ai pu trouver, c'est qu'ils se sont peut-être chargés à partir du même secteur du disque dur, ce qui les a aidés à s'exécuter plus rapidement.
Je cherche juste à obtenir l'avis de quelques intelligents ici sur les choses que j'ai probablement manquées. Le poste à pourvoir est celui d'une plateforme/système qui nécessite une bonne compréhension du matériel/logiciel et des systèmes d'exploitation, et notamment des interactions entre eux, c'est pourquoi [je suppose] que la question a été posée.
J'ai également essayé de penser à des exemples que je pourrais appliquer à chaque partie pour aider à montrer ma connaissance des applications de la vie réelle des questions, mais sur le coup, je n'ai pas réussi.
Merci.