Logiciel de base

Bienvenue sur la page du cours de Logiciel de base !


Le sujet et les sources de départ de l'examen à télécharger


Contrôle de l'assiduité pendant les séances encadrées

Vous devez vous connecter à l'adresse https://extranet.ensimag.fr/assiduite pour vous enregistrer au début de chaque séance encadrée.

Attention : il faut être connecté au VPN pour pouvoir accéder à ce site !

Adaptations pour 2019-2020

Vue la situation particulière pour la Période Académique 3, ce cours aura lieu intégralement à distance. Le programme a été allégé et sera adapté au fur et à mesure de l'avancement des séances. L'évaluation sera également à distance selon des modalités qui vous seront précisées en temps voulu.

Environnement de travail

Pour travailler ce cours à distance, vous aurez besoin de l'environnement suivant :

Pour tester votre environnement, vous pouvez télécharger et désarchiver ces sources :

  1. compilez en tapant les commandes make hello32 et make hello64 : ces deux commandes ne doivent produire aucun message d'erreur ou avertissement ;
  2. exécutez en tapant les commandes ./hello32 et ./hello64 : là encore, l'exécution doit se passer sans erreur.

S'il ne vous est pas possible d'obtenir directement un PC sous Linux avec les bons logiciels, vous pouvez travailler sur le PC virtuel de l'Ensimag : consultez cette page pour obtenir les informations nécessaires.

Déroulement des séances encadrées

Les séances auront lieu pendant les créneaux indiqués dans ADE. Les séances consisteront en général :

Note : le temps de lecture des PDF est prévu dans les séances, vous n'êtes donc pas tenus de lire les documents avant la séance. Vous pouvez bien sûr prendre de l'avance si vous le souhaitez, mais attention à ne pas vous surcharger et à bien organiser votre temps entre les différentes matières de la période.

L'encadrement sera assuré via le système de communication Riot, accessible directement via un navigateur sans avoir à installer quoi que ce soit. Suivez la procédure suivante pour vous connecter :

  1. accédez au serveur https://riot.ensimag.fr/ ;
  2. cliquez sur Se connecter et tapez votre login et votre mot de passe Grenoble-INP (les mêmes que pour lire vos mails) ; attention, ce n'est pas forcément le même mot de passe que vous utilisez pour vous connecter sur les machines de l'école (en cas de problème avec votre mot de passe, vous pouvez contacter le service informatique) ;
  3. une fois connecté, cliquez sur Explorer et tapez logiciel de base dans le moteur de recherche ;
  4. cliquez sur le salon Alternance 1A : logiciel de base pour le rejoindre (il sera normalement mémorisé dans votre historique pour les connections suivantes).

L'enseignant sera présent dans ce salon pendant les séances encadrées pour répondre à vos questions en direct. En dehors des séances, vous pouvez le contacter par mail.

Introduction

Le but de ce cours est de maitriser la programmation « bas-niveau », c'est à dire proche de la machine. Le cours est plus précisément découpé en deux parties :

  1. 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 ;
  2. une initiation à la programmation en assembleur sur l'architecture Intel, qui sera axée sur la compréhension des mécanismes utilisés dans un compilateur pour générer systématiquement du code assembleur, et sur les conventions à respecter pour faire cohabiter des fonctions écrites en C et en assembleur.

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.

Evaluation

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.

Cette épreuve aura lieu le jeudi 4 juin de 14h à 16h (+ tiers-temps éventuel jusqu'à 16h40 pour les élèves concernés).

L'épreuve se déroulera comme suit :

En cas de problèmes techniques pour récupérer le sujet, durant l'épreuve ou pour rendre sa copie, les élèves devront en informer immédiatement l'enseignant sur Riot ou par mail.

L'épreuve portera principalement sur l'assembleur Intel 64 : les exercices seront très similaires à ceux réalisés en séances (distribution d'un programme principal en C et d'un Makefile, fonctions C à traduire littéralement en assembleur x86_64).

Des questions de cours pourront être posées sur la partie Intel 32 mais on ne demandera pas d'écrire du code x86_32 (il faudra être capable de comprendre du code fourni par contre).

L'épreuve se déroulera sous le principe d'une déclaration sur l'honneur : les élèves s'engagent à ne pas communiquer entre eux ni avec des personnes extérieures pendant toute la durée de l'épreuve, et à rendre un travail individuel.

Supports de cours

Rappels de C

Assembleur sur architecture Intel

En temps normal, chaque point correspondait à une séance de 3h. Vue la situation, les séances ont été dédoublées : chaque point correspond donc cette année à deux séances de 3h. Tous les supports sont mis à disposition dès le départ pour permettre à ceux qui iraient plus vite de s'avancer, mais le plus important est de prendre le temps nécessaire pour comprendre les notions.

Note : si en compilant les sources distribuées, vous obtenez une erreur à l'édition de liens du type R_X86_64_32S against symbol ... can not be used when making a PIE object, ouvrez le Makefile et ajoutez l'option -no-pie à la fin de la ligne LDFLAGS = ...

Mini-projet système

Cette partie projet est totalement facultative cette année : vous pouvez vous y lancer si vous avez fini le cours en avance, mais vous ne serez pas interrogés dessus lors de l'examen.

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.

Vous trouverez ci-dessous 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'ABI 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 fourni 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 :