nckernel  0.1
 All Data Structures Files Functions Variables Typedefs Enumerations Enumerator Macros Groups Pages
Typedefs | Functions

POSIX 기준의 쓰레드 API set 을 정의하고 구현한다 More...

Collaboration diagram for POSIX 쓰레드:

Typedefs

typedef void * pthread_attr_t
 
typedef void * pthread_t
 

Functions

int pthread_attr_destroy (pthread_attr_t *attr)
 쓰레드 속성 객체를 소멸 시킨다. More...
 
int pthread_attr_getstack (pthread_attr_t *attr, void **stackaddr, size_t *stacksize)
 쓰레드의 스택 정보를 얻어온다. More...
 
int pthread_attr_getstackaddr (pthread_attr_t *attr, void **stackaddr)
 현재 쓰레드의 스택 주소를 가져온다. More...
 
int pthread_attr_getstacksize (pthread_attr_t *attr, size_t *stacksize)
 현재 쓰레드의 스택 크기를 읽어 온다. More...
 
int pthread_attr_init (pthread_attr_t *attr)
 쓰레드 속성 객체를 생성한다. More...
 
int pthread_attr_setstack (pthread_attr_t *attr, void *stackaddr, size_t stacksize)
 쓰레드가 사용할 Attributes 에 스택 정보를 설정한다. More...
 
int pthread_attr_setstackaddr (pthread_attr_t *attr, void *stackaddr)
 현재 쓰레드의 스택 주소를 설정하며, 해당 위치에서 부터 PTHREAD_STACK_MIN 보다 큰 영역이 할당 되어 있어야 한다. More...
 
int pthread_attr_setstacksize (pthread_attr_t *attr, size_t stacksize)
 현재 쓰레드의 스택 크기를 결정한다. More...
 
int pthread_cancel (pthread_t thread)
 쓰레드 취소 요청을 보낸다 More...
 
int pthread_create (pthread_t *thread, const pthread_attr_t *attr, void *(*start_routine)(void *), void *arg)
 쓰레드를 생성한다. More...
 
int pthread_detach (pthread_t thread)
 쓰레드를 detach 시킨다. 쓰레드가 detach 되면 관련 Resource 들이 자동으로 시스템에 반환된다. More...
 
int pthread_equal (pthread_t t1, pthread_t t2)
 두 쓰레드가 같은 쓰레드 인지 비교한다. More...
 
void pthread_exit (void *retval)
 호출한 쓰레드를 종료 시킨다. More...
 
int pthread_join (pthread_t thread, void **retval)
 주어진 쓰레드가 종료될 때 까지 기다린다. 해당 쓰레드의 자원을 모두 회수하고 정리한다. More...
 
pthread_t pthread_self (void)
 현재 쓰레드 포인터를 가져온다. More...
 
int pthread_yield (void)
 다른 쓰레드가 스케쥴링 될 수 있도록 양보한다. More...
 

Detailed Description

POSIX 기준의 쓰레드 API set 을 정의하고 구현한다

Date
2011-8-11
Author
Sung-jae Park nices.nosp@m.j@ni.nosp@m.cesj..nosp@m.com

Typedef Documentation

typedef void* pthread_attr_t

Definition at line 16 of file pthread.h.

typedef void* pthread_t

Definition at line 15 of file pthread.h.

Function Documentation

int pthread_attr_destroy ( pthread_attr_t attr)

쓰레드 속성 객체를 소멸 시킨다.

Parameters
[in]attr쓰레드 속성 객체
Returns
int 성공하면 0, 실패시 오류 값
See Also
pthread_attr_init()
pthread_create()

Definition at line 564 of file pthread_fork.c.

References free(), and NULL.

Here is the call graph for this function:

int pthread_attr_getstack ( pthread_attr_t attr,
void **  stackaddr,
size_t stacksize 
)

쓰레드의 스택 정보를 얻어온다.

Parameters
[in]attr속성 객체
[out]stackaddr스택으로 사용되고 있는 메모리 시작 주소
[out]stacksize스택의 크기
Returns
int 성공시 0, 실패시 오류 값

