Changeset 581 for trunk/kernel/syscalls/shared_include
- Timestamp:
- Oct 10, 2018, 3:11:53 PM (6 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/kernel/syscalls/shared_include/shared_pthread.h
r566 r581 32 32 33 33 /******************************************************************************************* 34 * These typedef define the POSIX thread related types.34 * These typedef and enum define the shared information related to the POSIX thread. 35 35 ******************************************************************************************/ 36 36 37 typedef unsigned int pthread_mutex_t; 38 typedef unsigned int pthread_mutexattr_t; // TODO not implemented 39 40 typedef unsigned int pthread_cond_t; 41 typedef unsigned int pthread_condattr_t; // TODO not implemented 42 43 typedef unsigned int pthread_rwlock_t; // TODO not implemented 44 typedef unsigned int pthread_rwlockattr_t; // TODO not implemented 45 46 /******************************************************************************************* 47 * This structure and enum define the attributes for the pthread_create() syscall. 48 ******************************************************************************************/ 49 50 typedef unsigned int pthread_t; 37 typedef unsigned int pthread_t; 51 38 52 39 typedef struct pthread_attr_s 53 40 { 54 unsigned int attributes; /*! user defined attributes bit vector*/55 unsigned int cxy; /*! target cluster identifier*/56 unsigned int lid; /*! target core local index*/41 unsigned int attributes; /*! user defined attributes bit vector */ 42 unsigned int cxy; /*! target cluster identifier */ 43 unsigned int lid; /*! target core local index */ 57 44 } 58 45 pthread_attr_t; … … 60 47 enum 61 48 { 62 PT_ATTR_DETACH = 0x0001, /*! user defined not joinable*/63 PT_ATTR_CLUSTER_DEFINED = 0x0002, /*! user defined target cluster*/64 PT_ATTR_CORE_DEFINED = 0x0004, /*! user defined core index in cluster*/49 PT_ATTR_DETACH = 0x0001, /*! user defined not joinable */ 50 PT_ATTR_CLUSTER_DEFINED = 0x0002, /*! user defined target cluster */ 51 PT_ATTR_CORE_DEFINED = 0x0004, /*! user defined core index in cluster */ 65 52 }; 66 53 67 /******************************************************************************************* 68 * Th is enum defines the operation mnemonics for operations on POSIX condition variables.54 /******************************************************************************************* 55 * These typedef and enum define the shared informations related to the POSIX mutex. 69 56 ******************************************************************************************/ 57 58 typedef unsigned int pthread_mutex_t; 59 60 typedef unsigned int pthread_mutexattr_t; // TODO not implemented 61 62 typedef enum 63 { 64 MUTEX_INIT, 65 MUTEX_DESTROY, 66 MUTEX_LOCK, 67 MUTEX_UNLOCK, 68 MUTEX_TRYLOCK, 69 } 70 mutex_operation_t; 71 72 /******************************************************************************************* 73 * These typedef and enum define the shared informations related to the POSIX condvar. 74 ******************************************************************************************/ 75 76 typedef unsigned int pthread_cond_t; 77 78 typedef unsigned int pthread_condattr_t; // TODO not implemented 70 79 71 80 typedef enum … … 79 88 condvar_operation_t; 80 89 90 /******************************************************************************************* 91 * These typedef define and enum the shared informations related to the POSIX rwlock. 92 ******************************************************************************************/ 93 94 typedef unsigned int pthread_rwlock_t; // TODO not implemented 95 96 typedef unsigned int pthread_rwlockattr_t; // TODO not implemented 97 81 98 /******************************************************************************************* 82 * Th is enum defines the operation mnemonics for operations onPOSIX barriers.99 * These typedef and enum define the shared informations related to POSIX barriers. 83 100 ******************************************************************************************/ 101 102 typedef unsigned int pthread_barrier_t; 103 104 typedef struct pthread_barrierattr_s 105 { 106 unsigned int x_size; /*! number of clusters in a row */ 107 unsigned int y_size; /*! number of clusters in a column */ 108 unsigned int nthreads; /*! number of expected threads in a cluster */ 109 } 110 pthread_barrierattr_t; 84 111 85 112 typedef enum … … 91 118 barrier_operation_t; 92 119 93 /******************************************************************************************* 94 * This enum defines the operation mnemonics for operations on POSIX mutex. 95 ******************************************************************************************/ 120 /********************************************************************************************* 121 * These structures define another implementation for the POSIX barrier: 122 * It is implemented as a hierarchical, physically distributed quad-tree, 123 * covering all clusters specified, with the following constraints: 124 * . The involved clusters form a mesh [x_size * y_size] 125 * . The lower left involved cluster is cluster(0,0) 126 * . The number of threads per cluster is the same in all clusters. 127 * 128 * Implementation note: 129 * - The quad three is implemented as a three dimensions array of node[x][y][l] 130 * . [x][y] are the cluster coordinates / max values are (QDT_XMAX-1), (QDT_YMAX-1) 131 * . [l] is the node level / 0 for terminal nodes / (QDT_LMAX-1) for the root node 132 ********************************************************************************************/ 96 133 97 typedef enum 134 /* 135 136 #define QDT_XMAX 16 // max number of clusters in a row 137 #define QDT_YMAX 16 // max number of clusters in a column 138 #define QDT_LMAX 5 // max depth of the quad tree 139 #define QDT_YWIDTH 4 // Y field in cxy, for cxy <=> (x,y) translation 140 #define QDT_YMASK 0xF // Y field in cxy, for cxy <=> (x,y) translation 141 142 typedef struct sqt_node_s 98 143 { 99 MUTEX_INIT, 100 MUTEX_DESTROY, 101 MUTEX_LOCK, 102 MUTEX_UNLOCK, 103 MUTEX_TRYLOCK, 104 } 105 mutex_operation_t; 144 volatile unsigned int sense; // barrier state (toggle) 145 volatile unsigned int count; // number of not arrived tasks 146 unsigned int arity; // number of locally expected tasks 147 unsigned int level; // hierarchical level (0 is bottom) 148 struct sqt_node_s * parent; // pointer on parent node (NULL for root) 149 struct sqt_node_s * child[4]; // pointer on children node (NULL for bottom) 150 } 151 sqt_node_t; 106 152 153 typedef struct pthread_barrier_s 154 { 155 sqt_node_t * node[QDT_XMAX][QDT_YMAX][QDT_LMAX]; 156 } 157 pthread_barrier_t; 107 158 159 */ 108 160 109 161 #endif // _PTHREAD_H_
Note: See TracChangeset
for help on using the changeset viewer.