일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
- BLOCK
- 카프카
- kafka
- slab
- vm_area_struct
- multiqueue
- NDK
- Apache
- slub
- kmalloc
- proc
- pmap
- strex
- Android
- spinlock
- commit
- vmalloc
- page
- lruvec
- blk-mq
- slowpath
- devicedriver
- allocator
- Network
- memory
- fastpath
- Kernel
- Linux
- buddy_system
- mm_struct
- Today
- Total
목록Kernel (29)
Art of Pr0gr4m
이번 포스트부터는 리눅스의 메모리 모델과 관리 정책들에 대해서 알아본다. 가장 먼저 가상 메모리와 페이징에 대해서 알아볼 것이다. 참고로 세그먼테이션은 추후에 부팅과정에 대해 다룰 때 운영 모드와 함께 다룰 예정이며, 메모리 관리 정책에서는 넘어갈 것이다. 또한, 해당 포스트는 가상 메모리와 페이징의 일반적인 개념을 공부하는 포스트는 아니므로 컨셉에 대한 공부가 필요하다면 아래 링크를 참고하도록 한다. https://en.wikipedia.org/wiki/Virtual_memory flags bits: * * PG_reserved is set for special pages. The "struct page" of such a page * should in general not be touched (e.g..
리눅스 커널은 다양한 자료구조들을 일반적으로 사용할 수 있도록 제공한다. 연결 리스트, 큐, RB 트리, B+ 트리 등을 템플릿이나 제너릭 타입이 아닌 무려 포인터를 이용하여 일반화한다. 이번 포스트에서는 어떻게 포인터로 일반적인 자료구조를 구현하는지와 커널에서 제공하는 연결 리스트를 알아본다. 1. 매직 매크로 커널에서는 다양한 마법같은 매크로들을 제공한다. 이들을 통칭하여 매직 매크로라고 부르지는 않는다. 그냥 되게 유용하고 신기한 매크로들을 소개하려는데 마땅한 부제가 생각나지 않아서 매직 매크로라고 칭했다. 그 중 자료 구조들을 구현하는데 있어 중요한 두 매크로를 먼저 알아보도록 한다. #ifdef __compiler_offsetof #define offsetof(TYPE, MEMBER)__comp..
이번 포스트에선 저번 포스트에 이어 Block Device Driver의 예제를 작성해본다. 블록 디바이스 드라이버는 문자 디바이스 드라이버에 비해 복잡한 만큼 새로운 기반 개념들이 많이 등장했고, 이에 따른 드라이버 작성을 위한 인터페이스에 변화가 컸다. 사실 문자 디바이스 드라이버의 경우엔 인터넷에 떠돌아다니는 2.6버전 예제 아무거나 가져다 빌드 에러 메시지 보면서 대충 고치면 어찌저찌 동작하게 만들 수 있다. 반면 블록 디바이스 드라이버의 경우엔 (램디스크가 가장 대표적이다) 2.6 버전의 자료를 보고 공부하고 예제를 작성하면 어찌 되는게 없을 것이다. 아무리 고치려 해도 처음부터 싹 갈아엎어야 하는 대공사가 필요하다. 이게 어느정도냐면 비교적 최신 버전의 커널에 대한 다큐먼트 프로젝트 페이지를 ..
블록 디바이스 드라이버는 Block 단위(사실은 세그먼트 단위)로 입출력을 하는 디바이스 드라이버다. 문자 디바이스 드라이버와의 가장 큰 차이는 Random Access 가능 여부다. Random Access가 가능한 HDD, SSD 등을 제어하기 위해 사용한다. 단순히 데이터 스트림을 처리하는 문자 디바이스 드라이버와 다르게 제어해야할 범위도 넓고 성능 개선도 신경을 써야하기 때문에 기반에 깔린 개념들이 꽤나 복잡하다. 따라서 해당 포스트에서는 기반 개념들을 간단히 정리하고, 실제 디바이스 드라이버 예제는 다음 포스트에서 작성하기로 한다. 1. LBA LBA는 Logical Block Addressing의 약자로 모든 블록을 선형적으로 다루는 모드이다. 참고로 섹터는 디스크상 저장 기본 Unit이고 블..