멀티 스레드
>> 하나의 응용 프로그램에서 여러 스레드를 구성해 각 스레드가 하나의 작업을 처리하는 것
스레드들이 공유 메모리를 통해 다수의 작업을 동시에 처리하도록 진행함. 스레드는 프로세스와 달리 코드,데이터,힙은 스레드끼리 서로 공유하며, 그 외의 영역은 각각 생성됨(ex. 스택)
멀티스레딩은 프로세스 내 작업을 여러개의 스레드, 멀티스레드로 처리하는 기법이며 스레드끼리 서로 자원을 공유하기 때문에 효율성이 높음. 한 스레드가 중단(blocked) 된 상태여도 다른 스레드는 실행(running) 상태 일 수 있기 때문에 중단되지 않은 빠른 처리가 가능하며, 동시성에도 큰 장점이 있습니다.
동시성 : 서로 독립적인 작업들을 작은 단위로 나누고 동시에 실행되는 것처럼 보여주는 것
Thread-safe
- Thread-safe란?
- 직역하면 스레드 안전.
- 멀티스레드 환경에서 여러 스레드가 동시에 하나의 객체 및 변수(공유 자원)에 접근할 때, 의도한 대로 동작하는 것을 말함.
- 이러한 상황을 "Thead-safe하다" 라고 표현함.
- Thread-safe하게 구현하기
- Thread-safe하기 위해서는 공유 자원에 접근하는 임계영역(critical section)을 동기화 기법으로 제어해줘야 함.
- 이를 '상호배제'라고 함.
- 동기화 기법으로는 Mutex나 Semaphore 등이 있다.
- Thread-safe하기 위해서는 공유 자원에 접근하는 임계영역(critical section)을 동기화 기법으로 제어해줘야 함.
- Reentrant
- Reentrant는 재진입성이라는 의미로, 어떤 함수가 Reentrant하다는 것은 여러 스레드가 동시에 접근해도 언제나 같은 실행 결과를 보장한다는 의미
- 이를 만족하기 위해서 해당 서브루틴에서는 공유자원을 사용하지 않으면 됨
- 예를들어 정적(전역) 변수를 사용하거나 반환하면 안 되고 호출 시 제공된 매개변수만으로 동작해야함
- 따라서, Reentrant하다면 Thread-safe하지만 그 역은 성립하지 않음
공유 자원
공유 자원은 시스템 안에서 각 프로세스, 스레드가 함께 접근할 수 있는 모니터, 프린터, 메모리, 파일, 데이터 등의 자원이나 변수 등을 의미합니다. 이 공유 자원을 2개 이상의 프로세스가 동시에 읽거나 쓰는 상황을 경쟁 상태(Race Condition)이라고 함. 이처럼 동시에 접근을 시도할 때 접근의 타이밍이나 순서 등이 결괏값에 영향을 줄 수 있는 상태를 의미함.
Race Condition이 발생하는 경우
1. 커널 작업을 수행하는 중에 인터럽트 발생
- 커널 모드에서 작업을 수행하는 동안, 인터럽트를 disable 시켜 CPU 제어권을 가져가지 못하도록 함.
2. 프로세스가 'System Call'을 하여 커널 모드로 진입하여 작업을 수행하는 도중 문맥 교환이 발생할 때
- 프로세스가 커널모드에서 작업하는 경우 시간이 초과되더라도 CPU 제어권이 다른 프로세스에게 넘어가지 않도록 함.
3. 멀티 프로세서 환경에서 공유 메모리 내의 커널 데이터에 접근할 때
- 커널 내부에 있는 각 공유 데이터 접근할 때마다, 그 데이터에 대한 lock/ unlock을 하는 방법
임계 영역
임게 영역은 둘 이상의 프로세스, 스레드가 공유 자원에 접근 할 때 순서 등의 이유로 결과가 달라지는 코드 영역을 말함. 임계 영역을 해결하기 위한 방법은 크게 뮤텍스, 세마포어, 모니터 3가지 방법이 있으며, 이 방법 모두 상호 배제, 한정 대기, 융통성이라는 조건을 만족함.
이때 방법의 토대가 되는 메커니즘은 잠금(lock)방법을 사용함.
상호 배제 : 한 프로세스가 임계 영역에 들어갔을 때 다른 프로세스는 들어갈 수 없다.
한정 대기 : 특정 프로세스가 영원히 임계 영역에 들어가지 못하면 안된다.
융통성 : 만약 어떠한 프로세스도 임계 영역을 사용하지 않는다면 임계 영역 외부의 어떠한 프로세스도 들어갈 수 있으며 이때 프로세스끼리 서로 방해하지 않는다.
'CS 전공지식 > Operating System' 카테고리의 다른 글
[운영체제] 메모리와 캐시 (0) | 2024.06.03 |
---|---|
[운영체제] CPU 스케줄링과 알고리즘 (1) | 2024.06.03 |
[운영체제] Mutex(뮤텍스), Semaphore(세마포어), Deadlock(데드락) (0) | 2024.06.02 |
[운영체제] 멀티 프로세스와 PCB (1) | 2024.06.02 |
[운영체제] 프로세스 & 스레드 (0) | 2024.06.02 |