Linux kernel

Linux kernel

[Interrupt] Top half & bottom half

인터럽트 핸들러는 빠르게 실행되어야 하면서도 동시에 많은 양의 작업을 처리해야 한다. 이 2가지 목표는 서로 충돌하기 때문에, 리눅스 커널에서는 인터럽트 핸들러의 동작을 각각의 목표를 위한 2가지 파트, halves 로 분리하여 구현한다. 즉, 인터럽트 핸들러는 top half 와 bottom half 로 구분되는데, top half 에선 빠르게 처리되어야 하는 작업이 수행되며, bottom half 에서는 비교적 느리게 수행되어도 괜찮은 작업들이 지연되어 처리된다. 어떤 작업이 top half, bottom half 에서 처리되는지 감을 잡기 위해 NIC에 패킷이 수신된 상황을 예시로 들어보자. 먼저 NIC에 패킷이 수신되면 그에 따라 네트워크 디바이스 드라이버에 의하여 인터럽트가 생성될 것이다. 이와..

Linux kernel

Dynamic Timer

커널에는 2가지 종류의 타이머가 존재한다. 하드웨어에 의해 일정한 주기마다 인터럽트가 발생되어 작업을 처리하는 system timer 와, 소프트웨어로 구현되어 특정 시간이 경과된 이후 한번 작업을 실행하는 dynamic timer 가 있다. 커널은 dynamic timer 를 동적으로 생성하거나 제거할 수 있고, 등록된 작업은 system timer 의 timer interrupt handler 과정에서 처리 된다. 이 포스팅에선 dynamic timer 에 구조와 구현방법을 위주로 살펴보려고 한다. 시스템 타이머의 인터럽트를 timer interrupt, timer interrupt 간의 주기를 tick 이라고 한다. 커널은 tick rate 를 미리 알고 있으며, 이를 활용하여 wall time (..

Linux kernel

sysfs

sysfs sysfs는 디바이스 모델에 근거한 디바이스 연결관계를 tree 형태로 user space 에서 보여주는 메모리 상에 존재하는 가상 파일 시스템이다. sysfs의 주요 목적은 사용자 프로그램이 커널의 장치 모델과 상호 작용하고, 장치 정보를 쿼리하고, 때때로 장치의 속성을 수정할 수 있도록 해주는 것이다. 보통 sysfs 는 /sys 디렉토리에 마운트 된다. sysfs에 대하여 파악하기 위해선 kobject 를 알아야 한다. kobject 는 객체지향언어에서 사용하는 object calass 와 비슷한 개념의 모델로서 커널 내의 여러 구성 요소 간의 관계를 모델링하는 데 사용되며, 커널의 객체들을 sysfs 가상 파일 시스템을 통해 사용자 공간에 노출하기 위한 메커니즘을 제공한다. 이는 참조횟..

Linux kernel

Device Driver

Device Driver 리눅스 시스템에선 모든 것을 파일로 취급한다고 해도 무방하다. 파일을 크게 정규파일, 장치파일로 나눌 수 있다. (이외에도 디렉토리, Symbolic link, Named Pipes, Socket 등의 파일 종류도 존재한다. 여기선, Devcie Driver 에 집중하기 위해 생략했다) 유저 프로그램 관점에서 정규파일과 장치파일에 접근하는 것은 다음과 같은 차이가 존재한다. 정규 파일 접근: 시스템 콜을 호출하여 파일에 관한 작업을 요청 할 때 이는 VFS 를 통해 파일 시스템 계층으로 전달되어 실질적인 동작은 파일 시스템에서 이뤄지게 된다. 이 경우 유저프로그램과 디바이스 드라이버와의 상호 작용은 간접적으로 발생한다. 장치파일 접근: 마찬가지로 시스템 콜을 호출한다. 요청은 ..

Linux kernel

virtual file system (VFS)

리눅스에서 사용 가능한 파일 시스템은 다양하게 존재한다. 먼저, 왜 다양하게 존재하는 걸까? 그 이유는 계속 발전되어왔기 때문이기도 하며, 각 파일시스템마다 장단점이 다르기 때문이기도 하다. 예를들어, 일반적인 데스크탑에선 다양한 시스템에 적용될 수 있는 범용 목적의 기능들이 포함되며, HDDs SDDs 를 위해 최적화 되어 있다. 더 큰 파일 시스템과, 더 많은 범위에 파일 사이즈를 지원한다. 이에 비해 모바일이나 임베디드 디바이스에선 주로 NAND 플래시 메모리를 사용하기 때문에, 그에 최적화된 다른 파일 시스템을 사용한다. 모바일 또는 임베디드 시스템에서 일반적으로 사용되는 NAND 플래시 메모리의 경우 메모리 셀의 프로그램/지우기(P/E) 주기가 제한되어 있으며, 특정 횟수의 P/E 사이클이 지나..

sjoonb
'Linux kernel' 카테고리의 글 목록