[혼공학습단 9기] 혼자 공부하는 컴퓨터 구조+운영체제 : 5주차

김세린·2023년 2월 12일
0
post-thumbnail

12. 프로세스 동기화

12-1. 동기화란

동기화의 의미

  • 사전 정의 : 정보, 통신 분야에서의 동기화란 작업들(프로세스들) 사이의 수행 시기를 맞추는 것
  • ‘프로세스들 사이의 수행 시기를 맞추는것’의 의미
    • 실행 순서 제어 : 프로세스를 올바른 순서대로 실행하기
      • 동시에 실행되는 프로세스를 올바른 순서대로 실행하는 것
    • 상호 배제 : 동시에 접근해서는 안 되는 자원에 하나의 프로세스만 접근하게 하기
      • 공유가 불가능한 자원의 동시 사용을 피하기 위해 사용하는 알고리즘
      • 동시에 접근해서는 안되는 자원에 동시에 접그하지 못하게 하는 것

생산자와 서비자 문제

상호 배제를 위한 동기화에 대한 설명 중 고전적이고 유명한 문제

공유 자원과 임계 구역

동시에 접근해서는 안되는 자원

  • 공유 자원(shared resource)
    • 동시에 실행되는 프로세스가 공동의 자원을 두고 작업할때 사용하는 자원
  • 임계 구역
    • 공유 자원 중 동시에 실행하면 문제가 발생하는 자원에 접근하는 코드 영역
    • 두개 이상의 프로세스가 임계 구역에 진입하고자 하면 둘 중 하나는 대기해야 한다.
    • 임계 구역에 먼저 진입한 프로세스의 작업이 마무리되면 그제서야 비로소 기다렸던 프로세스가 임계 구역에 진입할 수 있게 된다.
  • 레이스 컨디션(race condition)
    • 임계 구역에는 두 개 이상의 프로세스가 동시에 실행되면 안 되는 영역
    • 하지만, 잘못된 실행으로 인해 여러 프로세스가 동시 다발적으로 임계 구역의 코드를 실행하여 문제가 되는 경우
    • 근본 원인 : 여러 줄의 저급 언어로 변환된 고급 언어 한줄을 실행하는 과정에서 문맥 교환이 일어날 수 있다. → 해당 작업을 방지하는 작업을 동기화가 진행한다.
  • 상호 배제를 위한 동기화의 세가지 원칙
    1. 상호 배제(mutual exclusion) : 한 프로세스가 임계 구역에 진입했다면 다른 프로세스는 임계 구역에 들어올 수 없다.
    2. 진행 : 임계 구역에 어떤 프로세스도 진입하지 않았다면 임계 구역에 진입하고자 하는 프로세스는 들어갈 수 있어야 한다.
    3. 한 프로세스가 임계 구역에 진입하고 싶다면 그 프로세스는 언젠가는 임계 구역에 들어올 수 있어야 한다.(임계 구역에 들어오기 위해 무한정 대기해서는 안된다.

12-2. 동기화 기법

뮤텍스 락(Mutex Lock : MUTual EXclusion lock)

  • 동시에 접근해서는 안되는 자원에 동시에 접근하지 않도록 만드는 도구
  • 상호 배제를 위한 동기화 도구
  • 임계 구역에 진입하는 프로세스가 현재 자기 자신이 임계 구역에 있음을 알리기 위해 뮤텍스 락을 이용해 임계 구역에 자물쇠를 건다.
  • 뮤텍스 락의 단순 형태
    • 자물쇠 역할 : 프로세스들이 공유하는 전역 변수 lock
    • 임계 구역을 잠그는 역할 : acquire 함수
      • 프로세스가 임계 구역에 진입하기 전에 호출하는 함수(lock = true로 바꾸는 변수)
      • 바쁜 대기 : 임계 구역이 잠겨 있을 경우 프로세스가 반복적으로 lock을 확인하는 것
    • 임계 구역의 잠금을 해제하는 역할 : release 함수
      • 임계 구역에서의 작업이 끝나고 호출하는 함수(lock = false로 바꾸는 변수)

세마포(semaphore)

카운팅 세마포와 이중 세마포가 있지만 이 책에서의 세마포는 카운팅 세마포를 다룸

  • 뮤텍스 락과 비슷하지만 조금 더 일반화된 방식의 동기화 도구
  • 뮤텍스 락은 하나의 공유 자원에 접근하는 프로세스를 상정한 방식이지만 세마포는 공유 자원이 여러개 있는 상황에서도 적용이 가능한 동기화 도구
  • 세마포 형태
    • 임계 구역에 진입할 수 있는 프로세스의 개수(사용 가능한 공유 자원의 개수)를 나타내는 전역 변수 S
    • 임계 구역에 들어가도 좋은지, 기다려야 할지를 알려주는 wait 함수
    • 임계 구역 앞에서 기다리는 프로세스에 이제 가도 좋다는 신호를 주는 signal 함수

모니터(monitor)

  • 최근에 등장한 동기화 도구
  • 사용자가 사용하기 훨씬 편리한 도구

13. 교착 상태

13-1. 교착 상태란

식사하는 철학자 문제(dining philosophers problem)

교착 상태를 설명하기 위한 아주 고전적이고 재미있는 문제 상황

  • 교착 상태
    • 일어나지 않을 사건을 기다리며 진행이 멈춰버리는 형상
    • 해결 방법
      1. 교착 상태가 발생했을 때의 상황을 정확히 표현해야 한다.
      2. 교착 상태가 일어나는 근본적인 이유에 대해 알아야 한다.

자원 할당 그래프

교착상태를 단순히 표현가능한 그래프

  • 자원 할당 그래프
    • 규칙
      1. 프로세스는 원으로 자원의 종류는 사각형으로 표현한다.
      2. 사용할 수 있는 자원의 개수는 자원 사각형 내에 점으로 표현한다.
      3. 프로세스가 어떤 자원을 할당 받아 사용중이라면 자원에서 프로세스를 향해 화살표를 표시한다.
      4. 프로세스가 어떤 자원을 기다리고 있다면 프로세스에서 자원으로 화살표를 표시한다.
    • 교착 상태가 일어난 그래프의 경우 자원 할당 그래프가 원의 형태를 띄게 된다.

교착 상태 발생 조건

  1. 상호 배제
    • 해당 자원을 한번에 하나의 프로세스만 이용가능 했기 때문이다.
  2. 점유와 대기
    • 자원을 보유한 채 다른 자원을 기다렸기 때문이다.
  3. 비선점
    • 필요한 자원을 이용하는 프로세스의 작업이 끝나야만 비로소 이용이 가능했기 때문이다.
    • 어떤 프로세스도 다른 프로세스의 자원을 강제로 빼앗지 못했기 때문이다.
  4. 원형 대기
    • 프로세스들과 프로세스가 요청 및 할당 받은 자원이 원의 형태를 이루었기 때문이다.

13-2. 교착 상태 해법

교착 상태 예방

앞서 말한 교착 상태 발생 조건 4가지를 충족하지 못하게 한다.

  1. 자원의 상호 배제를 없애는 경우
    • 모든 자원을 공유 가능하게 만드는것
    • 이론적으로는 교착 상태를 없앨 수 있지만 현실적으로 사용하기에는 무리가 있다.
  2. 점유와 대기를 없애는 경우
    • 특정 프로세스에 자원을 모두 할당하거나 아예 할당하지 앟는 방식
    • 교착 상태 해결은 가능하지만 단점이 있다.
      1. 자원의 활용률이 낮아질 우려가 있다.
      2. 많은 자원을 사용하는 프로세스가 불리해진다.
  3. 비선점 조건을 없애는 경우
    • 자원을 이용중인 프로세스로부터 해당 자원을 빼앗을 수 있다.
    • 일부 자원에 대해서는 효과적이다
    • 하지만 모든 자원이 선점 가능한 것은 아니기에 다소 범용성이 떨어지는 방안이다.
  4. 원형 대기 조건을 없애는 경우
    • 모든 자원에 번호를 붙이고 오름차순으로 자원을 할당한다.
    • 앞선 세 방식에 비해 비교적 현실적이고 실용적이다.
    • 단점은 모든 컴퓨터 시스템내에 존재하는 수많은 자원에 번호를 붙여야 한다는 것과 각 자원에 어떤 번호를 붙이는지에 따라 특정 자원의 활용률이 떨어질 수 있다는 점이다.

교착 상태 회피

  • 교착 상태가 발생하지 않을 정도로만 조심스럽게 자원을 할당하는 방식
  • 용어
    • 안전 상태 : 교착 상태가 발생하지 않고 모든 프로세스가 정상적으로 자원을 할당 받고 종료될 수 있는 상태
    • 불안전 상태 : 교착 상태가 발생할 수도 있는 상황
    • 안전 순서열 : 교착 상태 없이 안전하게 프로세스들에 자원을 할당할 숭 ㅣㅆ는 순서를 의미

교착 상태 검출 후 회복

교착 상태 발생을 인정하고 사후에 조치하는 방식

  • 운영체제는 프로세스들이 자원을 요구할 때마다 그때 그때 모두 할당하며, 교착 상태 발생 여부를 주기적으로 검사한다.
  • 교착 상태 검출시, 비로소 아래 방식으로 회복한다.
    • 선점을 통한 회복
      • 교착 상태가 해결될 때까지 한 프로세스씩 자원을 몰아주는 방식
      • 교착 상태가 해결될 때까지 다른 프로세스로부터 자원으 강제로 뺴앗고 한 프로세스에 할당하는 방식
    • 프로세스 강제 종료를 통한 회복
      • 가장 단순하면서 확실한 방법
      • 교착 상태에 놓인 프로세스 모두 강제 종료 or 교착 상태가 없어질 때까지 한 프로세스씩 강제 종료
    • 타조 알고리즘(여담)
      • 교착 상태 아예 무시
      • 드물게 발생하는 잠재적 문제를 무시로 대처하는 방식

MISSION

p363. 1번 문제

<답> 4번

세마포를 이용하면 반드시 바쁜 대기를 해야 한다? → X

profile
성장하는 신입 개발자🌱

0개의 댓글