시스템 프로그래밍

11-2. Windows에서의 프로세스와 쓰레드

CalebHong 2022. 5. 31. 15:17

Windows에서의 프로세스와 쓰레드

- 프로세스A와 프로세스B가 있으며, 프로세스A는 3개의 쓰레드, 프로세스B는 2개의 쓰레드가 있다면,

  - 프로세스A의 쓰레드1,2가 동시 실행 중이면 쓰레드3은 Block상태 즉, I/O연산 중에 있거나 우선순위가 낮기 때문

- 쓰레드와 프로세스를 구분하기는 어렵지만 '프로세스 내에 존재하는 실행의 흐름'으로 간주

- 쓰레드는 메인 코드가 있으며 독립된 스택 영역을 사용

- 실행 흐름의 주체는 프로세스가 아니라 쓰레드(메인 함수 호출 또한 메인 쓰레드에 의해 실행 됨)

- 쓰레드가 실행할 수 있는 환경을 제공해주는 것이 프로세스이며, 그 환경 안에서 쓰레드가 동작

 

쓰레드 구현 모델에 따른 구분

Kernel Level Thread와 User Level Thread

커널 레벨 쓰레드(좌), 유저 레벨 쓰레드(우)

O.S는 멀티 프로세스를 지원 여부로 나뉘며, 또한 쓰레드를 지원 여부로 나뉨

ex) OS1: 쓰레드 지원X, OS2: 쓰레드 지원O

 - 쓰레드를 지원한다는 것은 커널 레벨에서 커널이 쓰레드 기능을 제공함을 의미

 - OS1은 쓰레드 기능을 지원하지 않기 때문에 쓰레드를  라이브러리 형태로 제공하여 사용

 - OS2는 커널이 제공하는 API 형태의 쓰레드를 사용

  커널 레벨 쓰레드 유저 레벨 쓰레드
쓰레드 커널이 제공하는 API 형태의 쓰레드를 사용 라이브러리 형태로 제공하여 사용
(유저가 만들어 사용하는 쓰레드)
    모든 라이브러리는 유저 영역에 포함
쓰레드 관리 커널이 직접 쓰레드의 정보를 가지고 관리 커널은 쓰레드의 정보를 알지 못하며 단지 프로세스만을 관리
  스케줄러가 직접 관리하기에 모든 실행 중인 쓰레드들은 우선순위나 모든 조건이 동일하다면 1/n의 실행 시간을 할당받게 됨(쓰레드A,B,C 모두 1/3씩 할당) 프로세스에게 할당받은 시간 내에서 쓰레드들이 나눠 사용할 수 있기에 모든 쓰레드가 동일한 실행 시간을 할당받지 못하게 됨(쓰레드A,B는 1/4이 할당, 쓰레드C는 1/2이 할당)
처리 속도 상대적으로 처리 속도가 느림 처리 속도가 빠르다
장점 커널이 직접 제공해 주기 때문에 안정성과 다양한 기능성 제공 유저 모드에서 커널 모드로의 전환이 필요 없음
단점 유저 모드에서 커널 모드로의 전환이 빈번 프로세스 단위 블로킹이 되면 프로세스 내 모든 쓰레드가 함께 블로킹

 

커멀 모드와 유저 모드

- 커널 영역에 커널 코드가 맵핑

- 유저 영역에 사용자의 실행 프로그램의 코드가 맵핑

- 두 영역은 엄격하게 구분되지 않기에 커널 모드와 유저 모드를 따로 두어 커널 모드에서는 모든 영역에 접근이 가능하나 유저 모드에서는 커널 영역에 접근이 불가하게 함

 ex) 커널 모드 동작: 스케줄러 동작할 때, 프로세스 생성할 때 등

 

커널 레벨 쓰레드가 상대적으로 처리 속도가 느린 이유

 - 커널은 쓰레드를 관리해야 하며, 쓰레드 간의 CS(Context Switching)이 일어날 때마다 커널모드로 변경해야 함(기능↑ 속도↓)

 - 유저 레벨 쓰레드에서 커널은 관리대상이 큰 단위인 프로세스를 관리할 때에만 커널모드로 변경하기에 상대적으로 빠름(기능↓ 속도↑)