본문 바로가기
CS/운영체제&컴퓨터구조

프로세스 동기화

by nothing-error 2022. 11. 3.

프로세스동기화

1. 동기화

동기화는 프로세스를 올바른 순서대로 실행하고, 동시에 접근해서는 안 되는 자원에는 하나의 프로세스만 접근하도록 제어하는 것을 말합니다. 만약 두 개 이상의 프로세스가 동시에 데이터에 접근할 경우에는 어떤 순서로 데이터에 접근했는지에 따라서 결괏값이 달라질 수 있으며 이를 레이스 컨디션(경쟁상태)이라고 합니다. 

 

2. 공유자원

공유자원은 공동으로 사용하는 자원으로 전역변수나 입출력 장치, 보조기억장치 등이 될 수 있습니다.

 

3. 임계구역

임계 구역은 공유자원에 접근하는 코드 중 레이스 컨디션이 발생할 수 있는 특정 부분을 의미합니다.

이러한 임계 구역으로 발생하는 문제를 해결하기 위해서는 3가지 원칙이 지켜져야 합니다.

  • 상호 배제 : 이미 작업 중인 프로세스가 있으면 다른 프로세스는 임계 구역에 진입해서는 안된다
  • 진행 : 임계구역에 작업중인 프로세스가 없으면 임계구역에 진입하고자 하는 프로세스는 진입할 수 있어야 한다
  • 유한 대기 : 임계 구역에 진입하려는 프로세스는 무한정 기다려서는 안 된다.

 

4. 동기화 기법

종류 내용 구현
뮤텍스락 임계구역에 진입한 프로세스는 lock을 걸고 작업이 끝난 후에는 나갈 때 lock 풀고 나감(하나의 공유자원을 가정) - lock : 프로세스들이 공유하는 전역변수
- acquire함수 : 임계구역이 잠겨 있으면 열릴 때까지 반복적으로 확인(busy wait)하고, 열려있다면 잠그는 함수
- release함수 : 잠긴 임계 구역을 열어주는 함수
세마포어 철도 신호기처럼  임계구역에 진입해도 좋을지 멈춰야할지 확인하며, 뮤텍스락과는 달리 레디큐를 통해서 busy wait을 방지함(다수의 공유자원을 가정) - 전역변수 S : 임계구역에 진입할 수 있는 프로세스의 개수
- wait 함수 : 임계구역에 들어가도 좋을지 기다려야할지 알려주는 함수( -1)
- signal 함수 : 임계구역에 들어가도 괜찮다고 알려주는 함수(+1)
ex ) s= 2
p1 = wait -> 임계구역 -> signal 
p2 = wait -> 임계구역 -> signal
p3 = wait -> 임계구역 -> signal
모니터 공유자원을 다루는 인터페이스에 접근하기 위한 큐를 만들고 모니터 안에는 항상 하나의 프로세스만 들어오도록 함 - 특정 프로세스가 아직 실행될 조건을 만족하지 않았을 때에는 wait을 통해 실행 중단
- 특정 프로세스가 실행될 조건을 만족했을 때에는 signal을 통해 실행 재개

 

 


Reference

혼자 공부하는 컴퓨터 구조 + 운영체제

https://coder-in-war.tistory.com/entry/OS-08-%ED%94%84%EB%A1%9C%EC%84%B8%EC%8A%A4-%EB%8F%99%EA%B8%B0%ED%99%94-%EB%AA%A8%EB%8B%88%ED%84%B0Monitor

https://rebro.kr/176

댓글