Changeset 436 for trunk/kernel/kern/process.h
- Timestamp:
- Mar 7, 2018, 9:02:03 AM (5 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/kernel/kern/process.h
r435 r436 58 58 enum process_sigactions 59 59 { 60 BLOCK_ALL_THREADS = 11,61 UNBLOCK_ALL_THREADS = 22,62 DELETE_ALL_THREADS = 33,60 BLOCK_ALL_THREADS = 0x11, 61 UNBLOCK_ALL_THREADS = 0x22, 62 DELETE_ALL_THREADS = 0x33, 63 63 }; 64 64 … … 281 281 * This function allows a client thread running in any cluster to block, unblock or delete 282 282 * all threads of a process identified by the <pid> argument, depending on the 283 * <action_type> argument. The scenario is the following: 284 * - It uses the multicast, non blocking rpc_process_sigaction_client() function to send 285 * parallel requests to all remote clusters containing a process copy. Then it blocks 286 $ and deschedule to wait completion of these parrallel requests. 287 * - In each remote cluster, the rpc_process_sigaction_server() function, calls directly 288 * the relevant process_block(), process_unblock(), or process_delete() function, and 289 * decrement the responses counter to signal completion. The last server unblock 290 * the client thread. 291 * - Finally, the client thread calls directly the process_block(), process_unblock(), or 292 * process_delete() function in the owner cluster. 283 * <action_type> argument. 284 * WARNING : the DELETE action is NOT executed on the target process main thread 285 * (thread 0 in process owner cluster). 286 * It uses the multicast, non blocking rpc_process_sigaction_client() function to send 287 * parallel requests to all remote clusters containing a process copy. 288 * Then it blocks and deschedule to wait completion of these parallel requests. 289 * 293 290 * It is used by the sys_kill() & sys_exit() functions to handle the "kill" & "exit" syscalls. 294 291 * It is also used by the process_make_exec() function to handle the "exec" syscall. 295 * It is also called by the TXT device to execute the ctrl C & ctrl Z commands. 296 * WARNING : the DELETE action is NOT executed on the main thread (thread 0 in owner cluster). 292 * It is also called by the TXT device ISR to execute the ctrl C & ctrl Z commands. 293 * 294 * Implementation note: 295 * This function allocates a - shared - RPC descriptor in client thread stack, 296 * and initializes it. This RPC descriptor can be shared because all parallel, 297 * non-blocking, RPC server threads use the same input arguments, including the 298 * RPC responses counter field. 297 299 ********************************************************************************************* 298 300 * @ pid : target process identifier. … … 303 305 304 306 /********************************************************************************************* 305 * This function blocks all threads for a given <process> in a given cluster. 306 * The calling thread cannot be a target thread. 307 * It loops on all local threads of the process, set the THREAD_BLOCKED_GLOBAL bit, 307 * This function blocks all threads - but the main thread - for a given <process> 308 * in a given cluster. It sets the THREAD_BLOCKED_GLOBAL bit in the thread descriptor, 308 309 * and request the relevant schedulers to acknowledge the blocking, using IPI if required. 309 310 * The threads are not detached from the scheduler, and not detached from the local process. … … 322 323 323 324 /********************************************************************************************* 324 * This function marks for deletion all threads - but one _ for a given <process> 325 * in a given cluster. The main thread in owner cluster is NOT marked. 326 * It will be marked for deletion by the parent process sys_wait(). 327 * The calling thread cannot be a target thread. 328 * It loops on all local threads of the process, and set the THREAD_FLAG_REQ_DELETE bit. 329 * For each marked thread, the following actions will be done by the scheduler at the next 330 * scheduling point: 325 * This function marks for deletion all threads - but the main thread - for a given <process> 326 * in a given cluster. It sets the THREAD_FLAG_REQ_DELETE bit. For each marked thread, 327 * the following actions will be done by the scheduler at the next scheduling point: 331 328 * - the thread will be detached from the scheduler. 332 329 * - the thread will be detached from the local process descriptor. … … 349 346 ********************************************************************************************/ 350 347 process_t * process_get_local_copy( pid_t pid ); 348 349 /********************************************************************************************* 350 * This function returns the parent process identifier for a remote process descriptor 351 * identified by an extended pointer. 352 ********************************************************************************************* 353 * @ process_xp : extended pointer on remote process descriptor. 354 * @ returns parent process dentifier. 355 ********************************************************************************************/ 356 pid_t process_get_ppid( xptr_t process_xp ); 351 357 352 358 /********************************************************************************************* … … 508 514 509 515 /********************************************************************************************* 510 * This function attach a reference process descriptor, identified by the <process>516 * This function attach a process descriptor in owner cluster, identified by the <process> 511 517 * argument to a TXT terminal, identified by its <txt_id> channel index argument. 512 518 * It insert the process descriptor in the xlist rooted in the TXT_RX device. … … 520 526 521 527 /********************************************************************************************* 522 * This function detach a reference process descriptor, identified by the <process_xp> 523 * argument, from the list of process attached to a given TXT terminal. 524 * It is called when the process is killed. 525 ********************************************************************************************* 526 * @ process : local pointer on process descriptor. 527 ********************************************************************************************/ 528 void process_txt_detach( process_t * process ); 529 530 /********************************************************************************************* 531 * This function gives to a process identified by the <process_xp> argument, and attached 528 * This function detach a process, identified by the <process_xp> argument, 529 * from the list of process attached to a given TXT terminal. 530 * The target process descriptor must be in the owner cluster, but the calling thread can 531 * be running in any cluster. 532 ********************************************************************************************* 533 * @ process_xp : extended pointer on process descriptor. 534 ********************************************************************************************/ 535 void process_txt_detach( xptr_t process_xp ); 536 537 /********************************************************************************************* 538 * This function gives to a process identified by the <owner_xp> argument, and attached 532 539 * to terminal TXT[i] the exclusive ownership of the TXT_RX[i] terminal. 533 ********************************************************************************************* 534 * @ process_xp : extended pointer on reference process descriptor. 535 ********************************************************************************************/ 536 void process_txt_set_ownership( xptr_t process_xp ); 537 538 /********************************************************************************************* 539 * When the process identified by the <process_xp> argument has the exclusive ownership 540 * of the TXT_RX[i] terminal, this function gives this ownership to the KSH[i] process. 541 * It does nothing if the process is not the owner. 542 ********************************************************************************************* 543 * @ process_xp : extended pointer on reference process descriptor. 544 ********************************************************************************************/ 545 void process_txt_reset_ownership( xptr_t process_xp ); 546 547 /********************************************************************************************* 548 * This function returns the terminal owner process (foreground process) 540 * The process descriptor must be in the process owner cluster. 541 ********************************************************************************************* 542 * @ owner_xp : extended pointer on process descriptor in owner cluster. 543 ********************************************************************************************/ 544 void process_txt_set_ownership( xptr_t owner_xp ); 545 546 /********************************************************************************************* 547 * When the process dentified by the <owner_xp> argument has the exclusive ownership of 548 * the TXT_RX terminal, this function transfer this ownership to another attached process. 549 * The process descriptor must be in the process owner cluster. 550 * This function does nothing if the <pid> process is not the owner. 551 * - If the current owner is not the KSH process, the new owner is the KSH process. 552 * - If the <pid> process is the the KSH process, the new owner is another attached process. 553 * - If there is no other attached process, the TXT has no more defined owner. 554 ********************************************************************************************* 555 * @ owner_xp : extended pointer on process descriptor in owner cluster. 556 ********************************************************************************************/ 557 void process_txt_transfer_ownership( xptr_t owner_xp ); 558 559 /********************************************************************************************* 560 * This function returns the TXT owner process (foreground process) 549 561 * for a given TXT terminal identified by its <channel> index. 550 562 ********************************************************************************************* 551 563 * @ channel : TXT terminal channel. 552 * @ return owner process identifier.553 ********************************************************************************************/ 554 pid_t process_get_txt_owner( uint32_t channel );564 * @ return extentded pointer on TXT owner process in owner cluster. 565 ********************************************************************************************/ 566 xptr_t process_txt_get_owner( uint32_t channel ); 555 567 556 568 /*********************************************************************************************
Note: See TracChangeset
for help on using the changeset viewer.