안녕하세요? 허니데이즈입니다. 오늘은 지르콘 커널의 구성 객체들이 무엇이 있는지 알아보도록 하겠습니다.
Zircon은 객체 기반 커널이다. 사용자 모드 코드는 거의 독점적으로 객체 Handle을 통해 OS 리소스와 상호 작용한다. Handle은 특정 리소스 범위의 특정 OS 하위 시스템과의 활성 세션으로 생각할 수 있다. 지르콘은 다음과 같은 자원을 적극적으로 관리한다.
Processor time
Memory and address spaces
Device-io memory
Interrupts
Signaling and waiting
응용 프로그램용 커널 객체는 뭐가 있나요?
IPC
1. Channel
2. Socket
3. FIFO
Tasks
1. Process
2. Thread
3. Job
4. Task
Signaling
1. Event
2. Event Pair
3. Futex
Memory and address space
1. Virtual Memory Object
2. Virtual Memory Address Region
3. bus_transaction_initiator
Waiting
1. Port
드라이버용 커널 객체는 뭐가 있나요?
Interrupts
Resource
Log
커널 객체와 LK
일부 커널 객체는 하나 이상의 LK 레벨 구조를 래핑한다. 예를 들어 Thread 객체는 하나의 thread_t를 래핑한다. 그러나 채널은 LK 레벨 오브젝트를 랩핑하지 않는다.
커널 개체 라이프사이클은?
커널 개체는 ref-counting 된다. 대부분의 커널 객체는 syscall 중에 생성되며 syscall의 출력으로 주어진 Handle 값을 바인드하는 핸들에 의해 refcount = 1에서 활성 상태로 유지된다. Handle 오브젝트는 Handle Table에 첨부되어있는 동안 계속 유지한다. Handle은 Handle Table에서 분리되어(예를 들어 sys_close()를 통해) 커널 오브젝트의 refcount를 감소시킨다. 대개 마지막 Handle이 닫히면 커널 객체 refcount는 0에 도달하여 소멸자가 실행된다. refcount는 새로운 Handle(객체 참조)이 생성되고 직접 포인터 참조(일부 커널 코드에 의해)가 획득 될 때 증가한다. 그러므로 커널 객체의 수명은 프로세스를 생성한 프로세스의 수명보다 길 수 있다.
Dispatchers의 역할은 무엇인가요?
커널 오브젝트는 Dispatcher에서 파생된 C++ 클래스로 구현되며 구현된 메소드를 대체한다. 예를 들어 Thread 객체의 코드는 ThreadDispatcher에서 찾을 수 있다. 일반적인 의미의 커널 객체만 신경 쓰는 코드가 많이 있다. 이 경우 fbl::RefPtr<Dispatcher>라는 이름이 사용된다.
커널 개체 보안은 어떻게?
원칙적으로 커널 객체는 본질적인 보안 개념을 갖고 있지 않으며 권한 부여 검사를 수행하지 않는다. 보안 권한은 각 Handle에서 보유한다. 단일 프로세스는 동일한 권한을 가진 동일한 오브젝트에 대해 서로 다른 두 개의 핸들을 가질 수 있다.
출처: https://fuchsia.googlesource.com/zircon/+/master/docs/objects.md
지르콘 커널에 대해 더 알고 싶으시다면 아래 목차에서 클릭!
'Past Material' 카테고리의 다른 글
[Zircon Kernel] 지르콘 커널에서 사용되는 핸들(Handles)이란? - Fuchsia OS (0) | 2018.08.20 |
---|---|
[Zircon Kernel] 지르콘 커널에서 사용되는 쓰레드(Thread)란? - Fuchsia OS (0) | 2018.08.08 |
[Zircon Kernel] 지르콘 커널에서 사용되는 프로세스(Process)란? - Fuchsia OS (0) | 2018.08.08 |
[Zircon Kernel] 지르콘 커널의 개념에 대해 - Fuchsia OS (0) | 2018.08.07 |
[Zircon Kernel] 지르콘 커널 개발에 기여하는 방법은 무엇인가요? - Fuchsia OS (0) | 2018.08.03 |