CS지식 쌓기

동기화 기법

류도토리 2024. 1. 2. 17:31
  1. 뮤텍스 락
    1. 상호 배제를 위한 동기화 도구(자물쇠 역할), 뮤텍스 락
    2. 공유 자원이 하나만 있을 경우
    3. 전여 변수 하나, 함수 두 개
      1. 자물쇠 역할 ; 프로세스들이 공유하는 전역 변수 lock
      2. 임계 구역을 잠그는 역할 : acquire 함수
      3. 임계 구역의 잠금을 해제하는 역할 : release 함수
      4. acquire 함수
        1. 프로세스가 임계 구역에 진입하기 전에 호출
        2. 임계 구역이 잠겨있다면, 임계 구역이 열릴 때까지 임계 구역을 반복적으로 확인 ( lock이 false가 될때까지)
        3. 임계 구역이 열려있다면, 임계 구역 잠그기(lock을 true로 바꾸기)
      5. release 함수
        1. 임계 구역에서의 작업이 끝나고 호풀
        2. 현재 잠긴 임계 구역을 열기(lock을 false로 바꾸기)
       
    4. 바쁜 대기(busy waiting)
  2. 세마포
    1. 좀 더 일반화된 방식의 동기화 도구
    2. 공유 자원이 여러 개 있는 경우에도 적용 가능
    3. 임계 구역 앞에서 멈춤 신호를 받으면 잠시 기다리기
    4. 임계 구역 앞에서 가도 좋다는 신호를 받으면 임계 구역 진입
    5. 전역 변수 하나, 함수 두 개
      1. 임계 구역에 진입할 수 있는 프로세스의 개수를 나타내는 전역 변수 S
      2. 임계 구역에 들어가도 좋은지, 기다려야 할지를 알려주는 wait 함수
      3. 임계 구역 앞에서 기다리는 프로세스에 이제 가도 좋다고 신호를 주는 signal 함수
    1. 여기도 busy waiting이 될 수 있다
    2. busy waiting 해결방법
      1. 사용할 수 있는 자원이 없을 경우 대기 상태로 만듦 (해당 프로세스의 PCB를 대기 큐에 삽입)
      2. 사용할 수 있는 자원이 생겼을 경우 대기 큐의 프로세스를 준비 상태로 만듦 (해당 프로세스의 PCB를 대기 큐에서 꺼내 준비 큐에 삽입)
    3. 실행 순서 동기화
      1. 세마포의 변수 S를 0으로 두고
      2. 먼저 실행할 프로세스 뒤에 signal 함수
      3. 다음에 실행할 프로세스 앞에 wait 함수를 붙이면 됌
  3. 모니터
    1. 개발자가 다루기에 편한 동기화 도구
    2. 상호 배제를 위한 동기화
    3. 인터페이스를 위한 큐
    4. 공유자원에 접근하고자 하는 프로세스를 큐에 삽입
    5. 큐에 삽입된 순서대로 공유 자원 이용
    6. 조건 변수 이용
      1. 프로세스나 스레드의 실행 순서를 제어하기 위해 사용하는 특별한 변수
      2. 조건변수.wait() : 대기 상태로 변경, 조건 변수에 대한 큐에 삽입
      3. 조건변수.signal() : wait()으로 대기 상태로 접어든 조건 변수를 실행 상태로 변경
    7. 모니터 안에는 하나의 프로세스만이 있을 수 있다
    8. 실행 순서 제어를 위한 동기화
      1. 특정 프로세스가 아직 실행될 조건이 되지 않았을 때에는 wait를 통해 실행을 중단
      2. 특정 프로세스가 실행될 조건이 충족되었을 때에는 signal을 통해 실행을 재개한다

 

 

'CS지식 쌓기' 카테고리의 다른 글

교착 상태 해결 방법  (0) 2024.01.02
교착 상태(데드락)  (0) 2024.01.02
동기화  (0) 2024.01.02
CPU 스케줄링 알고리즘  (0) 2024.01.02
CPU 스케줄링  (1) 2024.01.02