TacOS  0.2
 Tout Structures de données Fichiers Fonctions Variables Définitions de type Énumérations Macros
kprocess.h
Aller à la documentation de ce fichier.
1 
29 #ifndef _KPROCESS_H_
30 #define _KPROCESS_H_
31 
32 #define USER_PROCESS_BASE 0x40000000
33 
34 #include <ksyscall.h>
35 #include <fd_types.h>
36 #include <signal_types.h>
37 #include <process_types.h>
38 #include <symtable.h>
39 #include <types.h>
40 #include <vmm.h>
41 
42 #define MAX_PROC 512
44 #define CPU_USAGE_SAMPLE_RATE 100
45 
49 #define PROCSTATE_IDLE 0
50 #define PROCSTATE_RUNNING 1
51 #define PROCSTATE_WAITING 2
52 #define PROCSTATE_SUSPENDED 3
53 #define PROCSTATE_TERMINATED 4
55 #define CURRENT_PROCESS -1
56 
57 /* Type d'exécution */
58 #define EXEC_ELF 0
59 #define EXEC_KERNEL 1
60 
64 typedef struct
65 {
66  char* name;
67  char* args;
68  char** envp;
70  int exec_type;
72  void* data;
74  Elf32_File* file;
75 
76  /* Données pour le chargement de l'elf */
77  int mem_size;
78  vaddr_t entry_point;
79 
80  uint32_t stack_size;
81  int priority;
82 
86 
87 struct _tty_struct_t;
88 
92 typedef struct process {
95  char* name;
97  //uint8_t priority; // Not used.
98 
99  /* Données dédiées au évaluation de perf */
100  long int user_time;
101  long int sys_time;
102  int current_sample;
103  int last_sample;
104 
105  /* Données propres au contexte du processus */
106  regs_t regs;
107 
108  /* Données utilisées pour les IO */
110 
111  struct page_directory_entry * pd;
112  struct virtual_mem *vm;
113 
114  signal_process_data_t signal_data;
115 
116  char *ctrl_tty;
118  /* Données liées au debug run-time du process */
119  symbol_table_t* symtable;
120 
125  int sem_wait;
126 
131 
136  struct process * children[MAX_PROC];
137 
138 } process_t;
139 
143 typedef struct _proclist_cell{
148 
158 int create_kprocess(char* name,
159  void* entry_point,
160  uint32_t stack_size);
161 
162 process_t* create_process(process_init_data_t* init_data);
170 int delete_process(int pid);
171 
172 
180 process_t* find_process(int pid);
181 
188 
195 
200 void clean_process_list();
201 
202 void sample_CPU_usage();
203 
207 SYSCALL_HANDLER1(sys_exit,uint32_t ret_value __attribute__ ((unused)));
208 
214 SYSCALL_HANDLER1(sys_getpid, uint32_t* pid);
220 SYSCALL_HANDLER1(sys_getppid, uint32_t* ppid);
221 
229 SYSCALL_HANDLER3(sys_exec, char *cmdline, char **environ, int *retval);
230 
238 SYSCALL_HANDLER3(sys_proc, uint32_t sub_func, uint32_t param1, uint32_t param2);
239 
245 SYSCALL_HANDLER1(sys_waitpid, int pid);
246 
250 void procfs_init();
251 
258 
259 #endif /* _K_PROCESS_H_ */
Page Directory Entry.
Definition: pagination.h:46
Structure représentant un processus.
Definition: kprocess.h:92
Definition: kprocess.h:143
uint16_t pid
Definition: kprocess.h:93
Definition: tty.h:61
struct _proclist_cell * prev
Definition: kprocess.h:146
process_t * get_next_process()
Retourne le processus suivant le processus courant dans la liste.
uint16_t ppid
Definition: kprocess.h:94
Structure qui caractérise un binaire elf.
Definition: elf.h:272
char ** envp
Definition: kprocess.h:68
char * name
Definition: kprocess.h:66
Types pour les signaux (en particulier les numéros de signaux).
uint8_t state
Definition: kprocess.h:96
Definition: process_types.h:34
Definition: kprocess.h:64
#define FOPEN_MAX
Definition: fd_types.h:35
void * data
Definition: kprocess.h:72
struct process process_t
Structure représentant un processus.
unsigned short int uint16_t
Definition: types.h:35
uint32_t get_proc_count()
Retourne le nombre de processus dans la liste.
Definition: kprocess.c:58
Definition: vmm.h:56
Definition: symtable.h:40
struct _proclist_cell * next
Definition: kprocess.h:145
SYSCALL_HANDLER1(sys_exit, uint32_t ret_value)
Syscall appelé lors de la fin d'exécution d'un process.
Definition: kprocess.c:570
process_t * find_process(int pid)
Cherche le process_t* en correspondant à un pid donné.
Definition: kprocess.c:89
int sem_wait
Definition: kprocess.h:125
int exec_type
Definition: kprocess.h:70
void procfs_init()
Initialisation du proc FS.
Definition: procfs.c:671
int create_kprocess(char *name, void *entry_point, uint32_t stack_size)
Crée un nouveau processus kernel. Crée un nouveau processus kernel et l'ajoute à la liste des process...
Definition: kprocess.c:403
Structures liées aux fichiers ouverts.
unsigned char uint8_t
Definition: types.h:34
int nb_children
Definition: kprocess.h:135
int sem_wait_child
Definition: kprocess.h:130
Definition: signal_types.h:40
uint32_t vaddr_t
Definition: types.h:38
struct _proclist_cell * proc_list
char * ctrl_tty
Definition: kprocess.h:116
unsigned long int uint32_t
Definition: types.h:36
#define MAX_PROC
Definition: kprocess.h:42
uint16_t ppid
Definition: kprocess.h:83
process_t * get_process_array(int i)
Récupère un process à partir de sa position dans le tableau.
Definition: kprocess.c:63
Definition: fd_types.h:91
int delete_process(int pid)
Retire un processus de la liste.
Definition: kprocess.c:94
char * args
Definition: kprocess.h:67
void clean_process_list()
Nettoie la liste des processus. Retire de la liste tous les processus en état PROCSTATE_TERMINATED.
process_t * process
Definition: kprocess.h:144
char * name
Definition: kprocess.h:95
SYSCALL_HANDLER3(sys_exec, char *cmdline, char **environ, int *retval)
Syscall pour exécuter un programme.
Definition: kprocess.c:624