Nous expliquerons les concepts fondamentaux qui sont à la base de tous les systèmes informatiques et nous montrerons comment ces idées affectent la correction, la performance et l'utilité de n'importe quel programme d'application.

Ce cours sert d'introduction aux étudiants qui vont ensuite développer des matériels et des logiciels systèmes. Mais il pousse aussi les étudiants à devenir les rares programmeurs qui savent comment les choses fonctionnent et comment les réparer lorsqu'elles tombent en panne. Ce n'est pas un cours réservé aux geeks, c'est un cours pour tous les programmeurs !

 

TD : Les TD sont le coeur de ce cours et ils illustrerons comment dans la pratique quotidienne de la programmation. Entre autre choses, nous ferons de la rétro-ingénierie sur un programme binaire, mettrons en oeuvre un dépassement de tampon, optimiserons une architecture de processeur et réaliserons notre propre allocateur de mémoire.

Prérequis : Les étudiants doivent être familiarisé avec la programmation. Toute expérience avec les langages C ou C++ est un plus, mais si vous n'avez qu'une expérience avec Java, nous vous aiderons. Nous n'attendons aucune expérience antérieure du hardaware, du langage machine ou de la programmation en langage d'assemblage.

Langue : Les cours son en français ou anglais, selon la préférence des étudiants

Evaluation : Les labos sont notés + un examen final écrit