코딩공부/OS

11. 스레드

뉼👩🏻‍💻 2023. 1. 6. 14:56
728x90
반응형
SMALL

 

스레드 프로세스
CPU 입장에서의 작업 단위
(= 프로세스로부터 전달받은 스레드)
운영체제 입장에서의 작업 단위

 

 

- 운영체제는 코드와 데이터를 메모리에 가져오고, 프로세스 제어 블록을 생성하고, 작업에 필요한 메모리 영역을 확보한 후 

준비된 프로세스를 준비 큐에 삽입함

- 프로세스가 생성되면 CPU 스케쥴러는 프로세스가 해야할 일을 CPU에 전달하고 실제 작업은 CPU가 수행한다

: CPU 스케줄러가 CPU에 전달하는 일 하나 = 스레드

 

* 작업의 상대적인 크기 

처리(job) > 프로세스 (task) > 스레드 (operation) 

 

* 일괄 작업 batch job

- 여러 개의 스레드가 모여 프로세스를 이루고, 여러 개의 프로세스가 모여 처리가 되며, 여러 개의 프로세스를 모아서 한꺼번에 처리하는 방법

 

 

* 프로세스 간 통신 Inter Process Communication, IPC

- 서로 독립적인 프로세스가 데이터를 주고받을 때 이용하는 것 

 

* 멀티스레드 통신

- 멀티스레드는 변수나 파일 등을 공유하고 전역 변수나 함수 호출 등의 방법으로 스레드 간 통신을 함 

 

 

 📍 스레드 관련 용어 

◼️ 멀티스레드

: 프로세스 내 작업을 여러 개의 스레드로 분할함으로써 작업의 부담을 줄이는 프로세스 운영 기법

 

◼️ 멀티태스킹

: 운영체제가 CPU에 작업을 줄 때 시간을 잘게 나누어 배분하는 기법

➡️ 시분할 시스템 time-sharing system : 여러 스레드에 시간을 잘게 나누어 주는 시스템

 

 

◼️  멀티 프로세싱

: CPU를 여러 개 사용하여 여러 개의 스레드를 동시에 처리하는 작업 환경 

= 병렬처리에서의 슈퍼스칼라 기법

= 네트워크로 연결된 여러 컴퓨터에 스레드를 나누어 협업하는 분산 시스템

- 하나의 컴퓨터에 여러 개의 CPU 혹은 하나의 CPU내 여러 개의 코어에 스레드를 배정하여 동시에 작동하는 것 

 

 

◼️  CPU 멀티스레드 

한 번에 하나씩 처리해야 하는 스레드를 파이프라인 기법을 이용하여 동시에 여러 스레드를 처리하도록 만든 병렬 처리 기법 

 

 

* 오늘날의 운영체제는 프로세스를 다양한 스레드로 나누어 여러 개의 코어에 배분함으로써 시스템의 효율을 높임 

 

 

 

가벼운 프로세스 Light Weight Process LWP 무거운 프로세스 Heavy Weight Process HWP 

 

 

* 스레드 라이브러리

: 운영체제가 지원하는 라이브러리를 통해 생성됨 

- 마하 운영체제의 C-threads

- 솔라리스 운영체제의 threads

- 자바 : 라이브러리 형태가 아니라 프로그래밍 언어 자체에서 스레드를 제공함 

   - 스레드 클래스 내의 run() 함수를 오버라이딩하여 사용

 

 

 📍 멀티스레드의 장단점 

◼️ 장점

 효율성 향상 

: 여러 개의 프로세스를 생성하는 것과 달리 멀티스레드는 불필요한 자원의 중복을 막음으로써 시스템의 효율이 향상됨 

- 프로세스 내 공유가 가능한 부분을 제외하고 실행과 관련된 부분을 스레드로 나누어 관리하며 자원의 중복 사용을 피함으로써 낭비를 막을 수 있음

- 하나의 프로세스에서 여러 스레드를 사용하면 작업의 효율을 높일 수 있음

 

• 응답성 향상

: 한 스레드가 입출력으로 인해 작업이 진행되지 않더라도 다른 스레드가 작업을 계속하여 사용자의 작업 요구에 빨리 응답할 수 있음

  ex. 채팅프로그램으로 채팅을 하면서 파일을 주고 받기 

 

자원공유

:  한 프로세스 내에서 독립적인 스레드를 생성하면 프로세스가 가진 자원을 모든 스레드가 공유하게 되어 작업을 원활하게 진행할 수 있음 

 