Definition at line 700 of file pthread_fork.c.

References thread_attr::addr, thread_attr::size, and thread_attr::stack.

int pthread_attr_getstackaddr ( pthread_attr_t attr,
void **  stackaddr 
)

현재 쓰레드의 스택 주소를 가져온다.

Parameters
[in]attr속성 객체
[out]stackaddr스택 주소
Returns
int 성공시 0, 실패시 오류 값

Definition at line 770 of file pthread_fork.c.

References thread_attr::addr, and thread_attr::stack.

int pthread_attr_getstacksize ( pthread_attr_t attr,
size_t stacksize 
)

현재 쓰레드의 스택 크기를 읽어 온다.

Parameters
[in]attr속성 객체
[out]stacksize스택의 크기
Returns
int 성공시 0, 실패시 오류 값

Definition at line 752 of file pthread_fork.c.

References thread_attr::size, and thread_attr::stack.

int pthread_attr_init ( pthread_attr_t attr)

쓰레드 속성 객체를 생성한다.

Parameters
[in]attr쓰레드 속성 객체
Returns
int 성공하면 0, 실패시 오류 값
See Also
pthread_attr_destroy()
pthread_create()

Definition at line 531 of file pthread_fork.c.

References thread_attr::addr, common_get_tcb_sz(), EFAULT, ENOMEM, malloc(), memcpy(), NULL, PTHREAD_STACK_MIN, thread_attr::size, and thread_attr::stack.

Here is the call graph for this function:

int pthread_attr_setstack ( pthread_attr_t attr,
void *  stackaddr,
size_t  stacksize 
)

쓰레드가 사용할 Attributes 에 스택 정보를 설정한다.

Parameters
[in]attr속성 객체
[in]stackaddr스택으로 사용할 메모리 시작 주소
[in]stacksize스택의 크기
Returns
int 성공시 0, 실패시 오류 값

Definition at line 683 of file pthread_fork.c.

References thread_attr::addr, common_get_tcb_sz(), EFAULT, thread_attr::size, and thread_attr::stack.

Here is the call graph for this function:

int pthread_attr_setstackaddr ( pthread_attr_t attr,
void *  stackaddr 
)

현재 쓰레드의 스택 주소를 설정하며, 해당 위치에서 부터 PTHREAD_STACK_MIN 보다 큰 영역이 할당 되어 있어야 한다.

Parameters
[in]attr속성 객체
[in]stackaddr스택 주소
Returns
int 성공시 0, 실패시 오류 값

Definition at line 761 of file pthread_fork.c.

References thread_attr::addr, and thread_attr::stack.

int pthread_attr_setstacksize ( pthread_attr_t attr,
size_t  stacksize 
)

현재 쓰레드의 스택 크기를 결정한다.

Parameters
[in]attr속성 객체
[in]stacksize스택의 크기
Returns
int 성공시 0, 실패시 오류 값

Definition at line 743 of file pthread_fork.c.

References thread_attr::size, and thread_attr::stack.

int pthread_cancel ( pthread_t  thread)

쓰레드 취소 요청을 보낸다

Parameters
[in]thread쓰레드 객체
Returns
int 성공시 0, 실패시 오류 값

Kernel thread & user process

Note
이 함수는 Thread safety 가 보장 되어야 한다. 수행 중에 thread scheduling 이 되면, 문제가 발생한다. 인터럽트가 발생하지 않도록 하고 진행한다.
Todo:
pgd 와 rpgd 에 할당 된 Page table pointer 및 page frame 들도 모두 해제 해 주어야 한다.
Note
사용자 프로세스 인 경우에는 pgd, rpgd 를 반드시 release 해야 한다.

free(arch_data->pgd); free(arch_data->rpgd);

현재는 user process 는 fork 를 이용하도록 변경 중이므로, is_user field 는 thread control block 에서 없애고, pgd, rpgd 는 아래ㅘ 같이 reset 하도록 처리해 둔다.

Definition at line 613 of file pthread_fork.c.

