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 |
---|