개인 공부 정리 목적입니다.
참고 : 양희재 교수님 : OS
참고 : https://velog.io/@conatuseus/OS-%EC%84%B8%EB%A7%88%ED%8F%AC%EC%96%B4%EC%99%80-%EB%AE%A4%ED%85%8D%EC%8A%A4
프로세스는 다른 프로세스에 영향을 주고 받는 Cooperation process가 있고 ,
아무런 영향을 미치지 않는 Independent process가 있다.
현대 컴퓨터 환경에는 Cooperation process가 훨씬 많이 존재한다.
이러한 환경의 예시로 하나를 들자면 영화관을 예시로 들 수 있다. 여러 개의 프로세스가 좌석을 예매하려고 공통 데이터에 접근을 할텐데 , 자칫 잘못하면 예약이 중복 된다던지 , 취소되었는데 예약된 자리라고 반응하던지 하는 경우가 생길 수 있다.
(현재에는 대부분 쓰레드 기준으로 스위칭을 하므로 쓰레드 동기화라고 많이 불린다)
이러한 점을 해결하기 위해 하는 것을 동기화라고 한다.
그럼 동기화란 어떻게 해야 할까??
먼저 , 간단히 용어 정리를 여러 개의 쓰레드가 수행되는 시스템에서 각 쓰레드들이 공유하는 데이터(변수,테이블 ,파일 등)를 변경하는 코드 영역을 임계 구역 이라고 한다.
위에서 예시로 들었던 좌석 예매하는 구간을 임계 구역이라 볼 수 있다.
즉 , 한 쓰레드가 먼저 접근하여 작업을 공통 변수에 대에 작업을 수행하고 있다면 , 다른 쓰레 드는 이 구역에 접근할 수 없다.
이 임계 구역에서 발생할 수 있는 문제를 해결하기 위한 것이 동기화라는 작업이며,
이를 위해 고안된 것으로 대표적으로 세마포와 뮤텍스가 있다.