References thread::arch_data, dbg_printf(), EINVAL, free(), irq_local_restore(), irq_local_save(), NULL, thread::object, object_destroy(), x86_arch_data::pma_pgd, pthread_equal(), pthread_self(), x86_arch_data::rpgd, sem_clear(), USER, thread::user_data, and x86_util_get_ring().

Here is the call graph for this function:

int pthread_create ( pthread_t thread,
const pthread_attr_t attr,
void *(*)(void *)  start_routine,
void *  arg 
)

쓰레드를 생성한다.

Parameters
[out]thread쓰레드 객체
[in]attr쓰레드 속성 객체
[in]start_routine쓰레드 메인 함수
[in]arg메인 함수에게 전달 할 인자
Returns
int 성공시 0, 실패시 오류 값
See Also
pthread_attr_init()
Note
PGD, rPGD 는 main thread 의 것을 공유 한다

Definition at line 489 of file pthread_fork.c.

References thread::arch_data, ENOMEM, free(), malloc(), memcpy(), NULL, thread::root, thread_create(), thread_set_status(), and thread::user_data.

Here is the call graph for this function:

int pthread_detach ( pthread_t  thread)

쓰레드를 detach 시킨다. 쓰레드가 detach 되면 관련 Resource 들이 자동으로 시스템에 반환된다.

Parameters
[in]thread쓰레드 객체
Returns
int 성공시 0, 실패시 오류 값
See Also
pthread_join()

Definition at line 592 of file pthread_fork.c.

References printf().

Here is the call graph for this function:

int pthread_equal ( pthread_t  t1,
pthread_t  t2 
)

두 쓰레드가 같은 쓰레드 인지 비교한다.

Parameters
[in]t1비교 쓰레드
[in]t2비교 쓰레드
Returns
int 같으면 0 이 아닌 값, 다르면 0

Definition at line 602 of file pthread_fork.c.

Referenced by pthread_cancel(), pthread_mutex_lock(), pthread_mutex_trylock(), and pthread_mutex_unlock().

Here is the caller graph for this function:

void pthread_exit ( void *  retval)

호출한 쓰레드를 종료 시킨다.

Parameters
[in]retval현재 쓰레드가 종료되길 기다리는 쓰레드에게 전달 할 종료 값
Returns
void 없음
See Also
pthread_join()
int pthread_join ( pthread_t  thread,
void **  retval 
)

주어진 쓰레드가 종료될 때 까지 기다린다. 해당 쓰레드의 자원을 모두 회수하고 정리한다.

Parameters
[in]thread쓰레드 객체
[in]retval쓰레드 종료시 전달 된 값
Returns
int 성공시 0, 실패시 오류 값
See Also
pthread_exit()

Definition at line 582 of file pthread_fork.c.

References printf().

Here is the call graph for this function:

pthread_t pthread_self ( void  )

현재 쓰레드 포인터를 가져온다.

Returns
pthread_t 성공시 thread pointer, 실패시 NULL
Note
TCB area will be filled like below sequence

+----------------------—+ <- Lower address | tcb_tag | | tcb_ptr | +----------------------—+ <- Higher address

Definition at line 719 of file pthread_fork.c.

References _SC_PAGESIZE, thread::esp, NULL, strncmp(), sysconf(), local_tcb::tag, local_tcb::tcb_ptr, and THREAD_TAG.

Referenced by close(), do_irq(), execl(), execle(), execlp(), execv(), execvp(), execvpe(), fileno(), ioctl(), lseek(), onetime_map_init(), onetime_unmap(), open(), page_fault_handler(), pthread_cancel(), pthread_mutex_lock(), pthread_mutex_trylock(), pthread_mutex_unlock(), read(), sem_wait(), thread_get_stderr(), thread_get_stdin(), thread_get_stdout(), and write().

Here is the call graph for this function:

Here is the caller graph for this function:

int pthread_yield ( void  )

다른 쓰레드가 스케쥴링 될 수 있도록 양보한다.

Returns
int 성공시 0, 실패시 오류 값

Definition at line 779 of file pthread_fork.c.

References SYS_NR_YIELD, and syscall().

Referenced by main().

Here is the call graph for this function:

Here is the caller graph for this function: