인프런의 운영체제 공룡책 강의를 듣고 정리한 포스팅입니다.
멀티 스레딩
하나의 프로세스가 여러 개의 스레드를 가질 수 있음
스레드 (Thread)
- 스레드는 가벼운 프로세스임 (LWP : Light Weight Process)
- 멀티스레딩이 제공된다면, CPU를 점유하는 단위가 스레드가 됨
- CPU를 점유하는 것이 PID(Process ID)가 아닌 TID(Thread ID)가 됨
- 스레드 별로 나뉘는 것
- program counter
- register set
- stack
- 나머지 메모리 영역은 프로세스 내의 모든 스레드가 공유
멀티 스레딩의 장점
Responsiveness
: 유저 인터페이스를 처리할 때 block할 필요 없이 실행을 계속 할 수 있음
Resource Sharing
: 스레드는 코드와 데이터 영역을 공유하기 때문에 리소스 사용에 자유로움
(프로세스는 공유 메모리나 메시지 패싱을 이용해 데이터 통신을 했어야 함)
Economy
: 프로세스를 생성하는 것보다 값이 싸고, 문맥 교환보다 스레드 교환이 오버헤드가 더 적음
Scalability
: 코어가 여러 개인 멀티 프로세서 구조에서 각각의 스레드를 붙여 병렬 처리가 가능
멀티 코어 시스템의 멀티 스레딩
장점
- concurrency 향상
- 4개의 스레드를 고려한다고 할 때
- 싱글 코어 : 시간에 따라 사이사이에 끼워 넣어 time sharing 함
- 멀티 코어 : 병렬적으로 동작 가능
멀티 코어 시스템의 프로그래밍 도전과제
- Identifying tasks : 어떤 태스크를 병렬적으로 처리할 수 있냐
- Balance : 스레드 간 한 일을 잘 쪼개서 밸런스를 맞춰줘야 함
- Data splitting : 각각의 코어에 데이터를 어떻게 쪼개 넣어야 하는지
- Data dependency : 데이터의 동기화를 잘 해줘야 함
- Testing / Debugging : 싱글 스레드보다 어려워짐
병렬 처리
병렬 처리의 종류
- 데이터 병렬성 : 데이터를 각각의 코어에 쪼개는 것
- 태스트 병렬성 : 데이터를 하나로 두고 task를 쪼개는 것
암달의 법칙
코어는 많을 수록 좋은가?
→ 전부 다 병렬처리 되는 것이 아니므로 그런 것은 아님
스레드의 타입
유저 스레드
유저 모드에서 스레딩 하는 것
커널스레드
코어에 직접 스레딩 할 수 있는 스레드를 커널 스레드로 운영체제가 생성해서 운영체제 직접 관리
운영체제가 직접 관리하는 스레드
커널 스레드와 유저 스레드의 관계
커널 스레드 한 개와 여러 유저 스레드
커널 스레드 한 개에 한 개의 유저 스레드