Giter Site home page Giter Site logo

obonaventure / systemesinformatiques Goto Github PK

View Code? Open in Web Editor NEW
44.0 8.0 68.0 90.63 MB

Cours de Systèmes informatiques (C, Unix/Linux, ...)

License: Other

Python 11.89% HTML 34.44% C 41.98% Makefile 6.05% Shell 0.37% CSS 3.27% JavaScript 1.96% C++ 0.03%
c linux ebook restructured-text teaching-materials

systemesinformatiques's Introduction

Systèmes Informatiques

Build Status

Ce repository git est destiné à contenir les notes et exercices du cours de Systèmes informatiques 1 (C, Unix/Linux, ...) donné en deuxième année aux étudiants ingénieurs option informatique et aux étudiants en sciences informatiques de l'UCL. Il sera mis régulièrement à jour et les étudiants sont encouragés à soumettre des bugs reports, envoyer des patches ( notamment pour la section relative aux outils) ou proposer de nouvelles questions à choix multiples.

Ce cours est écrit en restructured text et est distribué sous une licence creative commons https://creativecommons.org/licenses/by-sa/3.0/fr/

Des versions HTML, pdf et epub sont disponibles via https://sites.uclouvain.be/SystInfo

Compilation

Les notes sont écrites en restructured text et peuvent être transformées en un document au format HTML, epub ou PDF en utilisant le logiciel sphinx. Pour faciliter cette compilation, une configuration vagrant est reprise dans le fichier Vagrantfile se trouvant à la racine du projet. Vagrant est un logiciel fonctionnant sur Linux, Windows et MacOS qui permet d'automatiser et de faciliter la création de machines virtuelles supportées notamment par Virtualbox.

Pour démarrer votre environnement Vagrant, commencez par installer Vagrant et Virtualbox. Vagrant utilise le Vagrantfile pour créer les machines virtuelles. Ce dernier marque le dossier racine du projet et décrit le type de machine ainsi que les dépendances logicielles nécessaires au projet.

Plutôt que de créer une machine virtuelle à partir de zéro, Vagrant utilise une image de base à partir de laquelle créer la nouvelle machine virtuelle. Dans notre cas, le projet est configuré pour utiliser l'image "hashicorp/precise32" via la ligne config.vm.box = "hashicorp/precise32" dans le Vagrantfile. Si cette image n'est pas encore présente sur votre machine, elle sera automatiquement téléchargée lors du lancement de la machine virtuelle.

Pour démarrer votre environnement Vagrant, exécutez la commande vagrant up depuis le répertoire racine du projet. Cette commande télécharge toutes les dépendances nécessaires, démarre et configure la machine virtuelle. Lorsqu'elle termine, vous pouvez exécuter la commande vagrant ssh pour démarrer une session SSH avec la machine virtuelle nouvellement créée.

Cette machine virtuelle ne fournit pas d'interface graphique et vous serez donc contraints d'intéragir avec cette dernière en ligne de commande. Sur cette machine virtuelle, vous trouverez le répertoire /vagrant qui est en réalité un dossier partagé avec le répertoire racine du projet sur la machine host. Vagrant se charge de synchroniser automatiquement tous les changements à ce dossier depuis et vers la machine virtuelle. Vous n'êtes donc pas contraints de travailler sur le projet depuis le terminal à travers une session SSH. Vous pouvez très bien utiliser votre éditeur de texte favori sur votre machine host pour modifier n'importe quel fichier du projet. Les changements seront alors automatiquement synchronisés avec la machine virtuelle. Pour vous en convaincre, créez un nouveau fichier et vérifiez qu'il apparaît bien à la fois sur votre machine host et dans le répertoire /vagrant de la machine virtuelle.

