본문 바로가기
CS/운영체제

13. 멀티스레드 구현

by D.O.T 2024. 4. 22.
멀티 스레드 구현 ?

 

개발자로 거듭나려면 꼭 필요한 개념이다. 우리도 코드를 작성하면서 다양한 사용자에 대해 작업을 해야할 것이다.

그 때, 스레드를 사용한다면 우리가 만든 스레드가 시스템에서 스케줄 될 수 있도록 하는 방법이다.

 

크게 N:1 매핑, 1:1 매핑, N:M 매핑이 있다. X : Y 꼴로, X개의 사용자 레벨 스레드를 Y개의 커널 레벨 스레드로 매핑한다는 내용인데 이 외에도 1:N 매핑도 있다. 하지만 중요한 N:1, 1:1 만 작성하도록 하겠다

 

.N(User):1(Kernel) 매핑

 

말 그대로 N개의 사용자 스레드가 1개의 커널 스레드로 매핑하는 개념이다.

운영체제(커널 입장)는 모든 프로세스를 Main 스레드라는 단일 프로세스로 처리한다.

이 말은 커널 영역에 저장되는 커널 레벨 스레드의 TCB가 1개라는 의미이다.

 

즉, 스레드 컨텍스트 스위칭은 사용자 레벨에서만 발생하게 된다는 의미이다.

장점으로는 사용자 레벨에서만 컨텍스트 스위칭이 발생하기 때문에 실행 속도가 매우 빠르다.

단점으로는 현대 PC는 멀티 코어 CPU가 보편화되어 있기 때문에 비효율적이라는 점이다.

그 외에도 하나의 사용자 레벨 스레드가 블록되면 프로세스 전체가 블록되는 단점이 발생한다.

 

스레드 컨텍스트 스위칭 생명주기에 따르면 Block 된 내용이 있으면 Ready Queue에 대기 중인 다른 Thread를 처리하는 것이 맞다. 하지만 그건 프로세스 기반 운영체제일 경우다. 프로세스 하나에서 TCB를 관리하기 때문에 그렇다.

하지만 멀티 스레드 환경에서 N:1 매핑이 되어있을 경우, 커널 공간에서는 사용자 레벨 스레드의 어떤 스레드가 Block 되었는지 알 수 없다. 왜냐하면 사용자 레벨 스레드의 TCB가 사용자 공간에 있기 때문이다.  그래서 커널 레벨 스레드도 Block이 되고 다른 사용자 레벨 스레드는 실행할 수 없는 상태가 되어 버린다.

N:1 매핑의 문제점

1(User) : 1(Kernel) 매핑

 

말 그대로 사용자 레벨 스레드와 커널 레벨 스레드가 1개씩 연결되어 있는 구조이다.

 

장점으로 개념이 단순해서 구현이 쉽고, 높은 병렬성을 제공하고 있다는 것이다.

그리고 N:1 매핑의 단점이었던 사용자 레벨 스레드가 Block 되어도 응용 프로그램 전체가 Block되지 않는다.

 

단점으로 커널의 진입횟수가 증가해서 커널의 부담이 생긴다는 것이다. 사용자 레벨 스레드가 많아질수록 커널의 부담이 커진다. 하지만 대부분 현대 OS에서는 1:1 매핑을 채택하고 있다.

 

추가로 Java의 JVM 또한 1:1 매핑으로 구성되어있다.

1:1 Mapping


그 외, N:M 매핑, 1:N 매핑도 있지만 잘 사용하지도 않아서 넘어가도록 한다.

 

멀티 스레딩의 장점
  • 병렬 실행으로 높은 실행 성능을 보인다.
  • 우수한 응답성을 보인다.
    • 동시 처리, 한 스레드가 블록되어도 대안 가능
  • 시스템 자원 사용이 프로세스에 비해 효율적이다.
  • 프로세스에 비해 작성이 쉽고 통신이 효율적이다.
    • 응용 프로그램을 여러 함수로 분할하여 구조가 단순해짐.
    • 확장성이 우수함.
멀티 스레딩의 주의할 점
  • 한 스레드가 fork() 호출을 할 경우, 프로세스의 다른 스레드들은 종료되고 fork()를 호출한 스레드만 main() 스레드를 만들게 되는 이슈가 있다.
  • 한 스레드가 exec()를 호출할 경우 모든 스레드가 종료되고 프로세스가 새로운 프로세스로 실행된다.
  • 동기화 문제, 이후에 다룬다.

'CS > 운영체제' 카테고리의 다른 글

15. CPU Scheduling Algorithm  (0) 2024.04.22
14. CPU Scheduling  (0) 2024.04.22
12. 커널 레벨 스레드와 사용자 레벨 스레드  (1) 2024.04.22
11. 스레드 주소 공간과 컨텍스트  (0) 2024.04.22
10. 스레드 (Thread)  (0) 2024.04.21