[OS] Operating System - Thread & Concurrnecy
2024. 1. 4. 00:40ㆍCS/OS
Thread

- 프로세스 내에서 실행되는 여러 흐름의 단위
- 프로세스 내에서 실제로 작업을 수행하는 주체이다
- 구성
- ThreadID
- 스레드 고유 식별자
- 운영체제는 이 ID를 사용하여 각 스레드를 구별한다
- Program Counter (PC)
- 스레드가 현재 실행 중인 코드의 주소를 가리키는 역할
- 스레드가 다음에 어떤 명령을 실행할지 결정하는 데 사용
- register set
- 스레드의 현재 작업에 필요한 데이터와 명령을 저장하는 레지스터들의 집합
- 스레드의 현재 상태를 나타내며, 스레드 전환 시 저장 및 복원
- stack
- 스레드의 함수 호출, 지역 변수, 반환 주소 등을 저장하는 메모리 영역
- 각 스레드는 독립적인 스택을 가지며, 이는 스레드 간 데이터 충돌을 방지하는 역할
- ThreadID
- 특징
- 프로세스보다 생성과 관리가 더 경량화되어 있다.
- 스레드 간의 문맥 교환이 프로세스 간의 문맥교환보다 빠르고 효율적이기 때문이다
- 자원 공유
- 같은 프로세스 내의 스레드들은 메모리와 자원을 공유
- 데이터를 공유하고 통신하기 쉽게 만들지만, 동시성 관리의 필요성이 생김
- 병렬 처리
- 멀티코어 프로세서에서 스레드는 병렬 처리를 가능하게 하여 성능을 향상한다
- 각 스레드는 동시에 다른 코어에서 실행 가능하다
- 프로세스보다 생성과 관리가 더 경량화되어 있다.
MultiThreading - 멀티 스레딩

- 클라이언트가 서버에 요청을 보냄
- 서버는 받은 요청을 처리하기 위해 새로운 스레드 생성
- 서버는 추가적인 클라이언트 요청을 계속 듣기 위해 원래 상태로 복귀
클라이언트 요청은 별도의 스레드에 의해 독립적으로 처리되며, 서버는 다른 요청을 동시에 처리할 수 있게 된다.
--> 효율성과 응답성을 향상하는 멀티스레딩 접근방식
- 장점
- 응답성
- 지속적인 실행이 가능해짐
- 프로세스의 일부가 차단되어도 지속적인 실행이 가능하다
- 자원 공유
- 프로세스의 자원을 공유
- 공유 메모리나 메시지 전달 방식으로 프로세스 간의 전달 방식보다 훨씬 효율적이다
- 경제성
- 프로세스 생성비용보다 적게 든다
- 스레드의 전환은 콘텍스트 전환보다 오버헤드가 낮다
- 확장성
- 프로세스가 멀티 프로세서 아키텍처의 이점을 활용할 수 있다.
- 응답성
Multicore Programming - 멀티코어 프로그래밍

멀티코어 프로그래밍의 목적
- Identifying tasks - 작업 식별
- 분리 가능한 다양한 작업 영역을 찾아야 한다
- Balance - 균형
- 모든 작업이 동등한 가치의 일을 동일하게 수행하도록 해야 함
- Data splitting - 데이터 분할
- 데이터 또한 별도의 코어에서 실행될 수 있도록 나눠야 함
- Data dependency
- 데이터 의존성을 고려해서 작업 실행이 동기화되도록 해야 함

- 데이터 병렬성
- 데이터를 여러 조각으로 나눠서 각 코어가 동일한 작업을 서로 다른 데이터 조각들과 동시에 수행하도록 하는 방식
- 작업 병렬성
- 다른 종류의 작업을 동시에 수행할 수 있도록 데이터가 아닌 작업 단위로 코어에 할당
MultiThreading Models
스레드의 경우 두 개의 모드가 존재한다.

- 유저 스레드
- 사용자 수준의 라이브러리에서 관리되는 스레드
- 커널 위에서 지원되며 커널의 도움 없이 관리
- 운영체제 커널에 의해 직접적으로 인식되지 않으며, 스레드 관리 기능은 사용자 영역에서 수행
- 사용자 수준의 라이브러리에서 관리되는 스레드
- 커널 스레드
- 운영체제 커널에 의해 직접 관리
- 커널에서 해당 스레드들을 개별적으로 스케줄링
- 멀티 프로세서 환경에서 명령 실행 지원



- Many to One
- 여러 개의 유저 스레드가 하나의 커널 스레드에 연결
- 하나의 커널 스레드가 블록 되면 해당 커널에 연결된 모든 유저 스레드들도 작업을 수행할 수 없음
- I/O작업, 시스템 호출로 인해 커널 스레드가 대기 상태가 되는 경우, 연결된 모든 유저 스레드가 실행 중지
- One to One
- 각 유저 스레드가 개별적인 커널 스레드에 연결
- 병렬처리 가능하다는 장점
- 스레드 생성에 더 많은 자원 소모 발생
- Many to Many
- 여러 유저 스레드를 여러 커널 스레드에 할당
- 유연성 제공 및 블록 된 스레드가 존재하더라도 스레드의 실행을 방해하지 않음
'CS > OS' 카테고리의 다른 글
[OS] Operating System - Synchronization Tools(1) (1) | 2024.01.21 |
---|---|
[OS] Operating System - CPU Scheduling (0) | 2024.01.19 |
[OS] Operating System 01 - Introduction 02 (0) | 2023.12.28 |
[OS] Operating System 01 - Introduction (1) | 2023.12.27 |
[Operate System] Thread (0) | 2022.11.18 |