Vous êtes maintenant en mesure de compiler le projet sous différents formats (consultez le Makefile pour plus d'informations). Vous pouvez notamment le compiler au format HTML avec make html, au format epub avec make epub ou encore au format PDF avec make latexpdf pour créer les fichiers LaTeX à compiler à l'aide de pdflatex. Le projet compilé est alors accessible dans le répertoire _build/nom_du_format.

Finalement, lorsque que vous avez terminé de travailler sur le projet, vous pouvez exécuter la commande vagrant destroy pour supprimer toutes les traces de la machine virtuelle précédemment créée.

Comment créer de nouvelles questions à choix multiples

Une des améliorations récentes aux notes du cours reprises sur ce repository git est le support de questions à choix multiples. Ces questions à choix multiples sont écrites grâce à une petite extension à https://www.sphinx-doc.org qui est intégrée au projet. Plusieurs dizaines de questions à choix multiples ont déjà étés écrites et les étudiants sont invités à proposer de nouvelles questions en s'appuyant sur les difficultés qu'ils ont rencontré en préparant les travaux pratiques du cours ou en révisant la théorie.

Une bonne question à choix multiples doit répondre à plusieurs critères :

  • elle doit être bien formulée et facilement compréhensible par les étudiants qui vont la lire
  • elle doit avoir plusieurs réponses correctes possibles. Ce point est nécessaire car les questions à choix multiples affichées à travers un script javascript dans les pages HTML qui présente une réponse positive et n réponses négatives au lecteur. La réponse positive et les réponses négatives sont à chaque fois choisies et présentées dans un ordre aléatoire.
  • les réponses négatives (au minimum de trois) doivent si possible être accompagnées de commentaires qui permettent à l'étudiant(e) qui les lit de bien comprendre l'erreur qu'il(elle) a fait et donc apprendre de ses erreurs

De nombreux exemples de questions sont disponibles dans le répertoire Exercices/mcq-ex. Un exemple illustrant la façon dont il faut écrire les questions en restructured text est disponible dans le fichier Exercices/mcq-ex/revision.rst. Les étudiants sont invités à repartir de cet exemple pour proposer de nouvelles questions.

systemesinformatiques's People

Contributors

ancailliau avatar anpar avatar aumassart avatar bhesmans avatar blegat avatar donaschmi avatar dsarkozi avatar fduchene avatar francoismichel avatar gregoryvds avatar jdewasseige avatar joker018 avatar magalii avatar matttbe avatar mon-ouie avatar obonaventure avatar peiffap avatar qdeconinck avatar rodescamps avatar screami avatar target0 avatar tdestouches avatar tlibioulle avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

systemesinformatiques's Issues

_exit link not working

Les liens à _exit(2) ne marchent pas à cause le l'underscore.
Dans la doc, il est mis

If you have an underscore within the label/name, you got to escape it with a ‘\’ character.

J'ai essayé, ça ne marche pas :/

CM3

Bonjour,

Je signale juste quelques petites fautes de frappe/oubli de mot, que j'ai remarqués dans la partie du syllabus couverte par le dernier cours magistral.

  • une bloc
  • a dresse
  • la premières
  • gènant
  • c'est dans cette que

Il suffit de faire une recherche sur la page http://sinf1252.info.ucl.ac.be/Theorie/C/malloc/ pour trouver où elles se trouvent.

Ajouter un exercice avec gdb

Pour le premier projet, beaucoup d'étudiants ignoraient l'existance de gdb pour débugger leur code. Il faudrait rajouter un exercice (en semaine 3 avec les pointeurs?) qui leur introduirait gdb avec un code erroné.

Various fixes

Suggestions de Damien François

  • p6, exemples en Bash: la syntaxe avec le double crochet "if [[ ]] ; then " est préférée (vois par exemple https://google-styleguide.googlecode.com/svn/trunk/shell.xml, section 'Features and Bugs"). Par ailleurs, l'exemple avec grep serait plutôt écrit if grep -q "$1" "$2" ; then pour éviter de créer plus de processus que nécessaire, et se prémunir de problèmes en cas d'espace dans le nom de fichier ou dans la chaine de caractère à retrouver.

  • p8 et p13: le tableau "Pages de manuel" se trouve en double, une fois sur chaque page mentionnée.

  • p18, phrase Les compilateurs récents qui supportent [C99] permettent l’utilisation de tableaux dont la taille n’est connue qu’à l’exécution. Nous en reparlerons ultérieurement.: Je n'ai plus vu de mention de cela spécifiquement dans la suite (mais ça m'a peut-être échappé

  • p25, snippets code en C: est -ce que le type de numerator et denomator dans la struct fraction ne devrait pas être int?

  • p41: l'exemple illustrant la zone mémoire 'heap' est une 'stack'. Ensuite vient la description complète de la 'stack', mais elle est déjà mentionnée avant. Est-ce que il n'y a pas un risque de confusion entre la notion de stack : zone mémoire d'une processus et la notion de stack - structure de données dynamique ? Peut-être une note attirant l'attention du lecteur sur la distinction entre les deux serait utile?

  • p50 phrases Le premier argument est une pointeur vers la chaîne de caractères à convertir. Le troisième argument est la base utilisée pour cette conversion: Pourquoi ne pas parler du second argument aussi, même brièvement?

  • p60, deuxième paragraphe: à noter que les processeurs ont maintenant également des registres vectoriels de 256 voir 512 bits.

  • p71: utilisation du mot 'dédicacées' ? plutôt que 'dédiées' ?

  • p84: l'exemple pourrait, pour plus de clarté, préciser '#define NTHREADS 4' ou équivalent, et la phrase 'La variable global est stockée dans une zone mémoire qui est accessibles aux deux threads. Appelons-les T1 et T2." devrait tenir compte du fait qu'au dessus, l'exemple comporte 4 threads, pas 2.

  • p117 Figure 1.15: on dirait que le rst n'est pas interprété dans le caption

  • p118 Note de bas de page: en fait gcc cherche dans le path mentionné par LIBRARY_PATH. LD_LIBRARY_PATH est utilisé au run time. (et la construction 'cherche après' est familière, 'cherche' tout court serait préférable) à mon avis

    -p124 "Un processus qui lance un processus fils avec fork(2) doit attendre la terminaison de son processus fils en utilisant waitpid(2).": a noter que le processus qui lance un deamon va intentionnellement se terminer avant son fils

    -p176 "Les tableaux ci-dessous présentent les caractéristiques techniques de deux dispositifs de stockage 56 57 à titre d’exemple." : Les tableaux mentionnés semblent absents.

Makefile TAB

Une source de confusion fréquente pour le Makefile est l'obligation d'utiliser des tabulations et non des espaces. La plupart des éditeurs de texte le font automatiquement mais ne serait-ce pas une bonne idée de le mentionner dans la partie outil ?

Outils : GDB

Le lien de l'archive à télécharger : src/gdb.c contient peut-ếtre une erreur. Après avoir téléchargé, il y a simplement un fichier gdb.c avec une fonction main, iter et calc sans Makefile :
gdb.txt

QCM Semaine 10

Il n'y a pas de QCM prévus pour la semaine 10, il faudrait en ajouter et toute contribution est la bienvenue.

missing word in fichiers-mappes-en-memoire

Dans Theorie/MemoireVirtuelle/vmem/#fichiers-mappes-en-memoire, dans la description de MAP_SHARED, la dernière phrase commence par

Si un processus veut être des écritures sur disque des modifications qu'il a fait à un fichier mappé un mémoire

Il me semple qu'il manque un mot.

Solutions QCM 5

Bonjour,

J'ai des doutes vis-à-vis d'une question du QCM de la semaine 5. Je pense que la question pourrait être imprécise.
La question demande de choisir laquelle des fonctions proposées ne modifie pas la valeur de errno

Une proposition définie comme correcte est malloc()
Dans le manuel annexé au site, il est écrit que selon le standard Unix98, malloc change la valeur de errno.

Manuel malloc

Peut-être que ce comportement pourrait être annoté à coté de "Voir le manuel"

Une autre proposition définie comme incorrecte est pthread_join()
Comme on peut lire dans la définition du standard IEEE Std 1003.1 édition 2013 collée ci-dessous.
À ce jour, le résultat d'une erreur d'exécution de pthread_join() est toujours indéfini. Nous n'avons aucune certitude que errno va changer.

Norme IEEE 1003.1

http://pubs.opengroup.org/onlinepubs/9699919799/functions/pthread_join.html

Tableaux manquants

Je pense qu'une erreur s'est introduite dans le fichier ./Theorie/MemoireVirtuelle/vmem.rst dans la section Fonctionnement de la mémoire virtuelle.

Les tableaux ci-dessous présentent les caractéristiques techniques de deux dispositifs de stockage [2] [3] à titre d’exemple.

La mémoire virtuelle utilise elle une unité intermédiaire (...)

Le texte stipule des tableaux comparatifs mais rien de semblable ne se trouve sur la page. Je suppose qu'ils ont été oubliés par mégarde, ou alors m'ont-ils échappés ?

QCM Makefile

Bonjour,

Je suis en train de relire les QCMs et j'ai constaté notamment des liens vers la bibliographie non établis. L'idéal serait de pouvoir compiler le .html pour me permettre de vérifier si le lien fonctionne correctement avant de faire un pull request.

C'est normalement le rôle des Makefile présents dans chaque dossier de QCM, mais ceux-ci font appel à un script rst2html.py introuvable dans le repository.

Est-il en cours d'écriture ? Merci de me tenir au courant.

Duplication code dans le syllabus

Bonjour,

Il y a un 2 fois le même morceau de code dans le syllabus dans la partie "Systèmes de fichiers".

Il me semble que la première occurrence devrait être remplacée par un autre morceau de code. Elle se trouve après la phrase : "L’extrait de code ci-dessous permet de lister tous les fichiers présents dans le répertoire name."
En effet, l'exemple qui nous permet de lister tous les fichiers du répertoire est introuvable.

Merci d'en prendre note,

Léonard Julémont

QCM 2 Question 5

Il me semble qu'aucune proposition n'est bonne, la troisième est la plus proche et j'ai d'ailleurs eu bon en la sélectionnant mais je pense qu'il faudrait remplacer

unsigned char temp1, temp2;
temp1=temp1 << 4;
temp2=temp2 >> 4;
c= temp2|temp1;

par

unsigned char temp1, temp2;
temp1=c << 4;
temp2=c >> 4;
c= temp2|temp1;

setjmp invalidates jmp_buf when function returns

Dans la doc, il est mis pour setjmp que

The stack context will be invalidated if the function which called setjmp() returns.

Pourtant, dans l'exemple du syllabus, on a

  f();
  g();

comme c'est dans f qu'on fait setjmp et dans g qu'on fait longjmp, f a déjà retourné lorsqu'on appelle longjmp.

Code un shell minimaliste

Ecrire un shell minimaliste dans le cadre d'un TP

Redirections, comment les supporter dans le shell

Typo dans "Gestion des Processus"

Dans le premier paragraphe, il y a un problème avec "par le système d'exploitation via son :term:pid". pid ne s'affiche pas correctement.

fasm ne compile pas avec LaTeX

Lorsqu'on répare la référence avec fasm, make latexpdf ne marche plus :(
Je pense que c'est dû au block-quote dans fasm. A-t-on le droit d'en mettre un ? Ou est-ce un bug de sphinx ?

Introduction à bash

Une petite démonstration (au cours magistral par exemple ou en TP avec
un projo par les tuteurs) d'utilisation de la ligne de commande
pourrait bien aider, surtout en début de quadri.
Typiquement quelques trucs pratiques qu'on leur apprends au fur et à mesure:
TAB complétion, flèche haut, CTRL+C, q (pour less), ESC+:wq (vim),
CTRL+R (recherche incrémentale), CTRL+Z/fg/bg/&, etc
C'est évidemment fort lié à la première séance, à laquelle on pourrait
peut-être intégrer ce genre de choses au niveau des exercices.

Exercice 3 semaine 12 - clarification?

Dans l'exercice suivant:

Lorsque l'on utilise l'appel système shmat(2)_ avec NULL comme deuxième argument, le système d'exploitation choisit l'adresse à laquelle le segment de mémoire va être attaché. Cela pose des difficultés si l'on veut stocker des pointeurs en mémoire partagée. Un étudiant propose de d'abord allouer la zone mémoire avec malloc(3)_ et d'ensuite attacher le segment de mémoire à cet endroit. Il a réalisé un test avec un processus père et son fils et les deux segments de mémoire partagée se retrouvent à la même adresse. Il en conclut que cela permet de résoudre le problème. Qu'en pensez-vous ?

La partie suivante n'est pas claire:

Un étudiant propose de d'abord allouer la zone mémoire avec malloc(3)_ et d'ensuite attacher le segment de mémoire à cet endroit.

Quel problème veut-on illustrer? La plupart des étudiants de mon TP avaient compris que la zone mémoire partagée allait shadow la zone mémoire réservée par le malloc(3)_. Ne voulait-on pas plutôt partager le pointeur retourné par malloc(3)_ dans la zone mémoire partagée pour discuter des problèmes avec les adresses virtuelles entre les processus? Dans ce cas-ci, je propose de modifier après la précédente phrase avec un texte du genre

..la zone mémoire avec malloc(3)_ et d'ensuite attacher le segment de mémoire. Il écrit ensuite l'adresse retournée par malloc(3)_ dans la zone de mémoire partagée attachée.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.