• 다중 CPU 지원

: 2개 이상의 CPU를 가진 컴퓨터에서 멀티스레드를 사용하면 다중 CPU가 멀티스레드를 동시에 처리하여 CPU사용량이 증가하고 프로세스의 처리 시간이 단축됨 

 

↔️ 단일 스레드는 프로세스 전체의 입출력이 끝날 때까지 대기 상태에 머물러야 하며, 요청한 입력이 끝나야만 다시 재생할 수 있음 

 

 

◼️ 단점

- 모든 스레드가 자원을 공유하기 때문에 한 스레드에 문제가 생기면 전체 프로세스에 영향을 미침 

↔️ 프로세스를 여러 개 만드는 방식의 경우 각 프로세스가 독립적이기 때문에 한 프로세스의 문제가 다른 프로세스로 전달되지 않음 

 

 

 

 📍 멀티스레드 모델

프로세스 - 커널 프로세스

                - 사용자 프로세스 

스레드 - 커널 스레드 kernel thread

             - 사용자 스레드 user thread 

: 사용자 스레드가 커널 스레드를 사용하려면 시스템 호출로 커널 기능을 이용해야 함 

 

◼️ 사용자 레벨 스레드 user-level thread  (1 to N 모델)

: 운영체제가 멀티스레드를 지원하지 않을 때 사용하는 방법 ( 초기의 스레드 시스템에서 이용됨) 

- 사용자 레벨에서 스레드를 구현하기 때문에 관련 라이브러리를 사용하여 구현하며, 라이브러리는 커널이 지원하는 스케쥴링이나 동기화 같은 기능을 대신 구현해줌 

➡️ 커널 입장에서 이 스레드는 하나의 프로세스처럼 보임 

 

- 라이브러리가 직접 스케쥴링을 하고 작업에 필요한 정보를 처리하기 때문에 문맥 교환이 필요없음 

 

• 단점 

- 여러 개의 스레드가 하나의 커널 스레드와 연결되기 때문에 커널 스레드가 입출력 작업을 위해 디기 상태에 들어가면 모든 사용자 스레드가 같이 대기하게 됨 

- 한 프로세스의 타임 슬라이스를 여러 스레드가 공유하기 때문에 여러 개의 CPU를 동시에 사용할 수 없음 

: CPU를 여러 개 갖추고 멀티스레드를 지원하는 커널의 경우 스레드를 여러 CPU에 나누어 작업시키는 것이 가능하나 사용자 레벨 스레드는 하나의 프로세스로 인식되므로 작업을 나눌 수 없음 

 

 

 

◼️ 커널 레벨 스레드 kernel-level thread (1 to 1 모델)

: 커널이 멀티스레드를 지원하는 방식 

하나의 사용자스레드가 하나의 커널 스레드와 연결됨

- 독립적으로 스케쥴링이 되므로 특정 스레드가 대기 상태에 들어가도 다른 스레드는 작업을 계속할 수 잇음 

- 커널이 제공하는 보호 기능과 같은 모든 기능을 사용할 수 도 있음 

 

 장점

: 커널 레벨에서 모든 작업을 지원하기 때문에 멀티 CPU를 사용할 수 있음

- 하나의 스레드가 대기 상태에 있어도 다른 스레드는 작업을 계속할 수 있음 

- 커널의 기능을 사용하므로 보안에 강하고 안정적으로 작동함 

 

• 단점

- 문맥 교환을 할 때 오버헤드 때문에 느리게 작동함 

 

 

◼️ 멀티 레벨 스레드 multi-level thread (하이브리드 스레드 hybrid thread) - M to N 모델

: 사용자 레벨 스레드와 커널 레벨 스레드를 혼합한 방식 

- 멀티 레벨 스레드에서는 커널 스레드의 개수가 사용자 스레드보다 같거나 적음

 

• 장점

- 하나의 커널 스레드가 대기 상태에 들어가면 다른 커널 스레드가 대신 작업을 하여 사용자 레벨 스레드보다 유연하게 작업ㅇ르 처리할 수 있음 

 

• 단점 

- 커널 레벨 스레드를 같이 사용하기 때문에 여전히 문맥 교환 시 오버헤드가 있어 사용자 레벨 스레드만큼 빠르지 않음 

➡️ 빠르게 움직여야 하는 스레드는 사용자 레벨 스레드로 작동하고, 안정적으로 움직여야 하는 스레드는 커널 레벨 스레드로 작동함 

 

728x90
반응형