Linux의 각 프로세스마다 커널 스택이 있는 이유는 무엇입니까?

Linux의 각 프로세스마다 커널 스택이 있는 이유는 무엇입니까?

최근에 리눅스에 대해 배우기 시작했는데, 일련의 질문이 있어서 물어보려고 합니다.

  1. 읽는 동안 '커널 스택'이라는 용어를 접했는데 Linux 커널이 각 프로세스에 대해 커널 스택을 사용하는 이유를 이해할 수 없습니다.

  2. 프로세스가 실행 중일 때 esp 레지스터에 프로세스의 커널 스택 최상위 주소가 있는 이유는 무엇이며
    해당 프로세스의 사용자 모드 스택 최상위 주소는 아닌 이유는 무엇입니까?

답변1

프로세스가 시스템 호출의 결과로 커널 모드에 진입하면 스택은 사용자 모드 스택에서 커널 스택으로 전환됩니다. 이는 커널의 무결성을 유지하기 위해 수행됩니다. 그렇지 않으면 프로세스(예: 다른 스레드)가 스택에 불쾌한 작업을 수행할 수 있습니다.

프로세스 상태를 저장하려면 각 프로세스마다 별도의 커널 스택이 필요합니다. 작업 전환이 수행되는 경우, 즉 현재 프로세스가 절전 모드로 전환되고 일부 다른 프로세스가 실행되도록 예약된 경우 상태를 저장해야 합니다. 이런 일이 발생하면 레지스터 값(스택 포인터 레지스터 포함)이 복원되어 실행될 프로세스가 일시 중단되었던 정확한 지점부터 계속될 수 있습니다.

관련 정보