init task? swapper? idle task?

init task는 처음 생성되는 태스크이며 부팅을 수행한다.

init task의 정의와 초기화

init task를 나타내는 task_struct 구조체와 thread_union 공용체는 아래와 같이 정의되어 있다

init/init_task.c

struct task_struct init_task = INIT_TASK(init_task);
...
union thread_union init_thread_union __init_task_data =
        { INIT_THREAD_INFO(init_task) };

각각 INIT_TASK, INIT_THREAD_INFO 매크로를 통해 초기화되고 있다. 한 태스크의 task_struct구조체와 thread_info 구조체는 늘 교차연결되어 있다. init task도 아래와 같이 교차 연결되어 있다. 물론 이 외에도 다른 많은 자료구조와도 연결이 되어있다.

arch/arm64/include/asm/thread_info.h

#define INIT_THREAD_INFO(tsk)                          \
{                                                      \
        .task           = &tsk,                       \
...
}
#define init_thread_info        (init_thread_union.thread_info)

#define INIT_TASK(tsk)                           \
{                                                \
...
        .stack          = &init_thread_info,    \
...
        .active_mm      = &init_mm,             \
...
        .fs             = &init_fs,             \
        .files          = &init_files,          \
        .signal         = &init_signals,        \
        .sighand        = &init_sighand,        \
        .nsproxy        = &init_nsproxy,        \

init task가 하는 일

  1. 커널부팅을 수행함
  2. 부팅이 완료되면 idle task로 동작함

results matching ""

    No results matching ""