LINUX
Posts
477 posts[Kernel][Debug] 런큐에서 CFS 스케쥴러에 큐잉된 프로세스 찾기
런큐에 CFS 스케쥴러로 큐잉된 상태로 기다리는 프로세스 목록은 어디서 찾을 수 있을까요?per-cpu 타입의 runqueues.cfs_tasks 멤버를 찾으면 됩니다. 다음은 CPU4 runqueue의 예시입니다. (struct rq *) [-] (struct rq*)(((void*)&runqueues)+__per_cpu_offset[4]) = 0xFFFFFFC73E0F2900 -> ( (raw_spinlock_t) [D:0xFFFFFFC73E0F2900] lock = ((arch_spinlock_t) [D:0xFFFFFFC73E0F2900] raw_lock = ((u16) [D:0xFFFF (unsigned int) [D:0xFFFFFFC73E0F2918] nr_running
which - 리눅스에서 특정 프로그램의 위치 확인
리눅스에서 PATH에 등록된 디렉토리 안에 있는 특정 프로그램의 위치가 어디인지 확인하고 싶을 때 which를 사용하면 편리하다. PATH에 여러 디렉토리가 등록되어 있는데, 특정 프로그램이 이들중 어느 디렉토리에 속해 있는지 구분하고 싶을 때 사용한다. 아래의 예시를 보자. # PATH 변수에 등록된 디렉토리 확인 echo $PATH /usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin # 자바(java)의 위치 확인 which java /usr/bin/java # bash 셸의 위치 확인 which bash /bin/bash
[Kernel] 슬랩 페이지(slab page)가 관리하는 슬랩 오브젝트 갯수
슬랩 페이지 디스크립터가 관리하는 슬랩 오브젝트의 실제 메모리 덤프를 어떻게 접근할까요? 예를 들어 현재 페이지 디스크립터 주소가 0xEC778540 이라고 가정하겠습니다.그리고 각 멤버는 다음과 같구요. 눈으로 잠깐 봐도 kmalloc-64 타입의 슬랩 페이지임을 알 수 있겠죠. (struct page *) (struct page*)0xEC778540 = 0xEC778540 -> ( (long unsigned int) flags = 0x80, (struct address_space *) mapping = 0x0, (void *) s_mem = 0x0, (long unsigned int) index = 0xC518EC00, (void *) freelist = 0xC518E
[0410] Slab Memory Corruption Case Study#3 - 디버깅
난이도: 최하 커널 로그를 보니 Binder:1887_12란 프로세스가 7676767e 란 가상 주소를 처리 못해 데이터 어보트가 발생했습니다.[ 970.135274 / 04-07 17:58:32.685][7] Unable to handle kernel paging request at virtual address 7676767e[ 970.135315 / 04-07 17:58:32.685][7] pgd = d549c000[ 970.135339 / 04-07 17:58:32.685][0] [7676767e] *pgd=91d26831, *pte=00000000, *ppte=00000000[ 970.135392 / 04-07 17:58:32.685][7] Internal error: Oops: 17 [#



