![커널 스레드와 사용자 스레드 간의 컨텍스트 전환](https://linux55.com/image/158621/%EC%BB%A4%EB%84%90%20%EC%8A%A4%EB%A0%88%EB%93%9C%EC%99%80%20%EC%82%AC%EC%9A%A9%EC%9E%90%20%EC%8A%A4%EB%A0%88%EB%93%9C%20%EA%B0%84%EC%9D%98%20%EC%BB%A8%ED%85%8D%EC%8A%A4%ED%8A%B8%20%EC%A0%84%ED%99%98.png)
[이것]에서 복사하여 붙여넣으세요(https://www.tutorialspoint.com/operating_system/os_multi_threading) 협회:
- 스레드 전환에는 커널 모드 권한이 필요하지 않습니다.
- 사용자 수준 스레드는 생성 및 관리가 빠릅니다.
- 커널 스레드는 일반적으로 사용자 스레드보다 생성 및 관리 속도가 느립니다.
- 동일한 프로세스에서 한 스레드에서 다른 스레드로 제어를 전송하려면 커널 모드로 전환해야 합니다.
나는 표준 운영 체제 참고 서적을 읽는 동안 이러한 점을 본 적이 없습니다. 이러한 점이 논리적으로 들리지만 Linux에서는 어떻게 반영되는지 궁금합니다. 정확하게 말하자면:
누군가 사용자 스레드와 커널 스레드 간의 컨텍스트 전환과 관련된 자세한 단계를 제공하여 둘 사이의 단계 차이를 찾을 수 있습니까?
실제 컨텍스트 전환 예제나 코드와의 차이점을 설명할 수 있는 사람이 있습니까? 시스템 호출(커널 스레드 간 컨텍스트 전환의 경우) 및 스레드 라이브러리 호출(사용자 스레드 간 컨텍스트 전환의 경우)이 포함될 수 있습니다.
누군가 나를 컨텍스트 전환을 처리하는 Linux 소스 코드 라인(예: github에서)에 연결해 줄 수 있습니까?
커널 스레드 간의 컨텍스트 전환을 커널 모드로 변경해야 하는 이유도 궁금합니다. 첫 번째 스레드에 대해 이미 커널 모드에 있지 않습니까?
답변1
사용된 용어를 잘못 이해하신 것 같습니다.
링크된 튜토리얼과 많은 OS 강의/책의 맥락에서(예) 사용자 스레드와 커널 스레드의 전형적인 차이점은 다음과 같습니다.
- 커널 스레드 - 커널에 의해 관리되지만 사용자 공간 프로그램을 실행하는 스레드
- 사용자(수준) 스레드(일명"섬유") - 커널이 아무것도 모르고 전적으로 애플리케이션(또는 애플리케이션에서 사용하는 라이브러리)에 의해 관리되는 스레드입니다.pth와 같은) 사용자 공간에서
사용자 스레드를 살펴보는 목적은 일반적으로 협력적 멀티태스킹을 설명하고, 진정한 커널 스타일 컨텍스트 전환을 유지하는 이점을 보여주고, 학생들에게 컨텍스트 전환을 소개하는 것입니다.
대조적으로, Linux 커널의 맥락에서 이러한 용어는 다르게 정의됩니다.
- 커널 스레드 - 커널 공간에서 실행되는 커널 작업을 위해 커널이 생성한 경량 스레드입니다.
- 사용자 스레드 - 커널에 의해 관리되고 사용자 공간에서 실행되는 애플리케이션 스레드, 즉
pthread_create()
유사한 라이브러리 함수 또는 하위 수준 시스템 호출에 의해clone()
생성된 스레드입니다.