Skip to content
GitLab
Explore
Sign in
Primary navigation
Search or go to…
Project
M
my-kernel
Manage
Activity
Members
Labels
Plan
Issues
Issue boards
Milestones
Wiki
Code
Merge requests
Repository
Branches
Commits
Tags
Repository graph
Compare revisions
Snippets
Build
Pipelines
Jobs
Pipeline schedules
Artifacts
Deploy
Releases
Package registry
Model registry
Operate
Environments
Terraform modules
Monitor
Incidents
Analyze
Value stream analytics
Contributor analytics
CI/CD analytics
Repository analytics
Model experiments
Help
Help
Support
GitLab documentation
Compare GitLab plans
GitLab community forum
Contribute to GitLab
Provide feedback
Keyboard shortcuts
?
Snippets
Groups
Projects
Show more breadcrumbs
ASE-2021
my-kernel
Commits
10eedbd8
Commit
10eedbd8
authored
4 years ago
by
Gilles Grimaud
Browse files
Options
Downloads
Patches
Plain Diff
minor correction in the subject.
parent
85dd7590
No related branches found
No related tags found
No related merge requests found
Changes
4
Show whitespace changes
Inline
Side-by-side
Showing
4 changed files
Makefile
+1
-1
1 addition, 1 deletion
Makefile
src/main.o
+0
-0
0 additions, 0 deletions
src/main.o
sujet.md
+14
-12
14 additions, 12 deletions
sujet.md
sujet.pdf
+0
-0
0 additions, 0 deletions
sujet.pdf
with
15 additions
and
13 deletions
Makefile
+
1
−
1
View file @
10eedbd8
...
@@ -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
$@
...
...
This diff is collapsed.
Click to expand it.
src/main.o
deleted
100644 → 0
+
0
−
0
View file @
85dd7590
File deleted
This diff is collapsed.
Click to expand it.
sujet.md
+
14
−
12
View file @
10eedbd8
...
@@ -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
...
...
This diff is collapsed.
Click to expand it.
sujet.pdf
+
0
−
0
View file @
10eedbd8
No preview for this file type
This diff is collapsed.
Click to expand it.
Preview
0%
Loading
Try again
or
attach a new file
.
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Save comment
Cancel
Please
register
or
sign in
to comment