
프로세스에 시스템 호출이 이루어지고 커널 모드에 있는 경우 2개의 스레드가 생성됩니다.
a) 커널에서 각 스레드의 스택은 어떻게 생성됩니까?
b) 스레드 중 하나가 다시 사용자 모드로 전환되고 다른 스레드가 커널 모드에 남아 있으면 상위 스레드가 할당한 커널 데이터(로컬)가 손실됩니까?
c) 생성된 두 스레드의 PID가 다른 이유는 무엇입니까?
답변1
커널을 많이 조사하고 동일한 주제와 관련된 프로젝트를 진행한 후 다음을 발견했습니다.
a) 예, 각 kthread에는 8k, 4k 등과 같은 아키텍처에 따라 달라지는 스택이 있습니다.
b) 예, 커널 스택이 비었을 때 사용자 공간으로 다시 전환하면 스레드 중 하나의 로컬 권한을 잃게 됩니다. 그러나 전역 변수를 선언하고 해당 변수를 실행하면 해당 스레드를 다른 스레드에서 사용할 수 있게 됩니다. . 또 한 가지 주목해야 할 점은 전체 커널에 단 1개의 데이터 세그먼트만 있다는 것입니다.
c) 두 스레드는 커널 컨텍스트에서 서로 다른 두 프로세스이고 ps에서 []로 표시되므로 두 스레드의 pid가 다릅니다.