프로세스는 동시 또는 병렬적으로 수행이 가능하다. 동시성 또는 병렬성이 있을 때 여러 프로세스가 공유 데이터를 다루면서 데이터 무결성 문제가 발생할 수 있다. 이 문제를 동기화를 통해 해결한다.
여러 프로세스가 동시에 공유 자원(데이터)를 읽거나 수정할 때 실행 순서에 따라 결과가 달라지는 상황을 말한다.
커널 영역의 Race Condition
두 스레드가 동시에 하나의 공유 자원에 접근하는 경우 발생한다. 예시로 커널에는 파일 목록을 관리하는 파일 리스트 공유 자원이 존재하는데, 두 스레드가 동시에 파일을 열거나 닫으려고 파일 리스트에 접근할 때 발생할 수 있다.
- 비선점형 커널은 한 번에 하나의 스레드만 접근할 수 있어 Race Condition이 일어나지 않는다.
- 선점형 커널은 Race Condition이 일어날 수 있지만 그럼에도 불구하고 뛰어난 반응성을 위해서 사용한다.
공유 자원이 존재해 이를 읽거나 수정할 수 있는 공간으로, 여러 프로세스가 동시에 접근할 수 없는 구역을 말한다.
프로세스들이 공유 자원을 협력적으로 사용하도록 동기화하기 위해서 프로토콜을 설계하는 문제
피터슨이 임계 영역 문제를 해결하기 위해 제시한 고전적인 소프트웨어 방법
int turn;
boolean flag[2];load나 store 같은 명령어는 순서를 바꿔서 실행(==명령어 재배열)할 수 있다.동시성 작업 환경에서 데이터의 정확성을 보장할 때 Thread Safe하다고 한다.
Thread Safe를 보장하기 위한 기본적인 방법 중 하나는 상태를 공유하지 않는 것이다.
불변 객채 등을 통해서 상태를 공유하지 않으면 동기화가 필요 없어, 성능 저하 없이 Thread Safe를 보장할 수 있다.
학습하며 정리한 글이기 때문에 혼용된 표현 또는 잘못된 내용이 있을 수 있습니다.
만약, 발견하신 경우 댓글을 통해 알려주신다면 진심으로 감사드립니다.