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가 하는 일
- 커널부팅을 수행함
- 부팅이 완료되면 idle task로 동작함