1 스레드의 개념
스레드란 프로세스의 코드에 정의된 절차에 따라 CPU에 작업 요청을 하는 실행 단위이다.
운영체제 입장에서의 작업 단위는 프로세스이고, CPU 입장에서의 작업 단위는 스레드이다.
멀티스레드 : 프로세스 내 작업을 여러 개의 스레드로 분할해서 작업의 부담을 줄이는 기법
멀티태스킹 : 운영체제가 CPU에 작업을 줄 때 시간을 잘게 나누어 배분하는 기법이다. 이렇게 여러 스레드에 시간을 잘게 나눠주는 시스템을 시분할 시스템이라고 한다.
멀티프로세싱 : CPU를 여러 개 사용하여 여러 개의 스레드를 동시에 처리하는 환경
CPU 멀티스레드 : 스레드를 파이프라인 기법을 이용하여 동시에 여러 스레드를 처리하도록 만든 병렬 처리 기법
2 멀티스레드의 구조와 예
fork() 시스템 콜의 경우 프로세스의 코드 일부, PCB, 공유 변수가 메모리의 여러 곳에 중복되어 메모리가 낭비된다.
이렇게 멀티 태스킹의 낭비 요소를 제거하기 위해, 비슷한 일을 하는 2개의 프로세스를 만드는 대신,
코드, 데이터 등을 공유하며 여러 개의 일을 하나의 프로세스 내에서 하는 것을 멀티스레드라고 한다.
멀티 스레드는 코드, 파일 등의 자원을 공유함으로써 자원의 낭비를 막고 효율성을 향상한다.
이런 의미에서 스레드는 가벼운 프로세스라고 부르고
스레드가 1개인 일반 프로세스는 무거운 프로세스라고 부른다.
3 멀티 스레드의 장단점
응답성 향상 : 한 스레드가 입출력으로 작업이 진행되지 않아도 다른 스레드가 작업을 계속하여 작업 요구에 빠르게 응답할 수 있다.
자원 공유 : 프로세스가 가진 자원을 모든 스레드가 공유하게 되어 작업을 원활하게 진행
효율성 향상 : 같은 프로세스를 여러개 생성하는 것과 달리, 불필요한 자원의 중복을 막음으로써 효율이 높아진다.
단점으로는 한 스레드에 문제가 생기면 전체 프로세스에 영향을 미친다.
4 멀티스레드 모델
커널 스레드 : 커널이 직접 생성하고 관리하는 스레드
사용자 스레드 : 라이브러리에 의해 구현된 일반적인 스레드.
사용자 레벨 스레드 : 운영체제가 멀티스레드를 지원하지 않을 때 사용하는 방법으로 사용자 레벨에서 스레드를 구현하기 때문에 라이브러리를 사용하여 구현한다.
커널 입장에서 이 스레드는 하나의 프로세스처럼 보인다. 따라서 사용자 프로세스 내에 여러개의 스레드가 존재하지만 커널의 스레드 한 개와 연결되기 때문에 1 to N 모델이라고도 부른다.
사용자 레벨 스레드는 라이브러리가 직접 스케줄링하고 작업에 필요한 정보를 처리하기 떄문에 Context Switching이 필요 없다. 따라서 부가적인 작업이 줄어들어 속도가 빠르다.
단점이라면 여러 개의 스레드가 한 개의 커널 스레드와 연결되기 때문에 커널 스레드가 입출력 작업을 위해 대기 상태에 들어가면 모든 사용자 스레드가 같이 대기하게 된다. 또한 직접 구현하기 때문에 보안에 취약하다.
커널 레벨 스레드
커널이 멀티 스레드를 지원하는 방식으로 하나의 사용자 스레드가 하나의 커널 스레드와 연결되기 때문에 1 to 1 모델이라고 부른다. 독립적인 스케줄링이 되므로 멀티 CPU를 사용할 수 있고 하나의 커널 스레드가 대기 상태에 있어도 다른 스레드로 작업을 계속할 수 있다.
하지만 Context Switching이 발생해 오버헤드가 있다.
멀티레벨 스레드
사용자 레벨 스레드와 커널 레벨 스레드를 혼합한 방식으로 M to N 모델이라고 부른다.
유연하게 작업을 처리할 수 있지만 여전히 Context Switching으로 인한 오버헤드가 있다.
'프로그래밍 이론 & 책 > 운영체제' 카테고리의 다른 글
[운영체제] 4.2 스케줄링 시 고려사항 (0) | 2020.05.25 |
---|---|
[운영체제] 4.1 스케줄링의 개요 (0) | 2020.05.25 |
[운영체제] 3.3 프로세스의 연산 (0) | 2020.05.22 |
[운영체제] 3.2 프로세스 제어 블록(PCB)와 문맥 교환(Context Switch) (0) | 2020.05.22 |
[운영체제] 3.1 프로세스의 개요 (0) | 2020.05.22 |