Linux의 모든 프로세스에 커널 스택이 있는 이유는 무엇입니까?

Linux의 모든 프로세스에 커널 스택이 있는 이유는 무엇입니까?

저는 최근에 Linux를 배우기 시작했는데 여러분들께 묻고 싶은 질문이 있습니다.

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

  2. 프로세스가 실행 중일 때 esp 레지스터에는
    해당 프로세스의 커널 스택 최상위 주소가 있지만 해당 프로세스의 사용자 모드 스택 최상위 주소는 왜 없는 걸까요?

답변1

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

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

관련 정보