Changeset 428 for trunk/kernel/kern/process.h
- Timestamp:
- Jan 29, 2018, 6:08:07 PM (5 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/kernel/kern/process.h
r416 r428 54 54 55 55 /********************************************************************************************* 56 * This enum defines the actions that can be executed by the process_sig nal() function.56 * This enum defines the actions that can be executed by the process_sigaction() function. 57 57 ********************************************************************************************/ 58 58 … … 62 62 UNBLOCK_ALL_THREADS = 22, 63 63 DELETE_ALL_THREADS = 33, 64 }; 65 66 /********************************************************************************************* 67 * This enum defines the process states for ALMOS_MKH. 68 ********************************************************************************************/ 69 70 enum process_states 71 { 72 PROCESS_STATE_RUNNING = 0, /*! process is executing */ 73 PROCESS_STATE_STOPPED = 1, /*! process has been stopped by a signal */ 74 PROCESS_STATE_KILLED = 2, /*! process has been killed by a signal */ 75 PROCESS_STATE_EXITED = 3, /*! process terminated with an exit */ 64 76 }; 65 77 … … 102 114 * 4) The <sem_root>, <mutex_root>, <barrier_root>, <condvar_root>, and the associated 103 115 * <sync_lock>, that are dynamically allocated, are only defined in the reference cluster. 104 * 5) The <children_root>, and <children_nr> fields are only defined in the reference105 * cluster, and are undefined in other clusters.106 * 6) The < brothers_list>, <local_list>, <copies_list>, <th_tbl>, <th_nr>, <th_lock> fields116 * 5) The <children_root>, <children_nr>, <brothers_list>, and <txt_list> fields are only 117 * defined in the reference cluster, and are undefined in other clusters. 118 * 6) The <local_list>, <copies_list>, <th_tbl>, <th_nr>, <th_lock> fields 107 119 * are defined in all process descriptors copies. 108 120 ********************************************************************************************/ … … 115 127 116 128 xptr_t vfs_root_xp; /*! extended pointer on current VFS root inode */ 117 xptr_t vfs_bin_xp; /*! extended pointer on .elf file inode*/129 xptr_t vfs_bin_xp; /*! extended pointer on .elf file descriptor */ 118 130 pid_t pid; /*! process identifier */ 119 pid_t ppid; /*! parent process identifier */120 131 xptr_t ref_xp; /*! extended pointer on reference process */ 132 xptr_t parent_xp; /*! extended pointer on parent process */ 121 133 122 134 xptr_t vfs_cwd_xp; /*! extended pointer on current working dir inode */ … … 124 136 125 137 xlist_entry_t children_root; /*! root of the children process xlist */ 138 remote_spinlock_t children_lock; /*! lock protecting children process xlist */ 126 139 uint32_t children_nr; /*! number of children processes */ 127 140 128 xlist_entry_t brothers_list; /*! member of list of children of same parent */141 xlist_entry_t children_list; /*! member of list of children of same parent */ 129 142 xlist_entry_t local_list; /*! member of list of process in same cluster */ 130 143 xlist_entry_t copies_list; /*! member of list of copies of same process */ 144 xlist_entry_t txt_list; /*! member of list of processes sharing same TXT */ 131 145 132 146 spinlock_t th_lock; /*! lock protecting th_tbl[] concurrent access */ 133 147 uint32_t th_nr; /*! number of threads in this cluster */ 148 134 149 struct thread_s * th_tbl[CONFIG_THREAD_MAX_PER_CLUSTER]; /*! pointers on local threads */ 135 150 … … 138 153 xlist_entry_t barrier_root; /*! root of the process barrier list */ 139 154 xlist_entry_t condvar_root; /*! root of the process condvar list */ 140 141 155 remote_spinlock_t sync_lock; /*! lock protecting sem,mutex,barrier,condvar lists */ 156 157 uint32_t state; /*! RUNNING / STOPPED / KILLED / EXITED */ 158 159 bool_t txt_owner; /*! current TXT owner */ 142 160 } 143 161 process_t; … … 182 200 183 201 /********************************************************************************************* 202 * This function initialize, in each cluster, the kernel "process_zero", that is the owner 203 * of all kernel threads in a given cluster. It is called by the kernel_init() function. 204 * The process_zero descriptor is allocated as a global variable in file kernel_init.c 205 * Both the PID and PPID fields are set to zero, the ref_xp is the local process_zero, 206 * and the parent process is set to XPTR_NULL. The th_tbl[] is initialized as empty. 207 ********************************************************************************************* 208 * @ process : [in] pointer on local process descriptor to initialize. 209 ********************************************************************************************/ 210 void process_zero_create( process_t * process ); 211 212 /********************************************************************************************* 184 213 * This function allocates memory and initializes the "process_init" descriptor and the 185 214 * associated "thread_init" descriptor. It is called once at the end of the kernel 186 * initialisation procedure, by the kernel process in cluster_IO. 215 * initialisation procedure. Its local process identifier is 1, and parent process 216 * is the kernel process in cluster 0. 187 217 * The "process_init" is the first user process, and all other user processes will be forked 188 218 * from this process. The code executed by "process_init" is stored in a .elf file, whose 189 219 * pathname is defined by the CONFIG_PROCESS_INIT_PATH configuration variable. 190 * The process_init streams are defined by the CONFIG_INIT_[STDIN/STDOUT/STDERR] variables.191 * Its local process identifier is 1, and parent process is the local kernel process_zero.220 * The process_init does not use the [STDIN/STDOUT/STDERR] streams, but it is linked 221 * to kernel TXT0, because these streams must be defined for all user processes. 192 222 ********************************************************************************************/ 193 223 void process_init_create(); 194 224 195 225 /********************************************************************************************* 196 * This function initialize, in each cluster, the kernel "process_zero", that is the owner 197 * of all kernel threads in a given cluster. It is called by the kernel_init() function. 198 * Both the PID and PPID fields are set to zero, and the ref_xp is the local process_zero. 199 * The th_tbl[] is initialized as empty. 200 ********************************************************************************************* 201 * @ process : [in] pointer on local process descriptor to initialize. 202 ********************************************************************************************/ 203 void process_zero_init( process_t * process ); 204 205 /********************************************************************************************* 206 * This function initializes a local, reference user process descriptor from another process 207 * descriptor, defined by the <model_xp> argument. The <process> descriptor, the <pid>, and 208 * the <ppid> arguments must be previously defined by the caller. 209 * It can be called by two functions, depending on the process type: 210 * 1) if "process" is the "process_init", the parent is the kernel process. It is 211 * called once, by the process_init_create() function in cluster[xmax-1][ymax-1]. 212 * 2) if the caller is the process_make_fork() function, the model is generally a remote 213 * process, that is also the parent process. 214 215 * 3) if the caller is the process_make_exec() function, the model is always a local process, 216 * and the parent is the parent of the model process. DEPRECATED [AG] 217 218 * The following fields are initialised (for all process but process_zero). 219 * - It set the pid / ppid / ref_xp fields. 226 * This function initializes a local, reference, user process descriptor from another process 227 * descriptor, defined by the <model_xp> argument. The <process> and <pid> arguments must 228 * be previously allocated by he caller. This function can be called by three functions: 229 * 1) process_init_create() : process is the reference INIT process / pid = 1 / 230 * the parent and model process descriptors are both the kernel process_zero. 231 * 2) process_make_fork() : the model process descriptor is the (generally remote) 232 * parent process. 233 * 3) process_make exec() : the model process is the local old_process, the new_process 234 * parent is the same as the old_process parent. 235 * The following fields are initialised : 236 * - It set the pid / ppid / ref_xp / parent_xp / state fields. 220 237 * - It initializes the VMM (register the kentry, args, envs vsegs in VSL) 221 238 * - It initializes the FDT, defining the three pseudo files STDIN / STDOUT / STDERR. … … 230 247 * @ process : [in] pointer on local process descriptor to initialize. 231 248 * @ pid : [in] process identifier. 232 * @ p pid : [in] parent process identifier.233 * @ model_xp : [in] extended pointer on model process descriptor (local or remote).249 * @ parent_xp : [in] extended pointer on parent process descriptor. 250 * @ model_xp : [in] extended pointer on model process descriptor. 234 251 ********************************************************************************************/ 235 252 void process_reference_init( process_t * process, 236 253 pid_t pid, 237 pid_t ppid,254 xptr_t parent_xp, 238 255 xptr_t model_xp ); 239 256 … … 259 276 260 277 /********************************************************************************************* 261 * This function returns a printable string defining the action for process_signa().262 ********************************************************************************************* 263 * @ action_type : BLOCK_ALL_THREADS / UNBLOCK_ALL_THREADS / DELETE_ALL_THREADS278 * This function returns a printable string defining the process state. 279 ********************************************************************************************* 280 * @ state : RUNNING / BLOCKED / EXITED / KILLED 264 281 * @ return a string pointer. 265 282 ********************************************************************************************/ 266 char * process_action_str( uint32_t action_type ); 283 char * process_state_str( uint32_t state ); 284 285 /********************************************************************************************* 286 * This debug function diplays on the kernel terminal TXT0 detailed informations on a 287 * reference process identified by the <process_xp> argument. 288 * It can be called by a thread running in any cluster. 289 ********************************************************************************************* 290 * @ process_xp : extended pointer on reference process. 291 ********************************************************************************************/ 292 void process_display( xptr_t process_xp ); 293 294 /********************************************************************************************* 295 * This function returns a printable string defining the sigaction type. 296 ********************************************************************************************* 297 * @ sigaction_type : BLOCK_ALL_THREADS / UNBLOCK_ALL_THREADS / DELETE_ALL_THREADS 298 * @ return a string pointer. 299 ********************************************************************************************/ 300 char * process_action_str( uint32_t sigaction_type ); 267 301 268 302 /********************************************************************************************* … … 290 324 291 325 /********************************************************************************************* 292 * This function blocks all threads of a given user process in a given cluster. 326 * This function blocks all threads (but the client thread defined by the <client_xp> 327 * argument) for a given <process> in a given cluster. 293 328 * It loops on all local threads of the process, set the THREAD_BLOCKED_GLOBAL bit, 294 329 * and request the relevant schedulers to acknowledge the blocking, using IPI if required. 295 330 * The threads are not detached from the scheduler, and not detached from the local process. 296 331 * This function returns only when all blockable threads in cluster are actually blocked. 297 * WARNING : the client thread defined by the <client_xp> argument is NOT blocked.298 332 ********************************************************************************************* 299 333 * @ process : pointer on the target process descriptor. 300 334 * @ client_xp : extended pointer on the client thread, that should not be blocked. 301 335 ********************************************************************************************/ 302 void process_block ( process_t * process,303 xptr_t client_xp );336 void process_block_threads( process_t * process, 337 xptr_t client_xp ); 304 338 305 339 /********************************************************************************************* … … 308 342 * @ process : pointer on the process descriptor. 309 343 ********************************************************************************************/ 310 void process_unblock( process_t * process ); 311 312 /********************************************************************************************* 313 * This function delete all threads, of a given user process in a given cluster. 344 void process_unblock_threads( process_t * process ); 345 346 /********************************************************************************************* 347 * This function delete all threads, (but the client thread defined by the <client_xp> 348 * argument) for a given <process> in a given cluster. 314 349 * It loops on all local threads of the process, and set the THREAD_FLAG_REQ_DELETE bit. 315 350 * For each marked thread, the following actions will be done by the scheduler at the next … … 320 355 * - the memory allocated to the thread descriptor is released. 321 356 * - the memory allocated to the process descriptor is released, if it is the last thread. 322 * WARNING : the client thread defined by the <client_xp> argument is NOT deleted.323 357 ********************************************************************************************* 324 358 * @ process : pointer on the process descriptor. 325 359 * @ client_xp : extended pointer on the client thread, that should not be deleted. 326 360 ********************************************************************************************/ 327 void process_delete ( process_t * process,328 xptr_t client_xp );361 void process_delete_threads( process_t * process, 362 xptr_t client_xp ); 329 363 330 364 /********************************************************************************************* … … 509 543 510 544 545 /*************** Terminals related operations ********************************************/ 546 547 /********************************************************************************************* 548 * This function scan the set of user TXT terminals to find a free terminal 549 * (the list of attached processes is empty for a free TXT terminal). 550 * It is called only by the process_reference_init() function when creating a KSH process. 551 * It makes a kernel panic if no free TXT terminal is found. 552 * As a KSH process is never deleted, the allocated TXT terminal is never released. 553 ********************************************************************************************* 554 * @ return TXT terminal index if succes / kernel panic if no terminal found. 555 ********************************************************************************************/ 556 uint32_t process_txt_alloc(); 557 558 /********************************************************************************************* 559 * This function attach a reference process descriptor, identified by the <process> 560 * argument to a TXT terminal, identified by its <txt_id> channel index argument. 561 * It insert the process descriptor in the xlist rooted in the TXT_RX device. 562 * It is called by the process_reference_init() function. 563 ********************************************************************************************* 564 * @ process : local pointer on process descriptor. 565 * @ txt_id : TXT channel index. 566 ********************************************************************************************/ 567 void process_txt_attach( process_t * process, 568 uint32_t txt_id ); 569 570 /********************************************************************************************* 571 * This function detach a reference process descriptor, identified by the <process_xp> 572 * argument, from the list of process attached to a given TXT terminal. 573 * It is called when the process is killed. 574 ********************************************************************************************* 575 * @ process : local pointer on process descriptor. 576 ********************************************************************************************/ 577 void process_txt_detach( process_t * process ); 578 579 /********************************************************************************************* 580 * This function gives to a process identified by the <process_xp> argument, and attached 581 * to terminal TXT[i] the exclusive ownership of the TXT_RX[i] terminal. 582 ********************************************************************************************* 583 * @ process_xp : extended pointer on reference process descriptor. 584 ********************************************************************************************/ 585 void process_txt_set_ownership( xptr_t process_xp ); 586 587 /********************************************************************************************* 588 * When the process identified by the <process_xp> argument has the exclusive ownership 589 * of the TXT_RX[i] terminal, this function gives this ownership to the KSH[i] process. 590 * It does nothing if the process is not the owner. 591 ********************************************************************************************* 592 * @ process_xp : extended pointer on reference process descriptor. 593 ********************************************************************************************/ 594 void process_txt_reset_ownership( xptr_t process_xp ); 511 595 512 596 #endif /* _PROCESS_H_ */
Note: See TracChangeset
for help on using the changeset viewer.