스레드 동기화
스레드는 기본적으로 비동기식으로 동작한다. 스레드는 프로세스와 달리 프로세스 내의 메모리를 공유해 사용하기 때문에 여러개의 스레드가 동시에 수행되고 있는 상황에서는 자원에 대한 충돌이나 오류가 발생할 수 있다.
이러한 문제를 방지하기 위해 스레드 동기화 처리가 필요하다.
스레드는 같은 주소 공간에 존재하며 같은 메모리를 참조하는 다른 스레드에 영향을 미치는데 이때 스케줄링에 따라 프로세스를 상태가 변경될때 필요한 내용을 PCB에 저장, 로드 시키는 과정을 문맥교환이라고 한다. 스레드에서는 예외 처리기와 스케줄링 우선순위, 시스템에서 일정을 잡을 때까지 스레드 컨텍스트를 저장하는데 사용되는 구조 집합을 유지 관리 한다. 스레드 컨텍스트는 스레드의 CPU레지스터와 스택 집합을 비롯하여 실행을 다시 시작하기 위해 쓰레드에서 필요한 모든 정보를 쓰레드 호스트 프로세스의 주소 공간에 포함한다.
크리티컬 섹션(Critical Section)
- 임계 구역또는 공유변수 영역은 병렬 컴퓨팅에서 둘 이상의 스레드가 동시에 접근해서는 안되는 공유 자원을 접근하는 코드의 일부를 말한다. 임계 구역은 지정된 시간이 지난 후 종료 된다. 때문에 어떤 스레드가 임계 구역에 들어가고자 한다면 지정된 시간만큼 대기해야 한다. 스레드가 공유자원의 배타적인 사용을 보장받기 위해서 임계 구역에 들어가거나 나올때는 세마포어 같은 동기화 메커니즘이 사용된다. (프로세스는 임계 구역에 진입하기 위해 진입허가를 요청, 이런 요청을 구현하는 코드 부분을 입장구역 이라고 하고, 입장구역에서 기다리다가 진입 허가가 나면 입계 구역에 들어간다. 임계 구역 이후에는 임계 구역을 빠져나왔음을 알리는 코드 부분인 퇴장영역이 있음)
뮤텍스[상호 배제](Mutual Exclusion)
- 프로세스의 상호 교신에 대한 기본적인 조치는 공용 부분을 여러 프로세스가 동시에 사용하지 못하도록 한다.임계지역을 실행하고 있는 프로세스가 하나도 없을 경우 임계지역에 진입을 요구한 프로세스에게 사용을 허가한다. 2개 이상의 프로세스가 임계지역에 들어오려 경쟁할 때 그 선택이 무기한 방치되어서는 안된다. (뮤텍스는 여러 프로세스의 스레드 사이에서 동기화가 가능, Critical Section은 하나의 프로세스 내의 스레드들 간의 동기화를 컨트롤 함)
세마포어(Semaphore)
- 뮤텍스에서 한번에 하나의 스레드만이 자원에 접근할 수 있었던 것에 비해 세마포어는 사용자가 지정한 개수만큼 자원에 접근 할 수 있다.
- Semaphore는 시스템 범위에 걸쳐있고 파일시스템상의 파일 형태로 존재
- Mutex는 Semaphore가 될 수 없지만 Semaphore는 Mutex가 될 수 있음
[참고]
https://ko.wikipedia.org/wiki/%EC%9E%84%EA%B3%84_%EA%B5%AC%EC%97%AD
https://do-rang.tistory.com/90
반응형
'Computing Science > 운영체제' 카테고리의 다른 글
[Computer Science] 운영체제 - 프로세스, 스레드 (2) | 2024.01.02 |
---|---|
[Computer Science] 운영체제 - CPU 스케줄링, 문맥교환(Context-switching) (1) | 2024.01.02 |