Logiciel de base

Introduction

Le but de ce cours est de maitriser la programmation « bas-niveau », c'est-à-dire proche de la machine, en utilisant une méthodologie de traduction systématique d'un code C vers son équivalent en assembleur.

Le cours débute par des rappels sur le langage C que vous avez déjà dû rencontrer avant d'arriver à l'Ensimag, en mettant l'accent sur les spécificités du dialecte C99 que l'on utilisera ici, ainsi que sur les notions en liaison avec la partie sur l'assembleur.

L'initiation à la programmation en assembleur sur l'architecture Intel constitue le cœur de la matière et sera axée sur la compréhension des mécanismes utilisés dans un compilateur pour générer systématiquement du code assembleur, ainsi que sur les conventions à respecter pour faire cohabiter des fonctions écrites en C et en assembleur.

Le cours se conclura par un miniprojet basé sur la programmation d'un petit noyau de système d'exploitation, et qui mélangera des notions vues dans les deux parties précédentes.

L'enseignant responsable du cours de Logiciel de base est Christophe Rippert, n'hésitez pas à le contacter par mail pour toute question en dehors des séances encadrées.

Évaluation

L'évaluation prendra la forme d'un examen sur machine : les élèves devront réaliser en temps limité un petit TP faisant intervenir les notions vues en cours.

Seule une feuille de notes A4 manuscrite recto verso sera autorisée pendant cet examen, à l'exclusion de tout autre document ou matériel. Les différents supports de cours ci-dessous seront inclus avec le sujet.

On rappelle que les absences pour raison de santé ou force majeure doivent être signalées et justifiées le plus rapidement possible au service de scolarité. Vous devez également prévenir l'enseignant de votre absence.

Supports de cours

Diapositives d'introduction

Rappels de C

Assembleur sur architecture Intel

Si vous travaillez sur votre machine personnelle, et si la compilation échoue en 32 bits alors qu'elle fonctionne en 64 bits, vous devez installer la bibliothèque manquante : sous Ubuntu et compatibles, le package devrait s'appeler libc6-dev-i386.

Mini-projet système

Le cours de Logiciel de Base se termine par un miniprojet système : vous allez écrire un petit noyau de système d'exploitation en utilisant ce que vous avez appris en C et en assembleur. Ce miniprojet est en fait l'introduction au Projet système sur lequel vous travaillerez en fin de deuxième année.

Le planning du projet est libre pour vous laisser avancer à votre rythme, mais on peut envisager une progression comme précisé ci-dessous.

Si vous travaillez sur votre machine personnelle, il vous faudra peut-être installer la version 32 bits de QEmu (package qemu-system-i386 sur Ubuntu et compatibles).

Documentations complémentaires

Pour rafraichir votre mémoire sur le langage C (norme ANSI « de base »), on recommande la lecture du polycopié de Bernard Cassagne.

On fournit la documentation officielle des processeurs Intel, qui va évidemment beaucoup plus loin que ce qu'on voit dans ce cours. Attention, cette documentation fait plusieurs milliers de pages, ne l'imprimez pas ! Le jour de l'examen de TP, le sujet contiendra toutes les informations nécessaires, vous n'aurez pas besoin de cette documentation.

L'Application Binary Interface x86_64 est un document qui détaille les conventions présentées dans ce cours concernant notamment les appels de fonctions : là-encore, le document original va beaucoup plus loin que ce qu'on a besoin de savoir.

Pour ceux qui voudraient prendre de l'avance sur le projet système de 2A, le wiki des développeurs de systèmes fournit beaucoup d'information et de multiples références bibliographiques.

Nous utilisons des logiciels libres dans ce cours, développé par le projet GNU, qui fourni de nombreuses documentations très complètes :