IRQ Stack(ARM64) - Debugging(디버깅)
By Guillermo Austin Kim | 2017년 12월 28일 |
아래 블로그에서 IRQ Stack(ARM64)에 대해 소개를 했는데요. 이번에는 직접 코어 덤프에서 IRQ Stack 덤프를 살펴볼께요. IRQ Stack Feature를 지원하는 프로세스의 콜스택을 Trace32로 잡아서 확인해 보았어요. 참고로, 아래는 CPU0에서 idle process가 돌아가 갑자기 IRQ가 Trigger되었을 시의 동작이에요. -000|gic_handle_irq(?) -001|el1_irq(asm) -->|exception -002|lpm_cpuidle_enter(dev = 0x0, ?, idx = 0) -003|cpuidle_enter_state(dev = 0xFFFFFFE57E2A33D8, drv = 0xFFFFFFE4F2E14C00, index = 0) -004|c
[리눅스커널] 메모리 관리: 슬럽 오브젝트 해제하는 kfree() 함수 분석하기
By Guillermo Austin Kim | 2019년 9월 1일 |
kmalloc() 함수로 동적 메모리를 할당하고 난 후 사용하지 않으면 메모리를 반환해야 합니다. 이 때 kfree() 함수를 사용하면 됩니다. 이번 시간에는 kfree() 함수를 분석하면서 커널 내부에서 반환하는 동적 메모리를 어떻게 처리하는지 살펴보겠습니다.[https://github.com/raspberrypi/linux/blob/rpi-4.19.y/source/mm/slub.c]01 void kfree(const void *x)02 {03 struct page *page;04 void *object = (void *)x;0506 trace_kfree(_RET_IP_, x);0708 if (unlikely(ZERO_OR_NULL_PTR(x)))09 return;1011 page = virt_to_h
[리눅스커널] Process - 프로세스, 경량 프로세스, 스레드 소개
By Guillermo Austin Kim | 2018년 9월 30일 |
프로세스라는 개념은 모든 멀티프로그래밍 운영체제의 기본입니다.프로세스는 실행중인 프로그램의 인스턴스로 정의할 수 있는데, 16명의 유저가 vi를 동시에 실행하면 각각 16개의 프로세스가 존재합니다. (물론 vi 코드는 동일한 것을 공유할 수 있습니다). 리눅스 코드에서는 프로세스를 태스크(task)나 쓰레드(thread)라고 부릅니다. 프로세스, 경량 프로세스 그리고 쓰레드프로세스라는 용어는 여러가지 다른 추상화 개념으로 씁니다. 프로세스는 프로그램이 어디까지 실행되었는지를 완벽하게 알고 있는 자료 구조체라 볼 수 있습니다. 프로세스는 마치 인간과 같습니다. 프로세스는 생성되고 중요하게 관리될 수 있으며 사소하기도 한 삶을 살고, 자식 프로세스를 생성하기도 하고 마지막에는 죽습니다. 아주 작은 차이가
[리눅스커널] 메모리관리/디버깅: ftrace로 메모리 할당 해제 확인하기
By Guillermo Austin Kim | 2019년 9월 1일 |
ftrace에서 지원하는 kmalloc와 kfree 이벤트를 사용하면 kmalloc()와 kfree() 함수를 호출할 때 세부 정보를 알 수 있습니다.kmalloc 이벤트: kmalloc() 함수로 메모리 할당을 요청했을때 동작 kfree 이벤트: 할당한 메모리를 해제했하는 동작 kmalloc와 kfree 이벤트 소개하기 그러면 kmalloc와 kfree 이벤트를 켜서 ftrace를 받으면 어떤 패턴의 메시지를 볼 수 있을까요? 다음 로그를 같이 보겠습니다. [https://elinux.org/Kernel_dynamic_memory_analysis]1 init-1[000] .N..0.170000: kmalloc: call_site=c104deff ptr=c147dd20 bytes_req=29