[CS/운영체제] 프로세스 동기화(Process Synchronization)

Jenny·2023년 4월 20일
0

CS

목록 보기
2/5
post-thumbnail

프로세스 동기화

1. 정의

1개의 자원을 한 순간에 1개의 프로세스만이 이용하도록 제어하는 것

2. 목적

  • 두 개 이상의 프로세스가 공유된 자원에 동시 접근하면 데이터 불일치(data inconsistency)가 발생할 수 있기 때문에 일관성을 유지하기 위한 매커니즘(동기화)가 필요함

ㄴ 동일한 자원을 동시에 접근하는 작업(공유변수 사용, 동일 파일 사용)을 실행하는 코드 영역 : Critical Section

3. Critical Section Problem (임계영역 문제)

  • 프로세스들이 Critical Section을 함께 사용할 수 있는 프로토콜을 설계하는 것

1) Requirements(해결을 위한 기본조건)

상호배제(Mutual Exclusion)

  • Critical section을 가진 스레드의 런타임이 겹치지 않게 하는 것 / 프로세스 P1이 Critical Section에서 실행중이라면, 다른 프로세스들은 그들이 가진 Critical Section에서 실행될 수 없음
  • locking, unlocking 사용

진행(Progress)

  • Critical section에서 실행중인 프로세스가 없고, 별도의 동작이 없는 프로세스들만 Critical Section 진입 후보로 참여될 수 있음

한정된 대기(Bounded Wating)

  • 프로세스 P1이 Critical section에 진입 신청 후, 받아들여질 때까지 다른 프로세스들이 Critical section에 진입하는 횟수는 제한이 있어야 한다.

2) 해결책

1) Mutex Lock

  • 동시에 공유 자원에 접근하는 것을 막기 위해 Critical Section에 진입하는 프로세스는 Lock를 획득하고, 빠져나올 때 Lock을 방출함
  • 한계 : 다중처리기 환경에서는 시간적인 효율성 측면에서 적용할 수 없음

2) Semaphores

lock / unlock 기능 , 공유 자원을 획득하게 해줌

  • 복수개의 스레드가 임계 구역에 접근 가능

  • wait, signal로 구현

  • wait이 먼저 호출되어 임계 구역에 들어갈 수 있는지, 우선적으로 실행되어야 할 스레드가 실행되는지 확인

  • 세마포어는 뮤텍스가 될 수 있지만 그 반대는 안됨

  • Counting semasphore, Binary semapore

문제점1) Deadlock (둘 이상의 프로세스가 서로 상대방에 의해 충족될 수 있는 event를 무한히 기다리는 현상)


=> P0과 P1는 S와 Q를 동시에 가질 수 없음, 자원 갖는 순서를 (S->Q)로 지정하면 해결 가능.

문제점2) Starvation : 프로세스가 suspend된 이유에 해당하는 semaphore 큐에서 빠져나갈 수 없는 현상

3) 모니터

  • 고급 언어의 설계 구조물 = 라이브러릴 혹은 프레임워크가 제공 (Java에 존재)
  • syncronized, wait(), notify() 등의 키워드로 편하게 동기화 가능

참고
https://velog.io/@suuhyeony/%EC%9A%B4%EC%98%81%EC%B2%B4%EC%A0%9C-Ch6.-%ED%94%84%EB%A1%9C%EC%84%B8%EC%8A%A4-%EB%8F%99%EA%B8%B0%ED%99%94

https://github.com/JaeYeopHan/Interview_Question_for_Beginner/tree/master/OS#%ED%94%84%EB%A1%9C%EC%84%B8%EC%8A%A4-%EB%8F%99%EA%B8%B0%ED%99%94

profile
Developer로의 여정

0개의 댓글