/* Copyright (C) 2008 Emmanuel Varoquaux This file is part of XOS. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ #ifndef CURRENT_H #define CURRENT_H #include struct proc_struct; struct proc_group_struct; struct registers_struct; struct interrupted_instruction_struct; struct file_descr_struct; /* nature */ int is_idle(); /* attributs */ void change_set_proc_group(struct proc_group_struct *proc_group); int change_create_proc_group(); int change_wd(const char *fs_path); /* descripteurs de fichiers */ int alloc_fd(int start, struct file_descr_struct *file_descr, int *fd); void free_fd(int fd); struct file_descr_struct *get_file_descr(int fd); /* programme */ int exec(const char *fs_filename, char *const fs_argv[], char *const fs_envp[], struct registers_struct *registers, struct interrupted_instruction_struct *interrupted_instruction, int *status); int sbrk(int increment, unsigned long *brk); /* fils */ int fork(const struct registers_struct *registers, const struct interrupted_instruction_struct *interrupted_instruction); int is_child(const struct proc_struct *proc); int change_set_child_proc_group(struct proc_struct *child, struct proc_group_struct *proc_group); int change_create_child_proc_group(struct proc_struct *child); int wait(struct proc_struct *child, int *status, int options); int wait_group_any(struct proc_group_struct *proc_group, int *status, int options); int wait_any(int *status, int options); /* orphelins */ int is_orphaned_proc_group(const struct proc_group_struct *proc_group); void reap_orphan_zombies(); /* terminaison */ void exit(int code) __attribute__ ((noreturn)); void abort(int sig) __attribute__ ((noreturn)); /* divers */ void *memory_map(void *addr, unsigned int len, int prot, int fd, long off); int memory_unmap(void *addr, unsigned int len); int memory_protect(void *addr, unsigned int len, int prot); int handle_page_fault(int cause, int access, unsigned long stack_top, unsigned long laddr); void yield(); #endif