일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- vm_area_struct
- BLOCK
- 카프카
- buddy_system
- slowpath
- memory
- NDK
- Network
- proc
- blk-mq
- kafka
- vmalloc
- spinlock
- Kernel
- Android
- allocator
- slub
- strex
- kmalloc
- slab
- page
- multiqueue
- Linux
- lruvec
- mm_struct
- pmap
- fastpath
- devicedriver
- commit
- Apache
- Today
- Total
목록IT (43)
Art of Pr0gr4m
이번 포스트에선 저번 포스트에 이어 Block Device Driver의 예제를 작성해본다. 블록 디바이스 드라이버는 문자 디바이스 드라이버에 비해 복잡한 만큼 새로운 기반 개념들이 많이 등장했고, 이에 따른 드라이버 작성을 위한 인터페이스에 변화가 컸다. 사실 문자 디바이스 드라이버의 경우엔 인터넷에 떠돌아다니는 2.6버전 예제 아무거나 가져다 빌드 에러 메시지 보면서 대충 고치면 어찌저찌 동작하게 만들 수 있다. 반면 블록 디바이스 드라이버의 경우엔 (램디스크가 가장 대표적이다) 2.6 버전의 자료를 보고 공부하고 예제를 작성하면 어찌 되는게 없을 것이다. 아무리 고치려 해도 처음부터 싹 갈아엎어야 하는 대공사가 필요하다. 이게 어느정도냐면 비교적 최신 버전의 커널에 대한 다큐먼트 프로젝트 페이지를 ..
블록 디바이스 드라이버는 Block 단위(사실은 세그먼트 단위)로 입출력을 하는 디바이스 드라이버다. 문자 디바이스 드라이버와의 가장 큰 차이는 Random Access 가능 여부다. Random Access가 가능한 HDD, SSD 등을 제어하기 위해 사용한다. 단순히 데이터 스트림을 처리하는 문자 디바이스 드라이버와 다르게 제어해야할 범위도 넓고 성능 개선도 신경을 써야하기 때문에 기반에 깔린 개념들이 꽤나 복잡하다. 따라서 해당 포스트에서는 기반 개념들을 간단히 정리하고, 실제 디바이스 드라이버 예제는 다음 포스트에서 작성하기로 한다. 1. LBA LBA는 Logical Block Addressing의 약자로 모든 블록을 선형적으로 다루는 모드이다. 참고로 섹터는 디스크상 저장 기본 Unit이고 블..
프로세서는 내부에 타이머를 내장하고 있다 IRQ 0번은 시스템 타이머이고 IRQ 8번은 RTC이다 OS를 만들어본 경험이 있다면, 대부분 해당 인터럽트를 기반으로 스케줄링을 진행했을 것이다 또한 클럭 카운트를 저장하는 tsc 레지스터도 있으며 로컬 APIC 타이머도 존재한다 OS를 만들어본 경험이 있다면 APIC는 떠올리고 싶지 않을 것이다 1. jiffies jiffy는 인터럽트 사이의 시간 간격을 의미하며 jiffies(지피 값)는 타이머에서 발생한 인터럽트 값이다 타이머 인터럽트는 일정한 간격으로 생성되며, 1초당 인터럽트가 호출되는 값을 HZ 상수로 정의한다 따라서 jiffies는 1초에 HZ 값만큼 숫자가 증가한다 참고로 커널 메뉴에서 Timer frequency 값을 바꾸면 HZ 값을 바꿀 수..
procfs는 Process File System을 줄인 것으로, Processes as Files의 의미이다 커널 및 디바이스 정보 (시스템 정보)를 유저 스페이스에 제공하기 위해 사용된다 ls /proc 으로 리스팅 해보면 다음과 같이 여러 파일 및 디렉토리가 있다 각 파일과 디렉토리가 의미하는건 다음 링크들을 참고한다 https://ko.wikipedia.org/wiki/Procfs procfs - 위키백과, 우리 모두의 백과사전 위키백과, 우리 모두의 백과사전. 둘러보기로 가기 검색하러 가기 proc 파일시스템 (procfs)은 유닉스 계열 운영 체제에서 프로세스와 다른 시스템 정보를 계층적 파일 구조 같은 형식으로 보여주는 특별한 파일시스템으로서, 전통적인 트레이싱 방식이나 커널 메모리로의 간접..