per-CPU 타입 변수 분석

EEEFFEE·2024년 1월 23일

crash utility

목록 보기
3/5

24.01.23 최초 작성

1. runqueue

  • percpu타입의 변수이며 링크 참조
  • 각 cpu 코어마다 해당 자료구조를 가짐

1.1 crash

  • runq -m, p runqueues : 현재 모든 cpu의 런큐의 상태/시작 주소를 보여 줌
  • runq : 각 cpu 코어 별 실행중인 프로세스 나타냄

2. container_of() 매크로

  • linked list와 각 노드의 오프셋 주소를 활용해 각 노드에 접근할 수 있는 매크로

  • container_of(시작 주소, 구조체 이름, 구조체 필드)

3. for_each_process() 매크로

  • for_each_process() : 모든 프로세스를 순회하며 task_struct를 읽어 입력 인자에 저장함
    task_structstruct list_head.next필드에서 다음 프로세스를 가르키며 해당 자료구조를 활용해 전체 프로세스를 순회함

//	arch/arm/mm/init.c

static void update_sections_early(struct section_perm perms[], int n)
{
	struct task_struct *t, *s;

	for_each_process(t) {
		if (t->flags & PF_KTHREAD)
			continue;
		for_each_thread(t, s)
			if (s->mm)
				set_section_perms(perms, n, true, s->mm);
	}
	set_section_perms(perms, n, true, current->active_mm);
	set_section_perms(perms, n, true, &init_mm);
}

  • struct task_struct.tasks.next : 해당 task_struct의 다음 프로세스 주소를 나타냄
    (해당 주소에서 0x430을 빼면 다음 task_struct의 시작주소가 됨)

0개의 댓글