My Project
Chargement...
Recherche...
Aucune correspondance
tache.h
Aller à la documentation de ce fichier.
1
6#ifndef TACHES_DEF
7#define TACHES_DEF
8
9#include <manux/config.h> /* TAILLE_PAGE */
10
11#include <manux/types.h>
12#include <manux/interruptions.h>
13#include <manux/segment.h> /* Pour la descriptor table */
14#include <manux/fichier.h>
15
16#ifdef MANUX_APPELS_SYSTEME
17# include <manux/appelsysteme.h>
18#endif // MANUX_APPELS_SYSTEME
19
20/*
21 * Taille de la Local Descriptor Table de chaque tâche
22 */
23#define LDT_NB_BYTES 1024 /* WARNING, pas top */
24
25/*
26 * Les différents états possibles pour une tâche
27 */
28typedef enum _EtatTache {
29 Tache_En_Cours = 1, // la tâche courante
30 Tache_Prete = 2, // les tâches en attente du processeur
31 Tache_Bloquee = 3, // sur un sémaphore par ex
34
35/*
36 * Définition du type du "main" d'une nouvelle tâche
37 */
38typedef void (CorpsTache(void));
39
40/*
41 * Définition de la structure TSS (Task State Segment)
42 * WARNING : à mettre dans i386/processeur.h
43 */
44typedef struct _IntelTSS {
45 uint16_t TSSPrecedent; /* Pour le chaînage */
56 uint32_t CR3; /* Page Directory Base Register */
61 ESI, EDI; /* Les registres ! */
62 uint16_t ES; /* Le sélecteur de segment */
64 uint16_t CS; /* Le sélecteur de segment */
66 uint16_t SS; /* Le sélecteur de segment */
68 uint16_t DS; /* Le sélecteur de segment */
70 uint16_t FS; /* Le sélecteur de segment */
72 uint16_t GS; /* Le sélecteur de segment */
74 uint16_t LDT; /* La Local Descriptor Table */
79
83typedef struct _Tache {
86 uint16_t indiceTSSDescriptor; /* Indice du TSS dans la GDT */
87
90 void * tailleMemoire; /* en octets */
91
92 CorpsTache * fonctionPrincipale;
93
94 uint8_t nonPreemptible; //< Permet de la synchronisation
95
96#ifdef MANUX_TACHE_CONSOLE
97 struct _Console * console;
98#endif
99
100#ifdef MANUX_FICHIER
101 Fichier * fichiers[MANUX_NB_MAX_FICHIERS];
102 int nbFichiersOuverts; // Pour faciliter la gestion
103#endif
104 uint32_t nbActivations; // Décompte du nombre d'activations
105 Temps tempsExecution; // Cumul du temps d'exécution
106
107#if defined(MANUX_APPELS_SYSTEME) && defined(MANUX_AS_AUDIT)
108 uint32_t nbAppelsSystemeIn[NB_MAX_APPELS_SYSTEME]; //< Décompte du nombre d'AS
109 uint32_t nbAppelsSystemeOut[NB_MAX_APPELS_SYSTEME]; //< Décompte du nombre d'AS
110#endif
111
113
118extern Tache * tacheCourante;
119
127Tache * tacheCreer(CorpsTache corpsTache);
128
129#ifdef MANUX_TACHE_CONSOLE
133void tacheSetConsole(Tache * tache, struct _Console * cons);
134#endif
135
136void basculerVersTache(Tache * tache);
137/*
138 * Exécuter une tâche. A l'utilisation exclusive du scheduler
139 */
140
142/*
143 * Implantation de l'appel système fork
144 */
145
146#ifdef MANUX_FICHIER
147
155int tacheAjouterFichiers(Tache * tache, int n, Fichier * fichiers[], int * fds);
156#endif
157
161void afficherEtatUneTache(Tache * tache);
162
166void afficherEtatTaches(void);
167
168#endif
#define NB_MAX_APPELS_SYSTEME
unsigned long uint32_t
Definition types.h:20
uint16_t TacheID
Definition types.h:61
unsigned short uint16_t
Definition types.h:16
unsigned char uint8_t
Definition types.h:12
int32_t Temps
Definition types.h:71
Structure d'une console.
Definition console.h:37
: Qu'est-ce qu'un fichier ouvert du point de vue du noyau ?
Definition fichier.h:46
uint32_t ECX
Definition tache.h:59
uint16_t FS
Definition tache.h:70
uint16_t Reserve11
Definition tache.h:75
uint16_t Reserve4
Definition tache.h:55
uint32_t ESP2
Definition tache.h:53
uint16_t SS1
Definition tache.h:51
uint16_t Reserve1
Definition tache.h:46
uint16_t SS0
Definition tache.h:48
uint32_t EDI
Definition tache.h:61
uint16_t TSSPrecedent
Definition tache.h:45
uint16_t Reserve6
Definition tache.h:65
uint16_t Reserve10
Definition tache.h:73
uint32_t EBX
Definition tache.h:60
uint16_t Reserve12
Definition tache.h:76
uint16_t Reserve3
Definition tache.h:52
uint32_t EAX
Definition tache.h:59
uint16_t Reserve7
Definition tache.h:67
uint16_t GS
Definition tache.h:72
uint32_t CR3
Definition tache.h:56
uint32_t ESP
Definition tache.h:60
uint16_t SS
Definition tache.h:66
uint32_t ESI
Definition tache.h:61
uint32_t ESP1
Definition tache.h:50
uint32_t EDX
Definition tache.h:59
uint16_t Reserve2
Definition tache.h:49
uint32_t EIP
Definition tache.h:57
uint16_t DS
Definition tache.h:68
uint32_t ESP0
Definition tache.h:47
uint32_t EBP
Definition tache.h:60
uint16_t Reserve5
Definition tache.h:63
uint32_t EFLAGS
Definition tache.h:58
uint16_t CS
Definition tache.h:64
uint16_t Reserve9
Definition tache.h:71
uint16_t SS2
Definition tache.h:54
uint16_t IOMBA
Definition tache.h:77
uint16_t LDT
Definition tache.h:74
uint16_t Reserve8
Definition tache.h:69
uint16_t ES
Definition tache.h:62
: Définition du type décrivant une tache.
Definition tache.h:83
EtatTache etat
Definition tache.h:89
DescriptorTable * ldt
Definition tache.h:85
CorpsTache * fonctionPrincipale
Definition tache.h:92
uint32_t nbActivations
Definition tache.h:104
Temps tempsExecution
Definition tache.h:105
uint16_t indiceTSSDescriptor
Definition tache.h:86
void * tailleMemoire
Definition tache.h:90
TacheID numero
Definition tache.h:88
uint8_t nonPreemptible
Definition tache.h:94
IntelTSS tss
Definition tache.h:84
#define MANUX_NB_MAX_FICHIERS
_EtatTache
Definition tache.h:28
@ Tache_Bloquee
Definition tache.h:31
@ Tache_Terminee
Definition tache.h:32
@ Tache_En_Cours
Definition tache.h:29
@ Tache_Prete
Definition tache.h:30
void basculerVersTache(Tache *tache)
Definition tache.c:38
TacheID sysFork(void)
Tache * tacheCourante
Chaque tâche pourra voir les infos la concernant via cette variable.
enum _EtatTache EtatTache
struct _Tache Tache
: Définition du type décrivant une tache.
void afficherEtatTaches(void)
Affichage des tâches.
Definition tache.c:373
typedef void(CorpsTache(void))
Tache * tacheCreer(CorpsTache corpsTache)
Création d'une nouvelle tâche.
Definition tache.c:113
void afficherEtatUneTache(Tache *tache)
Affichage de l'état d'une tâche à des fins de debug.
Definition tache.c:353
struct _IntelTSS IntelTSS