Guillermo Austin Kim

Sources

Posts

998 posts

[리눅스커널] 프로세스: struct thread_info 구조체 주소 위치는 어디일까?

Guillermo Austin Kim|2019년 8월 9일

struct thread_info 구조체 필드에 대해 소개했습니다. 이어서 이 구조체가 어느 위치에 있는지 알아볼까요? 프로세스 스택에서 struct thread_info 구조체 위치 확인하기struct thread_info 구조체는 프로세스 세부 실행 속성 정보를 담고 있으며 프로세스 마다 1개씩 존재합니다. 다음 그림을 보면서 struct thread_info 구조체 위치를 알아볼까요? [그림 4.15] 프로세스 스택에서 struct thread_info 구조체 위치 위 그림에서 프로세스 스택 최상단 주소는 0x80C00000 그리고 스택 최하단 주소는 0x80C02000입니다. 그런데 struct thread_info 구조체 주소는 위 그림과 같이 프로세스 스택 최상단 주소인 0x8

[리눅스커널] 프로세스: struct thread_info 구조체 분석하기

Guillermo Austin Kim|2019년 8월 9일

struct thread_info 구조체는 프로세스 실행 흐름을 관리하는 중요한 정보를 저장합니다. 프로세스 스케줄링 실행 시 이전에 실행했던 레지스터 정보와 프로세스 컨택스트 정보를 이 구조체 필드에서 확인할 수 있습니다. struct thread_info 구조체 선언부 분석하기struct thread_info 구조체 선언부를 볼까요? [https://github.com/raspberrypi/linux/blob/rpi-4.19.y/arch/arm/include/asm/thread_info.h]struct thread_info { unsigned long flags; /* low level flags */ int preempt_count; /* 0 => preemptable, <0 =&g

[리눅스커널] 프로세스: current 매크로란

Guillermo Austin Kim|2019년 8월 8일

이제껏 알아봤듯 프로세스 속성 정보를 관리하는 struct task_struct 타입인 태스크 디스크립터는 커널에서 가장 중요하게 관리하는 자료구조입니다. 여기에는 그럴만한 이유가 있습니다.  커널은 태스크 디스크립터에 접근해 프로세스 정보를 수시로 접근하고 저장한다. 태스크 디스크립터에 속성 정보로 함수 실행 흐름이 바뀐다. 그렇다보니 다음 요건을 충족하는 태스크 디스크립터 주소에 접근하는 매크로 코드가 있으면 좋겠다고 생각합니다. 간단한 형태의 코드  시스템에 부하를 주지 않는 코드 커널에서는 이런 요구 사항을 만족하는 매크로를 제공하는데 이를 current 매크로라고 부릅니다.  current 매크로는 현재 구동 중인 프로세스의 태스크 디스크립터 주소을 알려줍니다.

[리눅스커널] 프로세스: do_task_dead() 함수 분석하기

Guillermo Austin Kim|2019년 8월 7일

do_task_dead() 함수 분석하기이어서 do_task_dead() 함수 코드를 분석하겠습니다.[https://github.com/raspberrypi/linux/blob/rpi-4.19.y/kernel/sched/core.c]01 void __noreturn do_task_dead(void)02 {03 set_special_state(TASK_DEAD);04 current->flags |= PF_NOFREEZE;05 06 __schedule(false);07 BUG();08 for (;;)09 cpu_relax();10 } 03 번째 줄 코드에서 set_special_state() 함수를 호출해 프로세스 상태를 TASK_DEAD 플래그로 바꿉니다. 04 번째 줄에서는 프로세스 태스

[리눅스커널] 스케줄링: struct sched_info 구조체 알아보기

Guillermo Austin Kim|2019년 8월 7일

struct sched_info 구조체는 프로세스의 스케줄링 동작 세부 정보를 저장하며 실체는 다음과 같습니다.[https://elixir.bootlin.com/linux/v4.19.30/source/include/linux/sched.h] struct sched_info {#ifdef CONFIG_SCHED_INFO /* Cumulative counters: */ /* # of times we have run on this CPU: */ unsigned long pcount; /* Time spent waiting on a runqueue: */ unsigned long long run_delay; /* Timestamps: */ /* When did we last run on a CP