_sem
typedef struct _sem sem_t;
#define down(_sem) sema_wait(&(_sem)->sema)
#define down_interruptible(_sem) sema_wait(&(_sem)->sema), 0
#define down_trylock(_sem) !sema_trywait(&(_sem)->sema)
#define up(_sem) sema_post(&(_sem)->sema)
struct _sem;
typedef struct _sem sem_t;