안녕하세요? 허니데이즈입니다. 오늘은 지르콘 커널의 구성 객체들이 무엇이 있는지 알아보도록 하겠습니다.



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


 

지르콘 커널에 대해 더 알고 싶으시다면 아래 목차에서 클릭! 

지르콘 커널이란?

Zircon

지르콘 커널 개발 환경 구축하기

Getting Started

지르콘 커널 개발에 기여하는 방법

Contributing Patches

지르콘 커널의 개념 알기

Concepts Overview

지르콘 커널 구성요소(Kernel Objects)는?

Kernel Objects

지르콘 커널에서 사용되는 프로세스(Process)란?

Process Objects

지르콘 커널에서 사용되는 쓰레드(Thread)란?

Thread Objects

지르콘 커널에서 사용되는 핸들(Handles)이란?

Handles

지르콘 커널의 시스템콜하는 방식은?

System Calls

지르콘 커널의 드라이버 개발 키트 사용하는 방법 - 장치 모델

Driver Development Kit

지르콘 커널의 드라이버 개발 키트 사용하는 방법 - 장치 프로토콜

지르콘 커널의 드라이버 개발 키트 사용하는 방법 - 지르콘 드라이버 개발

지르콘 커널의 드라이버 개발 키트 사용하는 방법 - 플랫폼 버스

지르콘 커널의 드라이버 개발 키트 사용하는 방법 - 장치 펌웨어

지르콘 커널을 시험하는 방법은?

Testing

지르콘 커널의 취약점은 무엇일까?

Hacking notes

지르콘 커널의 메모리와 자원 사용은 어떻게 할까?

Memory usage analysis tools

지르콘 커널과 LK(Little Kernel)의 관계는?

Relationship with LK

지르콘 커널을 위한 마이크로 벤츠마크는?

Micro-benchmarks


+ Recent posts