- 스레드(Thread)란?
프로세스의 실행 단위
한 프로세스 내에서 동작되는 여러 실행 흐름으로 프로세스 내의 주소 공간이나 자원을 공유
스레드는 프로세스 내의 Code, Data, Heap 영역은 다른 스레드와 공유하고 Stack 영역은 따로 할당 받음
여러 스레드는 한 프로세스 내의 공유 자원을 공유하지만, 프로세스 간에는 메모리에 접근 불가
스레드는 별도의 Register와 Stack을 갖고 있으며, 다른 영역을 공유
-> 한 스레드가 프로세스의 자원을 변경하면, 다른 스레드도 변경 결과를 즉시 확인 가능
(스레드 구성 : 스레드 ID, PC, Register, Stack)
- 스택을 스레드마다 독립적으로 할당하는 이유?
스택은 함수 호출 시 전달되는 인자, 되돌아갈 주소값 및 함수 내에서 선언하는 변수 등을 저장하기 위해 사용되는 메모리 공간
-> 독립적인 메모리 공간 = 독립적인 실행 흐름 추가
스레드의 정의에 따라 독립적인 실행 흐름을 추가하기 위한 최소 조건으로 독립된 스택을 할당
- PC Register를 스레드마다 독립적으로 할당하는 이유?
PC 값은 스레드가 명령어의 어디까지 수행했는지 나태냄
스레드는 CPU를 할당받았다가 스케줄러에 의해 다시 선점당하므로 명령어가 연속적으로 수행되지 못함
-> 어느 부분까지 수정했는지 기억할 필요가 있음
- 멀티 프로세스 vs 멀티 스레드
1) 멀티 프로세스(Multi Process)
하나의 응용 프로그램을 여러 개의 프로세스로 구성하여 각 프로세스가 하나의 작업을 처리하도록 하는 것
장점 : 여러 개의 자식 프로세스 중 하나에 문제가 발생할 경우, 그 자식 프로세스만 죽음(안정성)
단점 : 많은 메모리 공간과 CPU 시간 차지
Context Switch 오버헤드, 프로세스 간 통신 기법 IPC 사용
2) 멀티 스레드(Multi Thread)
하나의 응용 프로그램을 여러 개의 스레드로 구성하고 각 스레드가 하나의 작업을 처리하도록 하는 것
웹 서버는 대표적인 멀티 스레드 응용 프로그램
장점 : 메모리 공간과 시스템 자원 소모 감소, 스레드 간 통신시 Heap 영역을 이용해 데이터 주고받음(간단)
Context Switch에서 캐시 메모리를 비울 필요가 없어 비용이 적고 빠름 -> 처리량 향상, 자원 소모 감소, 응답 시간 단축
단점 : 자원 공유 문제 발생(동기화)
하나의 스레드에 문제가 생기면 전체 스레드가 영향 받음
- Context Switching이란?
여러 프로세스를 처리해야 하는 상황에서 현재 진행중인 Task(프로세스, 스레드)의 상태를 PCB에 저장하고 다음에 진행할 Task의 상태값을 읽어 적용하는 과정(다른 프로세스에게 CPU를 할당해 작업을 수행하는 과정)
Context Switching 비용 : Cache 초기화, Memory Mapping 초기화, 항상 커널 실행
프로세스 비용 > 스레드 비용 -> 스레드는 메모리 공유로 인해 Stack 영역만 변경 진행
- Thread-safe
멀티 스레드 환경에서 여러 스레드가 동시에 하나의 객체 및 변수(공유 자원)에 접근할 때, 의도대로 동작하는 것
임계영역을 동기화 기법(Mutex, Semaphore)으로 제어해줘야 함 -> 상호배제
'CS > 운영체제' 카테고리의 다른 글
동기화 문제 (0) | 2021.03.04 |
---|---|
CPU 스케줄링 (0) | 2021.03.02 |
스케줄러(Scheduler) 종류 (0) | 2021.03.02 |
프로세스(Process) (0) | 2021.02.24 |
운영체제(Operating Systems)란? (0) | 2021.02.23 |