kernel stack & user stack

리눅스에서 실행 단위는 task이고(task_struct로 관리), 유저 프로세스/스레드도 task이며 커널 스레드도 task다. 스케줄러가 각 논리 CPU에 task를 배치해 실행한다. 유저 task는 유저 모드에서 유저 코드와 유저 스택을 사용하다가 syscall/예외로 커널에 진입하면 커널 모드로 전환되고 그 task 전용 커널 스택에서 커널 코드를 실행한 뒤 다시 유저 모드로 복귀한다. 커널 스레드는 유저 모드에서 실행할 코드/주소공간이 없어서 실행 시에는 커널 모드에서만 동작하며, 백그라운드 작업(메모리 회수 등)을 수행한다.

각각의 task 마다 스택이 2개가 있다고 한다 커널 스택 , 유저랜드 스택

그니깐 task_struct 에 실제로

C
randomized_struct_fields_start
    void *stack;

이런식으로 커널스택 주소가 있고 그리고 task_struct 구조체 안에 mm_struct가 있는데 이게 유저랜드 공간임 여기 안에 유저랜드 스택이 있는거