안녕하세요? 허니데이즈입니다.
스레드 객체는 시분할 공유 CPU 실행 컨텍스트를 나타내는 컨텍스트이다. 스레드 객체는 I/O와 계산에 필요한 다른 객체에 메모리와 Handle을 제공하는 특정 프로세스 객체와 관련되어 있다.
Lifetime은 어떻게 되나요?
스레드는 호출 zx_thread_create()에 의해 생성 되지만, zx_thread_start()나 zx_process_start() 호출 될때만 실행을 시작한다. 두 syscalls은 실행할 초기 루틴의 진입점을 인수로 받는다. 전달된 스레드 zx_process_start()는 프로세스에서 실행을 시작하는 첫 번째 스레드여야 한다. 다음과 같은 경우에 스레드가 실행을 종료한다.
1. zx_thread_exit() 호출 시
2. zx_vmar_unmap_handle_close_thread_exit() 호출 시
3. zx_futex_wake_handle_close_thread_exit() 호출 시
4. 부모 프로세스가 종료 될 때
5. zx_task_kill()가 스레드의 핸들로 호출 시
6. 처리기가 없거나 처리기가 스레드를 종료하기로 결정한 예외를 생성할 시
진입점 루틴에서 리턴되면 실행이 종료되지 않는다. 진입점의 마지막 동작은 zx_thread_exit() 위에서 언급한 _exit() 변형 중 하나를 호출해야 한다.
스레드에 대한 마지막 Handle를 닫아도 실행이 종료되지 않는다. 사용 가능한 Handle이 없는 스레드를 강제 종료 zx_object_get_child()하려면 스레드의 Handle을 얻는데 사용해야 한다. 하지만 실행중인 스레드를 종료하면 프로세스가 손상된 상태가 될 수 있기 때문에 이 방법은 사용하지 않는 것이 좋다.
퓨시아 스레드는 항상 분리된다. 즉, 정상적인 종료를 수행하는데 필요한 join() 작업은 없다 . 그러나 C11이나 POSIX와 같은 커널 위의 일부 런타임은 스레드가 결합되어야 할 수도 있다.
SYSCALLS은 어떤것이 있나요?
thread_create - 프로세스 내에서 새로운 스레드 생성하기
thread_exit - 현재 스레드 종료하기
thread_read_state - 스레드로부터 레지스터 상태를 읽기
thread_start - 새로운 thread가 실행을 시작하기
thread_write_state - 스레드의 레지스터 상태 수정하기
task_resume - 일시 중지된 작업을 계속 실행하기
task_bind_exception_port - 태스크에 예외 포트를 연결하기
task_kill - 작업 실행 중지하기
출처: https://fuchsia.googlesource.com/zircon/+/master/docs/objects/thread.md
지르콘 커널에 대해 더 알고 싶으시다면 아래 목차에서 클릭!
Zircon | |
Getting Started | |
Contributing Patches | |
Concepts Overview | |
Kernel Objects | |
Process Objects | |
Thread Objects | |
Handles | |
System Calls | |
Driver Development Kit | |
Testing | |
Hacking notes | |
Memory usage analysis tools | |
Relationship with LK | |
Micro-benchmarks |
'Past Material' 카테고리의 다른 글
구글은 어떻게 안드로이드 생태계에서 퓨시아(Fuchsia) 생태계로 전환시킬 수 있을까? (0) | 2018.08.21 |
---|---|
[Zircon Kernel] 지르콘 커널에서 사용되는 핸들(Handles)이란? - Fuchsia OS (0) | 2018.08.20 |
[Zircon Kernel] 지르콘 커널의 구성요소(Objects)는 무엇이 있나요? - Fuchsia OS (0) | 2018.08.08 |
[Zircon Kernel] 지르콘 커널에서 사용되는 프로세스(Process)란? - Fuchsia OS (0) | 2018.08.08 |
[Zircon Kernel] 지르콘 커널의 개념에 대해 - Fuchsia OS (0) | 2018.08.07 |