[컴][os] Mac Os 에서 thread 와 관련된 정리

 

아래 내용은 ref. 1 의 chapter 13 The BSD layer 부분을 내용중 일부를 발췌한 것이다.

  • Mach 는 단순한 마이크로 커널이다. Mach 는 BSD layer 를 가지고 있다. Mach 가 os 로서 면모를 갖추기 위해 BSD 를 선택했다.[1]
  • XNU 는 크게 4.4BSD 를 따른다.[1]
  • Mac OS X 은 Leopard 버전에서 공식적인 UNIX03 증명(cetificate)을 받았다.[1]
  • "UNIX03 증명"은 OS X 이 Single Unix specification(SUS) 를 따른다는 뜻이다.[1]
  • 대부분의 Unix-like system 의 executable 이 ELF format 인 것에 비해 OS X 의 executable formate 은 Mach-O executable 이다.[1]
  • UNIX03 은 source-level compatibility 만을 요구한다.
    Os X 의 source 는 자신만의 특이한 API 등을 많이 가지고 있어서 다른 os 에서 compile 되지 않는 것들이 많다.[1]
  • SUS v3는 다른 표준인 POSIX와도 일치한다.[1]
  • BSD APIs 를 노출하기 위해 XNU 는 BSD 에서 code 를 빌려왔다.
  • XNU 는 Mach 3.0 을 기본으로 4.4 BSD 에 묶여 있다.
  • XNU 는 Virtual Filesystem Switch(VFS) 와 네트워크 구조는 BSD 에서 가져왔지만, 다른 것들은 부분적으로 가져오던지, 아예 생략했다.
  • BSD process 는 Mach task 와 유일하게 mapping 되는데, Mach task 가 가진 정보보다 더 많은 정보를 가지고 있다.
    • file descriptors
    • signal handlers
    • parent , siblings, children 의 link
    까지 갖는다.
  • struct proc : bsd/sys/proc_internal.h
  • XNU 의 struct proc 는 BSD 의 stuct proc 와 비슷하다.
    하지만 자신만의 특이한 fields(DTrace 관련, 코드사이닝, work queus, 다른 특정 요소)
  • XNU 는 process 들을 struct proclist 라는 곳에 넣어둔다.
    이것은 단순히 process 들의 linked list 이다.
  • process 들은 또한 process group 에 속할 지 모른다. 이 때 이용되는 것이 struct pgrp 이다.
  • itereator 의 사용예 : killpg1() bsd/kern/kern_proc.c
  • thread 가 실질적인 실행 unit 이다. Mach 는 thread primitives를 가지고 있지만, higher level OS 의 요구조건에는 부족하다.
    그래서 XNU 에서 부족한 부분을 제공하고 있다.
  • BSD thread object 는 struct uthread 이다.
  • bsdthread_create system call 은 기본적으로 Mach 의 thread_create에 위에 있는 긴 wrapper 이다.
  • 실제 thread object 를 만드는 부분은 Mach layer 이다.(thread_create())
  • Mach microkernel 이 process 와 thread 에 대한 primitives 를 구현하는 녀석이다.
    모든 Mach task 은 BSD process struct 인 struct proc 를 가리키는 bsd_info pointer 를 갖고 있다.
    Mach threads 는 uthread field 를 가지고 있는데, 이 녀석은 struct uthread 를 가리킨다.
  • BSD process 도 Mach task 를 가리키는 pointer 를 가지고 있다.
  • BSD thread 도 Mach thread 를 가리키는 pointer 를 가지고 있다.

 

       +-------------------+
| Process |
| |
| |
| +----------+ | +-----------+
| | | | | |
| | | | | |
| | BSD +----|--------------> | uthread |
| | process | | | |
| | | | | |
| | | | | |
| +--+-------+ | +-------+---+
| | ^ | ^ |
| | | | | |
| | | | | |
| v | | | v
| +------+----+ | +----+-------+
| | | | | |
| | | | | |
| | | | | |
| | Mach +---|--------------->| thread_t |
| | process | | | |
| | | | | |
| | | | | |
| +-----------+ | +------------+
+-------------------+

 


 


References



  1. Mac OS X and iOS internals to the Apple's core, Jonathan Levin,

댓글 없음:

댓글 쓰기