Linux 커널의 프로세스는 커널 모드에서 서로 다른 스레드에 대해 별도의 스택을 어떻게 할당합니까?

Linux 커널의 프로세스는 커널 모드에서 서로 다른 스레드에 대해 별도의 스택을 어떻게 할당합니까?

프로세스에 시스템 호출이 이루어지고 커널 모드에 있는 경우 2개의 스레드가 생성됩니다.

a) 커널에서 각 스레드의 스택은 어떻게 생성됩니까?

b) 스레드 중 하나가 다시 사용자 모드로 전환되고 다른 스레드가 커널 모드에 남아 있으면 상위 스레드가 할당한 커널 데이터(로컬)가 손실됩니까?

c) 생성된 두 스레드의 PID가 다른 이유는 무엇입니까?

답변1

커널을 많이 조사하고 동일한 주제와 관련된 프로젝트를 진행한 후 다음을 발견했습니다.

a) 예, 각 kthread에는 8k, 4k 등과 같은 아키텍처에 따라 달라지는 스택이 있습니다.

b) 예, 커널 스택이 비었을 때 사용자 공간으로 다시 전환하면 스레드 중 하나의 로컬 권한을 잃게 됩니다. 그러나 전역 변수를 선언하고 해당 변수를 실행하면 해당 스레드를 다른 스레드에서 사용할 수 있게 됩니다. . 또 한 가지 주목해야 할 점은 전체 커널에 단 1개의 데이터 세그먼트만 있다는 것입니다.

c) 두 스레드는 커널 컨텍스트에서 서로 다른 두 프로세스이고 ps에서 []로 표시되므로 두 스레드의 pid가 다릅니다.

관련 정보