12장 프로세스 동기화

2023. 3. 29. 23:56

12-1) 동기화란

  • 동기화의 의미
    • 프로세스는 동시다발적으로 실행되므로, 실행 순서와 자원의 일관성을 보장하기 위해 동기화가 필요하다.
    • 프로세스 동기화는 프로세스들 사이의 수행 시기를 맞추는 것이다.
      • 실행 순서 제어 : 프로세스를 올바른 순서대로 실행
      • 상호 배제 : 동시에 접근해서는 안 되는 자원에 하나의 프로세스만 접근하게 하기
    • 실행 순서 제어를 위한 동기화
      • Reader와 Writer 프로세스가 동시 실행 중이면 Writer 프로세스가 먼저 끝나야 한다.
      • 수정중인 txt를 read하는 것이 올바른 실행 순서가 아니기 때문
    • 상호 배제를 위한 동기화
      • 현재 수정중인 데이터를 읽어와 추가로 수정하게 되면 이전 프로세스의 결과값이 저장되지 않을 수 있음
  • 공유 자원과 임계 구역
    • 공유자원은 공동으로 사용하는 자원으로, 전역 변수가 될 수도 있고, 파일이 될 수도 있고, 입출력장치, 보조기억장치가 될 수도 있다.
    • 임계 구역은 공유 자원에 접근하는 코드 중 동시에 실행하면 문제가 발생하는 코드 영역을 의미
    • 레이스 컨디션(race condition) : 프로세스가 동시 다발적으로 임게 구역의 코드를 실행하면 생기는 문제를 의미
    • 상호 배제를 위한 동기화는 두 개 이상의 프로세스가 임계 구역에 동시에 접근하지 못하도록 관리하는 것

12-2) 동기화 기법

  • 뮤텍스 락
    • 임계구역에 자물쇠를 달아 한 명만 사용하게 하는 것
    • 뮤텍스 락은 동시에 접근해서 안되는 자원에 동시에 접근하지 않도록 만드는 도구
      • 상호 배제를 위한 동기화 도구라는 뜻
    • 단순한 구현 형태
      • 자물쇠 역할 : 프로세스들이 공유하는 전역 변수 lock
      • 임계 구역을 잠그는 역할 : acquire 함수
      • 잠금 해제 역할 : release 함수
acquire() {
	while (lock == true)
		;
	lock = true
}

release() {
	lock = false;
}

//사용 법
acquire();
... 변수 접근 코드
release();
  • 세마포어(semaphore)
    • 뮤텍스 락은 하나의 공유 자원에 접근하는 프로세스를 상정한 방식
    • 세마포어는 공유 자원이 여러 개 있을 경우를 상정
    • 구현 방법
      • 임계 구역에 진입할 수 있는 프로세스의 개수를 나타내는 전역변수 S
      • 임계 구역에 들어가도 좋은지, 기다려야 하는지를 알려주는 wait 함수
      • 임계 구역 앞에서 기다리는 프로세스에, 접근해도 된다는 신호를 주는 signal 함수
      wait()
      // 임계구역
      signal()
      
      
      wait() {
      	while (S <= 0)
      	;
      	S--
      }
      
      signal() {
      	S+=+
      }
  • 모니터
    • 매번 임계 구역 앞뒤로 wait와 signal 함수를 명시하는 것은 번거롭다.
    • 모니터는 사용자가 사용하기에 좀더 편리한 도구
    • 모니터는 공유 자원과 공유 자원에 접근하기 위한 인터페이스를 묶어 관리함
    • 모니터를 통해 공유 자원에 접근하고자 하는 프로세스를 큐에 삽입하고, 삽입된 순서대로 자원을 사용하게 함

' > 혼자 공부하는 컴퓨터 구조 + 운영체제' 카테고리의 다른 글

14장 가상메모리  (0) 2023.04.03
11장 CPU 스케줄링  (0) 2023.03.29
10장 프로세스와 스레드  (0) 2023.03.26
9장 운영체제 시작하기  (0) 2023.03.26
8장 입출력장치  (0) 2023.03.23

+ Recent posts