Skip to content
Snippets Groups Projects
Commit 10eedbd8 authored by Gilles Grimaud's avatar Gilles Grimaud
Browse files

minor correction in the subject.

parent 85dd7590
No related branches found
No related tags found
No related merge requests found
...@@ -35,7 +35,7 @@ $(IMAGE): $(BINFILE) ...@@ -35,7 +35,7 @@ $(IMAGE): $(BINFILE)
grub-mkrescue --target=i386 -d /usr/lib/grub/i386-pc/ -o $(IMAGE) ./ grub-mkrescue --target=i386 -d /usr/lib/grub/i386-pc/ -o $(IMAGE) ./
run: run:
qemu-system-x86_64 -boot d -m 2048 -cdrom mykernel.iso -serial stdio qemu-system-x86_64 -boot d -m 2048 -cdrom mykernel.iso -curses
$(BINFILE): $(AOBJ) $(COBJ) $(BINFILE): $(AOBJ) $(COBJ)
$(LD) $(LDFLAGS) -Tlink.ld $^ -o $@ $(LD) $(LDFLAGS) -Tlink.ld $^ -o $@
......
File deleted
...@@ -7,8 +7,8 @@ Cela fait maintenant quelques années que vous écrivez des logiciels, et pourta ...@@ -7,8 +7,8 @@ Cela fait maintenant quelques années que vous écrivez des logiciels, et pourta
vous sont ceux qui n'ont encore jamais écrits un "premier logiciel", c'est-à-dire un logiciel qui vous sont ceux qui n'ont encore jamais écrits un "premier logiciel", c'est-à-dire un logiciel qui
s'exécute en premier, lorsque la machine démarre. C'est ce que nous allons faire maintenant. s'exécute en premier, lorsque la machine démarre. C'est ce que nous allons faire maintenant.
Vous trouverez en suivant ce lien [https://gitlab.univ-lille.fr/gilles.grimaud/my-kernel] Vous trouverez en suivant ce lien vers le [depot `my-kernel`](https://gitlab.univ-lille.fr/gilles.grimaud/my-kernel)
un dépot `my-kernel` qui vous propose un logiciel minimal. Le Makefile proposé compile le programe qui vous propose un logiciel minimal. Le Makefile proposé compile le programe
présent dans `src/main.c` et produit l'image iso d'un disque amorcable sur architecture x86. présent dans `src/main.c` et produit l'image iso d'un disque amorcable sur architecture x86.
Pour exécuter ce "premier logiciel" il vous faudra soit : Pour exécuter ce "premier logiciel" il vous faudra soit :
...@@ -23,7 +23,7 @@ pour démarrer une image iso en ligne de commande, nous vous recommandons l'util ...@@ -23,7 +23,7 @@ pour démarrer une image iso en ligne de commande, nous vous recommandons l'util
[qemu](https://www.qemu.org). [qemu](https://www.qemu.org).
```sh ```sh
qemu-system-x86_64 -boot d -m 2048 -cdrom mykernel.iso qemu-system-x86_64 -boot d -m 2048 -cdrom mykernel.iso -curses
``` ```
Cette commande est directement disponible dans le `Makefile` proposé avec : Cette commande est directement disponible dans le `Makefile` proposé avec :
...@@ -107,7 +107,7 @@ que le clavier est accéssible via deux registres associés aux port `0x60` et ` ...@@ -107,7 +107,7 @@ que le clavier est accéssible via deux registres associés aux port `0x60` et `
le premier est appelé _data port_, et qu'il peut être lu ou écrit, alors que le second est appelé le premier est appelé _data port_, et qu'il peut être lu ou écrit, alors que le second est appelé
_status register_ quand on le lit, et _command register_ quand on l'écrit. _status register_ quand on le lit, et _command register_ quand on l'écrit.
Par ailleur, le processeur clavier génère une interruption de niveau 0 quand une touche est Par ailleur, le processeur clavier génère une interruption de niveau 1 quand une touche est
pressée. pressée.
### Question 1.1 : mon premier premier hello world. ### Question 1.1 : mon premier premier hello world.
...@@ -141,7 +141,7 @@ implémentée dans `src/idt.c`). Nous de détaillons pas ici toutes les subtilit ...@@ -141,7 +141,7 @@ implémentée dans `src/idt.c`). Nous de détaillons pas ici toutes les subtilit
interruptions sur les architectures intel, mais tout peut être lu, dans `src/idt.c` et `src/idt0.s`. interruptions sur les architectures intel, mais tout peut être lu, dans `src/idt.c` et `src/idt0.s`.
Grace à `idt_setup_handler(i,fct)` qui est équivalent à `IRQ_VECTOR[i]=fct;` lorsque vous utilisiez Grace à `idt_setup_handler(i,fct)` qui est équivalent à `IRQ_VECTOR[i]=fct;` lorsque vous utilisiez
la librairie hardware de simulation du matériel, vous pouvez programmer une interruption, et la librairie hardware de simulation du matériel, vous pouvez programmer une interruption, et
notament une interruption timer (qui est donc ici, associé au niveau d'interruption 1). notament une interruption timer (qui est donc ici, associé au niveau d'interruption 0).
Par ailleur, notez que la gestion du verrouillage et du dévérouillage des interruptions est plus Par ailleur, notez que la gestion du verrouillage et du dévérouillage des interruptions est plus
compliquée, sur nos PC, que ne le laissait espérer l'interface de la librairie `hardware` utilisée en compliquée, sur nos PC, que ne le laissait espérer l'interface de la librairie `hardware` utilisée en
...@@ -160,21 +160,23 @@ tant que vous n'aurez pas effectué cette opération sur le controleur d'interru ...@@ -160,21 +160,23 @@ tant que vous n'aurez pas effectué cette opération sur le controleur d'interru
### Question 2.1 : Un ordonnancement préemptif. ### Question 2.1 : Un ordonnancement préemptif.
Nous Reutilisez la fonction de changement de contexte vue en cours d'ASE pour implémenter un Reutilisez la fonction de changement de contexte vue en cours d'ASE pour implémenter un
ordonnanceur de contexte préemptif minimaliste. La principale difficultée ici est d'adapter votre ordonnanceur de contexte préemptif minimaliste. La principale difficultée ici est d'adapter votre
logiciel pour qu'il n'est plus recours aux fonctions `malloc` et `free`, ni aux `_mask` et logiciel pour qu'il n'est plus recours aux fonctions `malloc` et `free`, ni aux `_mask` et
`IRQ_VECTOR` mais aux . `IRQ_VECTOR`. De plus le code démarré est en mode protégé 32bit et non 64, il faut donc utiliser
les registres `esp`,`ebp` et non `rsp` et `ebp`.
### Question 2.2 : Les fonctions `sem_up()` et `sem_down()`. ### Question 2.2 : Un premier démonstrateur.
A l'aide de votre mécanisme de sémaphore, réalisez un premier démonstrateur qui lance deux contextes.
Le premier affiche en boucle les charactères saisi au clavier, alors que le second affiche,
un compteur qui s'incrémente, en haut à droite de l'écran.
### Question 2.3 : Les fonctions `sem_up()` et `sem_down()`.
Importez les fonctions de gestions des sémaphores vues en cours d'ASE dans votre système. Importez les fonctions de gestions des sémaphores vues en cours d'ASE dans votre système.
Pensez (1) à proscrire toute utilisation du tas (pas de `malloc` ni de `free`) et (2) à utiliser Pensez (1) à proscrire toute utilisation du tas (pas de `malloc` ni de `free`) et (2) à utiliser
les instructions intel `cli` et `sti` pour garder vos sections critiques de code plutot que les les instructions intel `cli` et `sti` pour garder vos sections critiques de code plutot que les
`_mask` proposés par la librairie C. `_mask` proposés par la librairie C.
### Question 2.3 : Un premier démonstrateur.
A l'aide de votre mécanisme de sémaphore, réalisez un premier démonstrateur qui lance deux contextes.
Le premier affiche en boucle les charactères saisi au clavier, alors que le second affiche,
un compteur qui s'incrémente, en haut à droite de l'écran.
Partie 3. Implémenter getc() entre interruptions et sémaphores Partie 3. Implémenter getc() entre interruptions et sémaphores
......
No preview for this file type
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment