Guillermo Austin Kim

Sources

Posts

998 posts

[Linux][Kernel] 슬랩 메모리: kfree 소개

Guillermo Austin Kim|2018년 4월 10일

이번에는 kfree에 대해서 알아봅니다. 이번에도 패치 코드를 하나 작성할게요. 이번에는 kmalloc 함수로 메모리를 할당 후 kfree 함수를 호출해서 메모리를 해제합니다. 그리고 바로 커널 크래시를 유발하죠. 커널 크래시가 발생하면 코어 덤프(vmcore)가 생깁니다. 이 파일을 Trace32로 올려서 메모리 해제 시 어떤 동작을 하는 지 상세히 알아 보려고 하거든요. 우선 할당된 메모리 주소는 0xE7AE1300입니다.(static u32 *) austin_debug_data = 0xE7AE1300 0xE7AE1300 메모리 공간은 어떤 값들로 구성됐는지 알아볼까요?_____address|_data________|value_____________|symbolNSD:E7AE1300|6B 6B 6B

[Linux][Kernel] 슬랩 메모리: kmalloc 소개

Guillermo Austin Kim|2018년 4월 9일

리눅스 커널에서 메모리란 소리만 나와도 공포에 질리는 분들이 있습니다. 예전에 저도 그랬죠. 스타크래프트에서 테란 조이기를 당할 때와 비슷한 느낌이었죠. 정말 갑갑했죠. 메모리풀, vmalloc, 슬랩 메모리, 하이 메모리 등등 용어를 듣다 보면 뇌정지가 올 때가 있습니다. 그런데 나중에 깨닫게 된 사실은 리눅스 커널에서 메모리를 제대로 이해하는 개발자가 매우 적다는 것이었습니다. 그래서 조금 위안을 가졌죠. 리눅스 커널 메모리 시스템을 이해하려고 리눅스 커널 코드를 열어 보는 분들이 있습니다. 이것은 정말 옵져버 없이 럴커 밭에 달려드는 질럿과 같습니다. 절대 이렇게 분석하면 포기할 수 밖에 없습니다. 그 이유는 리눅스 커널 메모리 관련 코드가 정말 어렵거든요. 그럼 어떻게 리눅스 커널 메모리 시스템을

[Linux][Kernel] IPI call - call_single_queue

[Linux][Kernel] IPI call - call_single_queue

Guillermo Austin Kim|2018년 4월 8일

IPI call을 수행할 때의 queue이 call_single_queue 분석.

[Linux][Kernel] 라덱스 트리 radex tree

[Linux][Kernel] 라덱스 트리 radex tree

Guillermo Austin Kim|2018년 4월 7일

인터럽트 디스크립터를 관리하는 라덱스 트리를 분석했습니다. 리눅스 커널 버전: 3.18 ~ 4.4까지 구조 리눅스 커널 버전: 4.9 구조

[Kernel][Timer] jiffies & jiffies_to_msecs

Guillermo Austin Kim|2018년 4월 1일

이번 시간에는 jiffies 값에 대해 다음과 같이 알아볼게요. 1. jiffies 변수의 의미2. 각 아키텍쳐별로 jiffies에 접근하는 방법3. jiffies을 밀리 초로 변환하는 방법 jiffies 변수의 의미jiffies 를 알려면 HZ에 대해 배워야 합니다. 그럼 HZ는 뭘 의미하죠?HZ는 1초당 타이머 인터럽트를 처리하는 횟수를 의미합니다. 만약 HZ가 500이면 1초당 HZ가 500번 업데이트됩니다. 이번엔 만약 HZ가 300이라고 가정하고 현재 jiffies가 1000이면, jiffies 값이 1300이 되면 1초가 지났음을 알 수 있습니다. 현재 jiffies가 1000이면 초당 다음 값으로 업데이트 됩니다.1초 후: 13002초 후: 16003초 후: 1900 그럼 이번에는 ji