일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- vmalloc
- page
- Kernel
- spinlock
- Network
- devicedriver
- proc
- memory
- buddy_system
- strex
- commit
- slowpath
- kmalloc
- Linux
- fastpath
- slab
- Apache
- blk-mq
- slub
- Android
- mm_struct
- lruvec
- multiqueue
- NDK
- BLOCK
- pmap
- vm_area_struct
- 카프카
- allocator
- kafka
- Today
- Total
목록Kernel (29)
Art of Pr0gr4m
프로세서는 내부에 타이머를 내장하고 있다 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)은 유닉스 계열 운영 체제에서 프로세스와 다른 시스템 정보를 계층적 파일 구조 같은 형식으로 보여주는 특별한 파일시스템으로서, 전통적인 트레이싱 방식이나 커널 메모리로의 간접..
이번 포스트에선 리눅스 커널에서 제공하는 CryptoAPI를 이용한 문자 디바이스 드라이버를 작성한다 1. CryptoAPI 리눅스 커널에서 제공하는 암호화 관련 인터페이스를 CryptoAPI라고 한다 include/crypto 디렉토리 하위의 헤더 파일을 인클루드하여 사용할 수 있다 커널 2.6 버전에서는 대부분의 암호화 알고리즘을 비슷한 인터페이스로 이용했는데 현재는 지원 대상도 다양해지고 기능도 많아져서 꽤나 복잡해졌다 해당 포스트는 CryptoAPI 자체에 대해 집중하기보단, CryptoAPI를 사용하는 문자 디바이스 드라이버 작성이 주이기 때문에 자세한 내용은 다음 링크(Crypto API, Crypto Architecture)에 맡기고 사용하기 쉬운 MD5 해쉬 알고리즘으로 예제를 작성한다 2..
ioctl은 스트림 디바이스를 다루기 위한 확장이었다 현재는 기능이 더욱 확장되어 vfs상의 파일(하드웨어, 파일 등)을 제어하기 위한 오퍼레이션이 되었다 ioctl에 대한 더 자세한 정보는 다음 링크를 참고하며, 매뉴얼은 다음 링크를 참고한다 1. IOCTL 구조 ioctl의 인자로 전달되는 request는 커널 내부의 cmd로 전달되며, 기타 인자들은 arg로 전달된다 시스템 호출 절차를 간략화하면 ioctl() -> sys_ioctl() -> dev_ioctl() 이 된다 디바이스 드라이버에서 작성하는 ioctl은 대략 다음과 같다 static long chardev_ioctl(struct file *filp, unsigned int cmd, unsigned long arg) { switch (cm..