경량 프로세스
Light-weight process컴퓨터 운영 체제에서 경량 프로세스(LWP)는 멀티태스킹을 실현하는 수단입니다.Unix System V 및 Solaris에서 사용되는 전통적인 의미의 LWP는 단일 커널 스레드 위의 사용자 공간에서 실행되며 동일한 프로세스 내의 다른 LWP와 주소 공간 및 시스템 리소스를 공유합니다.스레드 라이브러리에 의해 관리되는 여러 사용자 레벨 스레드를 하나 또는 여러 LWP 위에 배치할 수 있으므로 사용자 레벨에서 멀티태스킹을 수행할 수 있으므로 퍼포먼스가 [1]향상될 수 있습니다.
일부 운영 체제에서는 커널 스레드와 사용자 스레드 사이에 별도의 LWP 계층이 없습니다.즉, 사용자 스레드는 커널 스레드 위에 직접 구현됩니다.이러한 맥락에서 "경량 프로세스"라는 용어는 일반적으로 커널 스레드를 가리키며 "스레드"라는 용어는 사용자 [2]스레드를 가리킬 수 있습니다.Linux 에서는 특정 프로세스가 리소스를 공유할 수 있도록 함으로써 사용자 스레드가 구현되므로 이러한 프로세스를 "경량 프로세스"[3][4]라고 부르기도 합니다.마찬가지로 SunOS 버전4 이후(Solaris 이전)에서는 "경량 프로세스"는 사용자 [1]스레드를 가리킵니다.
커널 스레드
커널 스레드는 전적으로 커널에 의해 처리됩니다.프로세스와 관련지을 필요는 없습니다.커널은 특정 작업을 수행해야 할 때마다 작성할 수 있습니다.커널 스레드는 사용자 모드에서 실행할 수 없습니다.LWP(별도의 레이어인 시스템의 경우)는 커널 스레드에 바인드되어 사용자 수준의 컨텍스트를 제공합니다.여기에는 LWP가 속한 프로세스의 공유 리소스에 대한 링크가 포함됩니다.LWP가 일시 중단되면 재개될 때까지 사용자 수준의 레지스터를 저장해야 하며 기본 커널 스레드도 자체 커널 수준의 레지스터를 저장해야 합니다.
성능
LWP는 사용자 스레드보다 작성 속도가 느리고 비용이 많이 듭니다.LWP가 작성될 때마다 대응하는 커널스레드를 작성하기 위해 먼저 시스템콜을 해야 돼요그 결과 스위치가 커널모드가 됩니다이러한 모드 스위치에는 일반적으로 커널과 사용자 공간 간의 파라미터 복사가 포함됩니다.또한 비활성 동작을 체크하기 위해 파라미터를 검증하기 위한 추가 절차가 커널에 필요할 수 있습니다.LWP 간의 컨텍스트 전환은 프리엠프트되는 LWP가 레지스터를 저장하고 커널 스레드가 레지스터를 저장하기 위해 커널 모드로 들어가야 함을 의미하며 스케줄링되는 LWP도 [1]커널과 사용자 레지스터를 별도로 복원해야 합니다.
따라서 일부 사용자 수준 스레드 라이브러리는 LWP 위에 여러 사용자 스레드를 구현할 수 있습니다.사용자 스레드는 시스템 호출 없이 사용자 공간에서 생성, 파괴, 동기화 및 전환이 가능하며 커널 모드로 전환됩니다.이로 인해 스레드 작성 시간과 컨텍스트스위치의 [1]퍼포먼스가 대폭 향상됩니다.그러나 커널과 함께 잘 작동하는 사용자 수준의 스레드 스케줄러를 구현하는 데 어려움이 있습니다.
스케줄러 활성화
사용자 스레드 라이브러리는 사용자 스레드를 스케줄링하지만 커널은 기본 LWP를 스케줄링합니다.커널과 스레드라이브러리 간의 조정 없이 커널은 차선의 스케줄링 결정을 내릴 수 있습니다.또한 여러 LWP를 통해 분산된 사용자 스레드가 현재 [1]실행되고 있지 않은 다른 사용자 스레드에서 사용되는 것과 동일한 리소스를 획득하려고 할 때 교착 상태가 발생할 수 있습니다.
이 문제의 해결 방법 중 하나는 스케줄러의 활성화입니다.이것은 커널과 스레드라이브러리가 협력하는 방법입니다.커널은 스레드 라이브러리의 스케줄러에 특정 이벤트(예: 스레드가 차단될 때)를 통지하고 스레드 라이브러리는 수행할 액션을 결정할 수 있습니다.커널로부터의 통지 콜을 「업 콜」이라고 부릅니다.
사용자 레벨 라이브러리는 기본 메커니즘을 제어할 수 없으며 커널로부터 알림만 수신하고 프로세서가 아닌 사용 가능한 LWP에 사용자 스레드를 스케줄링합니다.커널의 스케줄러는 프로세서 상에서 LWP를 스케줄 하는 방법을 결정합니다.즉, LWP는 스레드라이브러리에 의해 "가상 프로세서"[5]로 인식될 수 있습니다.
지원 운영 체제
Solaris는 버전 2.2 이후 별도의 LWP 레이어를 구현하고 있습니다.버전 9 이전 Solaris에서는 LWP와 사용자 스레드 간의 다대다 매핑이 가능했습니다.그러나 이는 커널 [1][6]스케줄러의 복잡성과 성능 향상으로 인해 폐기되었습니다.
UNIX System V 및 최신 파생 모델인 IRIX, SCO OpenServer, HP-UX 및 IBM AIX는 사용자 스레드와 LWP [5][7]간에 다대다 매핑을 허용합니다.
실장
- 병렬 확장 기능(Microsoft)
- GNU 휴대용 스레드
- 녹색 스레드(Java)
- 경량 커널 스레드
「 」를 참조해 주세요.
레퍼런스
- ^ a b c d e f Vahalia, Uresh (1996). "Threads and Lightweight Processes". UNIX Internals - The New Frontiers. Prentice-Hall Inc. ISBN 0-13-101908-2.
- ^ "IBM AIX Compilers". IBM. 2004. Archived from the original on 2012-07-14. Retrieved 24 Jan 2010.
On AIX, the term lightweight process usually refers to a kernel thread.
- ^ Bovet, Daniel P.; Cesati, Marco (2005). "3.1. Processes, Lightweight Processes, and Threads". Understanding the Linux Kernel (3rd ed.). O'Reilly Media.
- ^ Walton, Sean (1996). "Linux Threads Frequently Asked Questions (FAQ)". Retrieved 24 Jan 2010.
- ^ a b Silberschatz; Galvin; Gagne (2004). "Chapter 5 - Threads". Operating System Concepts with Java (Sixth ed.). John Wiley & Sons, Inc.
- ^ "Multithreading in the SolarisTM Operating Environment" (PDF). Sun Microsystems. 2002. Retrieved 24 Jan 2010.
- ^ "IBM AIX 6.1 - Thread tuning". IBM. 2009. Retrieved 24 Jan 2010.