| 1 | /*
|
|---|
| 2 | * syscall.h - kernel services definition
|
|---|
| 3 | *
|
|---|
| 4 | * Author Ghassan Almaless (2007,2008,2009,2010,2011,2012)
|
|---|
| 5 | * Alain Greiner (2016)
|
|---|
| 6 | *
|
|---|
| 7 | * Copyright (c) UPMC Sorbonne Universites
|
|---|
| 8 | *
|
|---|
| 9 | * This file is part of ALMOS-MKH.
|
|---|
| 10 | *
|
|---|
| 11 | * ALMOS-MKH is free software; you can redistribute it and/or modify it
|
|---|
| 12 | * under the terms of the GNU General Public License as published by
|
|---|
| 13 | * the Free Software Foundation; version 2.0 of the License.
|
|---|
| 14 | *
|
|---|
| 15 | * ALMOS-MKH is distributed in the hope that it will be useful, but
|
|---|
| 16 | * WITHOUT ANY WARRANTY; without even the implied warranty of
|
|---|
| 17 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
|---|
| 18 | * General Public License for more details.
|
|---|
| 19 | *
|
|---|
| 20 | * You should have received a copy of the GNU General Public License
|
|---|
| 21 | * along with ALMOS-MKH; if not, write to the Free Software Foundation,
|
|---|
| 22 | * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
|
|---|
| 23 | */
|
|---|
| 24 |
|
|---|
| 25 | #ifndef _SYSCALL_H_
|
|---|
| 26 | #define _SYSCALL_H_
|
|---|
| 27 |
|
|---|
| 28 | /******************************************************************************************
|
|---|
| 29 | * This enum defines the system calls index.
|
|---|
| 30 | * It must be kept consistant with the syscall vector defined in sys_vector.c file.
|
|---|
| 31 | *****************************************************************************************/
|
|---|
| 32 | enum
|
|---|
| 33 | {
|
|---|
| 34 | SYS_EXIT, /* 0 */
|
|---|
| 35 | SYS_MMAP, /* 1 */
|
|---|
| 36 | SYS_CREATE, /* 2 */
|
|---|
| 37 | SYS_JOIN, /* 3 */
|
|---|
| 38 | SYS_DETACH, /* 4 */
|
|---|
| 39 | SYS_YIELD, /* 5 */
|
|---|
| 40 | SYS_SEMAPHORE, /* 6 */
|
|---|
| 41 | SYS_COND_VAR, /* 7 */
|
|---|
| 42 | SYS_BARRIER, /* 8 */
|
|---|
| 43 | SYS_RWLOCK, /* 9 */
|
|---|
| 44 | SYS_SLEEP, /* 10 */
|
|---|
| 45 | SYS_WAKEUP, /* 11 */
|
|---|
| 46 | SYS_OPEN, /* 12 */
|
|---|
| 47 | SYS_CREAT, /* 13 */
|
|---|
| 48 | SYS_READ, /* 14 */
|
|---|
| 49 | SYS_WRITE, /* 15 */
|
|---|
| 50 | SYS_LSEEK, /* 16 */
|
|---|
| 51 | SYS_CLOSE, /* 17 */
|
|---|
| 52 | SYS_UNLINK, /* 18 */
|
|---|
| 53 | SYS_PIPE, /* 19 */
|
|---|
| 54 | SYS_CHDIR, /* 20 */
|
|---|
| 55 | SYS_MKDIR, /* 21 */
|
|---|
| 56 | SYS_MKFIFO, /* 22 */
|
|---|
| 57 | SYS_OPENDIR, /* 23 */
|
|---|
| 58 | SYS_READDIR, /* 24 */
|
|---|
| 59 | SYS_CLOSEDIR, /* 25 */
|
|---|
| 60 | SYS_GETCWD, /* 26 */
|
|---|
| 61 | SYS_CLOCK, /* 27 */
|
|---|
| 62 | SYS_ALARM, /* 28 */
|
|---|
| 63 | SYS_DMA_MEMCPY, /* 29 */
|
|---|
| 64 | SYS_UTLS, /* 30 */
|
|---|
| 65 | SYS_SIGRETURN, /* 31 */
|
|---|
| 66 | SYS_SIGNAL, /* 32 */
|
|---|
| 67 | SYS_SET_SIGRETURN, /* 33 */
|
|---|
| 68 | SYS_KILL, /* 34 */
|
|---|
| 69 | SYS_GETPID, /* 35 */
|
|---|
| 70 | SYS_FORK, /* 36 */
|
|---|
| 71 | SYS_EXEC, /* 37 */
|
|---|
| 72 | SYS_GETATTR, /* 38 */
|
|---|
| 73 | SYS_PS, /* 39 */
|
|---|
| 74 | SYS_MADVISE, /* 40 */
|
|---|
| 75 | SYS_PAGEINFO, /* 41 */
|
|---|
| 76 | SYS_STAT, /* 42 */
|
|---|
| 77 | SYS_MIGRATE, /* 43 */
|
|---|
| 78 | SYS_SBRK, /* 44 */
|
|---|
| 79 | SYS_RMDIR, /* 45 */
|
|---|
| 80 | SYS_FTIME, /* 46 */
|
|---|
| 81 | SYS_CHMOD, /* 47 */
|
|---|
| 82 | SYS_FSYNC, /* 48 */
|
|---|
| 83 | SYS_GET_TOD, /* 49 */
|
|---|
| 84 | SYS_TIMES, /* 50 */
|
|---|
| 85 | SYSCALLS_NR,
|
|---|
| 86 | };
|
|---|
| 87 |
|
|---|
| 88 | /********************************************************************************************/
|
|---|
| 89 | /******************** Process related system calls ***************************************/
|
|---|
| 90 | /********************************************************************************************/
|
|---|
| 91 |
|
|---|
| 92 | /*********************************************************************************************
|
|---|
| 93 | * This function TODO
|
|---|
| 94 | ********************************************************************************************/
|
|---|
| 95 | int sys_getpid();
|
|---|
| 96 |
|
|---|
| 97 | /*********************************************************************************************
|
|---|
| 98 | * This function implement the "fork" system call.
|
|---|
| 99 | * The calling process descriptor (parent process), and the associated thread descriptor are
|
|---|
| 100 | * replicated in the same cluster as the calling thread, but the new process (child process)
|
|---|
| 101 | * is registered in another target cluster, that will become the process owner.
|
|---|
| 102 | * The child process and the associated main thread will be migrated to the target cluster
|
|---|
| 103 | * later, when the child process makes an "exec" or any other system call.
|
|---|
| 104 | * The target cluster depends on the "fork_user" flag and "fork_cxy" variable that can be
|
|---|
| 105 | * stored in the calling thread descriptor by the specific fork_place() system call.
|
|---|
| 106 | * If not, the sys_fork() function makes a query to the DQDT to select the target cluster.
|
|---|
| 107 | *********************************************************************************************
|
|---|
| 108 | * @ returns child process PID if success / returns -1 if failure
|
|---|
| 109 | ********************************************************************************************/
|
|---|
| 110 | int sys_fork();
|
|---|
| 111 |
|
|---|
| 112 | /*********************************************************************************************
|
|---|
| 113 | * This function implement the exec system call.
|
|---|
| 114 | * It is executed in the client cluster, but the new process descriptor and main thread
|
|---|
| 115 | * must be created in a server cluster, that is generally another cluster, using a RPC.
|
|---|
| 116 | * - If the server_cluster is the client cluster, call directly make_exec() in local
|
|---|
| 117 | * mode, to change the process image and launch a new thread in local cluster.
|
|---|
| 118 | * finally, the old thread is deleted.
|
|---|
| 119 | * - If the target_cluster is remote, call rpc_process_exec_client() to execute the
|
|---|
| 120 | * make_exec() in remote mode on the remote cluster, to create a new process
|
|---|
| 121 | * descriptor and a new thread on remote cluster. Finally, both the local
|
|---|
| 122 | * process descriptor and the local thread descriptor are deleted.
|
|---|
| 123 | * In both case this function build an exec_info_t structure containing all informations
|
|---|
| 124 | * required to build the new process descriptor and the associated thread, including
|
|---|
| 125 | * the mode (local/remote).
|
|---|
| 126 | * @ filename : string pointer on .elf filename (virtual pointer in user space)
|
|---|
| 127 | * @ argv : array of strings on process arguments (virtual pointers in user space)
|
|---|
| 128 | * @ envp : array of strings on Renvironment variables (virtual pointers in user space)
|
|---|
| 129 | * @ returns O if success / returns non-zero if error.
|
|---|
| 130 | ********************************************************************************************/
|
|---|
| 131 | int sys_exec( char * filename,
|
|---|
| 132 | char ** argv,
|
|---|
| 133 | char ** envp );
|
|---|
| 134 |
|
|---|
| 135 |
|
|---|
| 136 | /*********************************************************************************************
|
|---|
| 137 | * This function TODO
|
|---|
| 138 | ********************************************************************************************/
|
|---|
| 139 | int sys_ps( uint32_t cmd,
|
|---|
| 140 | pid_t pid,
|
|---|
| 141 | uint32_t tid );
|
|---|
| 142 |
|
|---|
| 143 |
|
|---|
| 144 |
|
|---|
| 145 | #endif
|
|---|